[script] Génération Google sitemap dynamique sans BDD

Statut
N'est pas ouverte pour d'autres réponses.
WRInaute passionné
J'avais promis dans un post précédant de publier mon script PHP de génération dynamique de fichier sitemap.xml, alors voila.

Le principe consite à faire générer les données du fichier sitemap par les visiteurs de votre site (bien pratique pour les sites ayant de nombreuses pages générées dynamiquement). A chaque visite, on génére un petit fichier (s'il n'existe pas) contenant l'url de la page et la date courante:

Code:
<?php
	$urldemandee=$_SERVER['REQUEST_URI']; // on récupère l'url de la page courante
	// on met cette url en forme pour en faire un nom de fichier valide
	$urldemandee=ereg_replace('/','-',$urldemandee); 
	if($urldemandee=="-") $urldemandee="-index.html";
	$fichierSitemaps="sitemaps".$urldemandee;
	$fichierSitemaps=str_replace('sitemaps-','',$fichierSitemaps);
   	// on teste si le fichier existe déjà
  	if(file_exists("/cheminabsolut/sitemaps/ ".$fichierSitemaps)==false) {  
		$fd = fopen("sitemaps/".$fichierSitemaps, "w"); //on ouvre le fichier
		if ($fd) {
			if($_SERVER['REQUEST_URI']=="/") $filtrePage="/index.html";else $filtrePage=$_SERVER['REQUEST_URI']; //on evite de dupliquer domaine.com et domaine.com/index.html
			$sitemapsContent="<url>\n\t<loc>http://www.domaine.com".$filtrePage."</loc>\n\t<lastmod>".date('Y-m-d')."T".date('H:m:s+00:00')."</lastmod>\n</url>\n"; //on formate les infos pour le XML
			fwrite($fd,$sitemapsContent); //on ecrit le fichier
			fclose($fd);//on ferme le fichier
    	}
	}
?>

Maintenant on fait un script que l'on place par exemple à la racine du site sous le nom monsitemap.php:


Code:
<?
echo'<'.'?xml version="1.0" encoding="UTF-8"?'.'>
<urlset xmlns="https://www.google.com/schemas/sitemap/0.84">
';
foreach (glob("/cheminabsolut/sitemaps/*.*") as $filename) {
	$filename = str_replace("/cheminabsolut/','',$filename);
	include ($filename);
}

echo"</urlset>";
?>

Maintenant on ajoute une regle dans le .htaccess:
Code:
RewriteRule ^sitemap\.xml$ /monsitemap.php [QSA,L]

Je vous laisse le soin d'intégrer le script nécéssaire à l'effacement des fichiers du repertoire sitemaps dans votre backoffice pour gerer les mises à jour! :wink:

note: Pour les sites qui comprennent un nombre de pages proche de la limite fixée par google pour le fichier sitemap, je publierais prochainement une adaptation gérant les fichiers sitemaps en cascade....
 
WRInaute discret
stp je suis tres interessé par ton script tu peux m'expliquer comment ca marche!!

esque c possible d'interdire des url de pages comme robots??
je suis pas tres intéligent je te l'accorde

le 1er script je le place sur toutes mes pages
le 2emme je change cheminabsolut en /home/www...
 
WRInaute occasionnel
Il y a 2 erreurs de progra dans ton code fandecine :

Code:
<?php
   $urldemandee=$_SERVER['REQUEST_URI']; // on récupère l'url de la page courante
   // on met cette url en forme pour en faire un nom de fichier valide
   $urldemandee=ereg_replace('/','-',$urldemandee);
   if($urldemandee=="-") $urldemandee="-index.html";
   $fichierSitemaps="sitemaps".$urldemandee;
   $fichierSitemaps=str_replace('sitemaps-','',$fichierSitemaps);
      // on teste si le fichier existe déjà
     if(![color=red]([/color]file_exists("/cheminabsolut/sitemaps/  ".$fichierSitemaps)!==false) { 
      $fd = fopen("sitemaps/".$fichierSitemaps[color=red]"[/color], "w"); //on ouvre le fichier
      if ($fd) {
         if($_SERVER['REQUEST_URI']=="/") $filtrePage="/index.html";else $filtrePage=$_SERVER['REQUEST_URI']; //on evite de dupliquer domaine.com et domaine.com/index.html
         $sitemapsContent="<url>\n\t<loc>http://www.domaine.com".$filtrePage."</loc>\n\t<lastmod>".date('Y-m-d')."T".date('H:m:s+00:00')."</lastmod>\n</url>\n"; //on formate les infos pour le XML
         fwrite($fd,$sitemapsContent); //on ecrit le fichier
         fclose($fd);//on ferme le fichier
       }
   }
?>

A enlever les deux fois :wink:
Pas encore testé le script.

---------
Edit :
Encore 2 erreurs :
Code:
<?
echo'<'.'?xml version="1.0" encoding="UTF-8"?'.'>
<urlset xmlns="https://www.google.com/schemas/sitemap/0.84">
';
foreach(glob("/cheminabsolu/*.*") as $filename) {
   $filename = str_replace("/cheminabsolu/[color=red]',''[/color],$filename);
   include ($filename);
}

echo "</urlset>";
?>
 
WRInaute passionné
Jaunalgi a dit:
Il y a 2 erreurs de progra dans ton code fandecine :
A enlever les deux fois :wink:
Pas encore testé le script.

OOPS! :oops: ça m'apprendra!
J'ai édité le post pour le corriger! :D

il y en a au moins un qui suit! :wink:
 
WRInaute occasionnel
J'ai testé le script après avoir modifié les erreurs que je t'ai donné plus haut.

Voici le script après correction :wink:
Code:
<?php
   $urldemandee=$_SERVER['REQUEST_URI']; // on récupère l'url de la page courante
   // on met cette url en forme pour en faire un nom de fichier valide
   $urldemandee=ereg_replace('/','-',$urldemandee);
   if($urldemandee=="-") $urldemandee="-index.html";
   $fichierSitemaps="sitemaps".$urldemandee;
   $fichierSitemaps=str_replace('sitemaps-','',$fichierSitemaps);
      // on teste si le fichier existe déjà
     if(!file_exists("//cheminabsolu/sitemaps/".$fichierSitemaps)!==false) { 
      $fd = fopen("sitemaps/".$fichierSitemaps,"w"); //on ouvre le fichier
      if ($fd) {
         if($_SERVER['REQUEST_URI']=="/") $filtrePage="/index.html";else $filtrePage=$_SERVER['REQUEST_URI']; //on evite de dupliquer domaine.com et domaine.com/index.html
         $sitemapsContent="<url>\n\t<loc>http://www.grandprix4.org".$filtrePage."</loc>\n\t<lastmod>".date('Y-m-d')."T".date('H:m:s+00:00')."</lastmod>\n</url>\n"; //on formate les infos pour le XML
         fwrite($fd,$sitemapsContent); //on ecrit le fichier
         fclose($fd); //on ferme le fichier
       }
   }
?>

Code:
<?php
header("Content-Type: text/xml"); // On déclare un fichier XML
echo'<'.'?xml version="1.0" encoding="UTF-8"?'.'>
<urlset xmlns="https://www.google.com/schemas/sitemap/0.84">
';
foreach(glob("/cheminabsolu/sitemaps/*.*") as $filename) {
   $filename = str_replace("/cheminabsolu/","",$filename);
   include ($filename);
}

echo "</urlset>";
?>

Code:
RewriteRule ^sitemap\.xml$ /monsitemap.php [QSA,L]

ç'a l'air de bien fonctionner maintenant :
/** URL editée par Jaunalgi - sitemap hors ligne **/

Petit bémol : je ne veux pas indexer index.html pour éviter le conflit avec le domaine seul.
 
Nouveau WRInaute
Si je ne me trompe pas, ton fichier xml contient plusieurs fois la même page (en particulier ta page d'accueil).
 
WRInaute occasionnel
Ah oui, bien vu.

C'est bizarre ça :eek: J'ai ptêt fait une erreur de paramétrage alors...

----------------
Edit : j'avais mis une ligne en commentaire et du coup, la page d'accueil revenait sans cesse, bien vu fuleran :wink:
 
WRInaute discret
Bonjour à toutes et à tous,

à ce propos, j'ai trouvé un petit site bien pratique :

http://www.autositemap.com

Il permet, en affichant un marqueur sur les pages d'un site, de générer dynamiquement le sitemap d'un site.

Le principe est simple, chaque requête à l'image en question contient (du moins pour la majorité des personnes visitant le site) le referer de cette image. Donc, il ne reste plus qu'à extraire d'une base de données tous les réfèrants, de formater l'affichage et hop ;)

Olivier
 
WRInaute passionné
Jaunalgi a dit:
Petit bémol : je ne veux pas indexer index.html pour éviter le conflit avec le domaine seul.

d'ou l'interet de ce bout de code: :wink:
Code:
if($_SERVER['REQUEST_URI']=="/") $filtrePage="/index.html";else $filtrePage=$_SERVER['REQUEST_URI']; //on evite de dupliquer domaine.com et domaine.com/index.html
 
Nouveau WRInaute
SiteMap google

Salut Fandcine

je suis trés intéréssé par ce script, par contre je sais comment l'installer :

le 1er bloc, ou ?
2em ou ?

les deux blocs de codes dans le meme page sitemap.php ?

j'ai essayé, mais une erreur : (j pense problem de chemin )

Parse error: parse error, unexpected T_IF in /home/besthoteu/www/spain/monsitemap.php on line 5

Merci par avance
 
WRInaute passionné
le premier bloc de code doit être inserré dans toutes les pages du site.

Le second est un script php (fichier sitemap.php) permettant de générer les données du fichier sitemap. Si on inserre le troisième le bloc de code dans le fichier htacces, l'appel de sitemap.xml affichera le fichier sitemap!

voila! :D
 
Nouveau WRInaute
Bjr,

Merci beaucoup pour ce très pratique script fandecine ! :)

Après quelques tests cela me génere bien monsitemap.php

Par contre comme je lisais la notice de google et voyais les autres tags : du syle <changefreq> et <priority>, ceux si sont optionnels d'accord, mais je me demandais si cela était vraiment nécessaire de les créer ???

Si cela apportais quelques choses pour le référencement, la rapidité de ref, etc.. ?

Merci d'avance :)

JY


PS: je modifie mon post pour ajouter les quelques lignes de code pour ces 2 tags:


Code:
//  la fréquence de renouvellement de la page
$changefreq=array(0=>'always',
                             1=>'hourly',
	             2=>'daily',
	             3=>'weekly',
	             4=>'monthly',
	             5=>'yearly',
	             6=>'never');
// 0.0 to 1.0, The default priority of a page is 0.5
$priority='0.4';
$sitemapsContent="<url>\n\t<loc>http://www.votresite.com".$filtrePage."</loc>\n\t<lastmod>".date('Y-m-d')."T".date('H:m:s+00:00')."</lastmod>\n<changefreq>".$changefreq[2]."</changefreq>\n<priority>".$priority."</priority>\n</url>\n"; //on formate les infos pour le XML

Et plus qu'a executer http://www.votresite.com/monsitemap.php

Plus qu'a faire une fonction de tout ça, pour faire plus beau :wink:
 
WRInaute passionné
jyl a dit:
Par contre comme je lisais la notice de google et voyais les autres tags : du syle <changefreq> et <priority>, ceux si sont optionnels d'accord, mais je me demandais si cela était vraiment nécessaire de les créer ???

Personnellement, je n'ais pas assez de recul sur l'utilisation de GGSitemap pour dire si ces tags apportent quelquechose ou pas. J'ai choisi la simplicité en les ignorant... pour l'instant.
 
Nouveau WRInaute
Bjr à tous,

Je me posais une question sur les urls à ajouter dans le sitemap :?:

Par exemple dans ma page "club", l'url est "www.monsite.com/club.html" (grace à url_rewrite) mais après si l'internaute clique sur un club, l'url n'est pas ré-ecrite mais est du style "..com/index.php?page=club&region....."

Alors d'après le principe du sitemap faut-il ajouter les différentes pages attachées ? Quitte à avoir un sitemap qui ressemble à cela :
Code:
http://www.4x4rdv.com/sitemap.xml
ou bien juste les premières pages de chaques rubriques qui donne cela :
Code:
http://www.4x4rdv.com/sitemap1.xml
?

Qu'en pensez-vous ???

Merci d'avance

JYL
 
WRInaute occasionnel
Excellent, merci à fandecine. Je l'ai testé et adopté.

J'ai toutefois relevé une petite erreur sur la fonction date dans le script à mettre sur chaque page.

date('H:m:s+00:00')

remplacer par

date('H:i:s+00:00')

c'est mieux d'avoir les minutes au lieu du mois :wink:

Voici les scripts modifiés à ma sauce. J'ai notamment remplacé chemin absolu et nom de domaine par les variables prédéfinies de php : $DOCUMENT_ROOT et $HTTP_HOST


Code:
<?php
    
   // SITEMAP AUTO  - à placer sur chaque page - fonctionne avec monsitemap.php et .htaccess
   
   $urldemandee=$_SERVER['REQUEST_URI']; // on récupère l'url de la page courante
   // on met cette url en forme pour en faire un nom de fichier valide
   $urldemandee=ereg_replace('/','-',$urldemandee);
   if($urldemandee=="-") $urldemandee="-index.php";
   $fichierSitemaps="sitemaps".$urldemandee;
   $fichierSitemaps=str_replace('sitemaps-','',$fichierSitemaps);
      // on teste si le fichier existe déjà (les fichiers sont supprimés par pictext à chaque maj)
     if(file_exists($DOCUMENT_ROOT."/sitemaps/".$fichierSitemaps)==false) { 
      $fd = fopen("sitemaps/".$fichierSitemaps, "w"); //on ouvre le fichier
      if ($fd) {
         if($_SERVER['REQUEST_URI']=="/") $filtrePage="/index.php";else $filtrePage=$_SERVER['REQUEST_URI']; //on evite de dupliquer domaine.com et domaine.com/index.html
         $sitemapsContent="<url>\n\t<loc>http://".$HTTP_HOST.$filtrePage."</loc>\n\t<lastmod>".date('Y-m-d')."T".date('H:i:s+00:00')."</lastmod>\n</url>\n"; //on formate les infos pour le XML
         fwrite($fd,$sitemapsContent); //on ecrit le fichier
         fclose($fd);//on ferme le fichier
       }
   }
?>

Code:
<?php

// monsitemap.php

header("Content-Type: text/xml"); // On déclare un fichier XML
echo'<'.'?xml version="1.0" encoding="UTF-8"?'.'>
<urlset xmlns="https://www.google.com/schemas/sitemap/0.84"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="https://www.google.com/schemas/sitemap/0.84 https://www.google.com/schemas/sitemap/0.84/sitemap.xsd">
';
foreach(glob($DOCUMENT_ROOT."/sitemaps/*.*") as $filename) {
   $filename = str_replace($DOCUMENT_ROOT."/","",$filename);
   include ($filename);
}

echo "</urlset>";
?>
 
WRInaute occasionnel
yvan02 a dit:
Voici les scripts modifiés à ma sauce. J'ai notamment remplacé chemin absolu et nom de domaine par les variables prédéfinies de php : $DOCUMENT_ROOT et $HTTP_HOST

Si ton serveur n'utilise pas register_global sur on, ça ne fonctionnera pas.
Je te conseille $_SERVER['DOCUMENT_ROOT'] au lieu de $DOCUMENT_ROOT par exemple :wink:
 
Nouveau WRInaute
[SCRIPT] sitemap Google

Bonjour et merci pour ce script très utile.

N"étant un pro du php, comment "l'installer" dans le cadre d'un site php avec une page index et dont le contenu de chaque rubrique du menu est appelé par un switch / case ?

Merci de votre aide :)
 
Nouveau WRInaute
P'tit script sitemap.php

Bonjour !

Voila un script que j'ai fait pour lister seulement les pages pertinantes de mes sites et la date à laquelle elles ont été modifiés pour la dernière fois. Je pense que ça peut en intérresser certains ;-)

Voir dans les commentaires du code ci-dessous pour l'installer sur votre site ...

Code:
<?php
/**
 * Ce script permet de génerer le fichier XML pour Google Site Map (https://www.google.com/webmasters/sitemaps/).
 * Google Site Map a pour but d'établir la liste des pages importantes du site afin d'améliorer le référencement
 * - ce script est à placer à la racine du site
 * - la date "lastmod" sera calculé grâce à la fonction "filemtime()" qui déterminera la date de modification du fichier - si la date "lastmod" est définie dans le tableau "$tabPages", elle sera prioritaire
 *
 * @author Thomas Pequet
 * @url http://www.memotoo.com
 * @version 1.0 
 */

// Adresse du site
$adresseSite = "http://www.votreadresse.com";

// Listes des pages à afficher (par rapport à la racine)
// lastmod: date (en option - par defaut le script prendra la date de modification du fichier)
// priority: de 1.0 à 0.0 (en option - par default 0.5)
// changefreq: always - hourly - daily - weekly - monthly - yearly - never (en option)
$tabPages = array(
    "exemple1.html" => array(
        "lastmod" => "2004-05-01T12:15:12+00:00",
        "priority" => "0.6",
        "changefreq" => "monthly",
    ),
    "exemple2.html" => array(
        "lastmod" => "2004-05-01",
        "priority" => "0.1",
    ),
    "exemple3.php?toto=titi" => array(
        "lastmod" => date("Y-m-d\TH:i:s+00:00",filemtime("exemple3.php")),
        "priority" => "1.0",
        "changefreq" => "monthly",
    ),
    "dossier/exemple4.php" => array(
        "lastmod" => "",
        "priority" => "1.0",
        "changefreq" => "monthly",
    ),
);

// Cas de la racine du site
$tabPages[""] = $tabPages["index.php"];

// Tri du tableau sur le nom des pages
ksort($tabPages);

// Envoie des en-tetes en XML
header("Content-Type: text/xml");
header('Content-Disposition: inline; filename="sitemap.xml"');   
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n";
?>
<urlset xmlns="https://www.google.com/schemas/sitemap/0.84">
<?
// Parcours des pages
$tabPages_keys = array_keys($tabPages);
for ($i=0;$i<sizeof($tabPages_keys);$i++)
{
?>
 <url>
  <loc><?=$adresseSite."/".utf8_encode(htmlspecialchars($tabPages_keys[$i]));?></loc>
<?
    if (isset($tabPages[$tabPages_keys[$i]]["lastmod"]) && $tabPages[$tabPages_keys[$i]]["lastmod"]!="")
    {

?>
  <lastmod><?=$tabPages[$tabPages_keys[$i]]["lastmod"];?></lastmod>
<?
    }
    else if (is_file($tabPages_keys[$i]))
    {
?>
  <lastmod><?=date("Y-m-d\TH:i:s+00:00",filemtime($tabPages_keys[$i]));?></lastmod>
<?
    }

    if (isset($tabPages[$tabPages_keys[$i]]["changefreq"]) && $tabPages[$tabPages_keys[$i]]["changefreq"]!="")
    {
?>
  <changefreq><?=$tabPages[$tabPages_keys[$i]]["changefreq"];?></changefreq>
<?
    }    

    if (isset($tabPages[$tabPages_keys[$i]]["priority"]) && $tabPages[$tabPages_keys[$i]]["priority"]!="")
    {
?>
  <priority><?=$tabPages[$tabPages_keys[$i]]["priority"];?></priority>
<?
    }
?>
 </url>  
<?    
}
?>
</urlset>

Thomas
 
WRInaute discret
SAlut,
Comme je suis nouveau, je ne sais pas ce que c'est le sitemap ?
Quelqu'un pourrais m'eclairé ?
Merci ;)
Daf'
 
WRInaute passionné
Quelqu'un pourrais m'eclairer ?

utilise la boite de recherche en haut de de page, tu trouveras tout ce qu'il y a à savoir.

pour résumer en quelques mots : Il s'agit d'un plan de site reconnu par les robots de google pour faciliter l'indexation de pages.
 
Nouveau WRInaute
Excellent idée d' utiliser l' url rewriting pour les sitemaps !

J' ai remarqué que certains sites avaient des "sous-liens".
Par exemple si tu tappe xiti dans google tu vas avoir
sous le titre des liens vers "Espace Abonné", "Démonstration"...

Est ce que c' est bien les sitemaps qui permettent d' avoir ca ?

Est ce qu on peut avour ces "sous-liens" sur une page autre que index.htm?

Merci d' avance
 
WRInaute passionné
je pense que tu confond avec le clustering!

Lorsque google trouve deux pages d'un même site dans une page de resultats, il procéde de la sorte. Mais cela n'a rien à voir avec le fichier sitemap dont la seule utilité est de faciliter le travail du robot d'indexation de Google.
 
Nouveau WRInaute
fandecine a dit:
note: Pour les sites qui comprennent un nombre de pages proche de la limite fixée par google pour le fichier sitemap, je publierais prochainement une adaptation gérant les fichiers sitemaps en cascade....

c'est quoi la limite fixé par google ?
 
WRInaute passionné
Encore un qui ne lit pas les topics de WRI! :wink:

Aller, je suis sympa! :D

Vous pouvez compresser vos fichiers Sitemap à l'aide de l'utilitaire gzip. Cette compression réduira le besoin de bande passante. Notez que la taille de votre fichier Sitemap non compressé ne doit pas être supérieure à 10 Mo.

et encore

Vous pouvez fournir plusieurs fichiers Sitemap, sachant que pour chacun d'eux le nombre d'URL est limité à 50 000 et que la taille de chaque fichier ne doit pas dépasser 10 Mo (10 485 760 octets) avant compression. Ces limites contribuent à éviter la surcharge de votre serveur Web lors de la présentation à Google de fichiers volumineux.

Si vous voulez répertorier plus de 50 000 URL, vous devez créer plusieurs fichiers Sitemap. De même, si vous pensez qu'à terme votre plan Sitemap risque de compter plus de 50 000 URL ou de dépasser les 10 Mo, vous pouvez envisager de créer d'emblée plusieurs fichiers. Si vous procédez ainsi, pensez à répertorier vos différents plans Sitemap dans un fichier d'index Sitemap. Les fichiers d'index Sitemap ne peuvent pas compter plus de 1 000 plans.

enfi, tout est disponible à l'adresse https://www.google.com/webmasters/sitem ... tocol.html et en français en plus!

Maintenant, tu n'as plus d'excuses.... :wink:
 
WRInaute occasionnel
fandecine a dit:
je pense que tu confond avec le clustering!

Lorsque google trouve deux pages d'un même site dans une page de resultats, il procéde de la sorte. Mais cela n'a rien à voir avec le fichier sitemap dont la seule utilité est de faciliter le travail du robot d'indexation de Google.

Ou plutôt avec les nouveaux liens qui sont apparus depuis le mois d'août pour certains sites et dont on parle ici : https://www.webrankinfo.com/forum/t/nouveaux-liens-dans-les-resultats-google.34323/

Sinon je vais tester ton script Fandecine, il me plait bien (du moins le côté "automatisé" du script)
 
WRInaute discret
Bonjour,

Je mexcuse de m'incruster dans la conversation mais je voudrais savoir si avec le fichier sitemap.xml dont on parle plus haut on peut générer un plan de site affichable dans une page web comme par exemple le plan du site de webrankinfo (voir lien bas de cette page)

merci d'avance pour vos réponses... :)
 
WRInaute discret
Merci beaucoup pour ce script, je l'ai intégré a mon site !

J'ai juste fait quelques modif pour que les pages avec des "&" dans l'url puissent passer:

//on evite de dupliquer domaine.com et domaine.com/index.html
$filtrePage=ereg_replace('&','&amp;',$filtrePage)
 
WRInaute discret
fandecine a dit:
...
note: Pour les sites qui comprennent un nombre de pages proche de la limite fixée par google pour le fichier sitemap, je publierais prochainement une adaptation gérant les fichiers sitemaps en cascade....

Bonjour fandecine,

je voulais savoir si tu pouvais nous mettre ton nouveau script à disposition.

Merci bcp !
 
WRInaute discret
J'utilise <priority> et les pages à grandes prioritées sont celles qui sortent le plus souvent dans google. Bon je ne sais pas vraiment si c'est le priority qui fait çà ou pas car ce sont aussi les pages les plus visitées/populaires...
 
WRInaute discret
C'est un bon script effectivement, seulement il faut modifier toutes les pages, et ça c'est déjà un peu plus problématique...

Pour mon précédent sitemap je m'étais servi de EndSheet, là je vais essayer avec le propre générateur de Google dès que j'aurai installé Python :)
 
Nouveau WRInaute
DomZ a dit:
fandecine a dit:
...
note: Pour les sites qui comprennent un nombre de pages proche de la limite fixée par google pour le fichier sitemap, je publierais prochainement une adaptation gérant les fichiers sitemaps en cascade....

Bonjour fandecine,

je voulais savoir si tu pouvais nous mettre ton nouveau script à disposition.

Merci bcp !

Ca serait génial çà !
J'ai testé le premier script et çà marche très bien :wink:
Quelle est la limite actuelle de page référencées pour un sitemap ? Est-ce bien 50.000 ?
 
Nouveau WRInaute
Autre question, j'ai plus de 2000 pages référencées. Or lorsque j'essaye d'afficher le fichier sitemap.xml, il n'arrive pas à afficher TOUTES les pages référencées.
1°) Est-ce normal ?
2°) Est-ce que Google LUI arrive à prendre en compte toutes les pages ?

Merci pour vos lumière
 
WRInaute discret
divine99 a dit:
Autre question, j'ai plus de 2000 pages référencées. Or lorsque j'essaye d'afficher le fichier sitemap.xml, il n'arrive pas à afficher TOUTES les pages référencées.
1°) Est-ce normal ?
2°) Est-ce que Google LUI arrive à prendre en compte toutes les pages ?

Merci pour vos lumière

1) Si tu n'as pas mis le 1er script sur toutes tes pages, oui
2) Google ne prend pas toujours toutes les pages, il va crawler ton site mais il ne va pas forcement toutes les indexer ni toutes les crawler (à vérifier avec quelqu'un de plus expérimenter que moi sur ce point :))
 
Nouveau WRInaute
ericdebra a dit:
divine99 a dit:
Autre question, j'ai plus de 2000 pages référencées. Or lorsque j'essaye d'afficher le fichier sitemap.xml, il n'arrive pas à afficher TOUTES les pages référencées.
1°) Est-ce normal ?
2°) Est-ce que Google LUI arrive à prendre en compte toutes les pages ?

Merci pour vos lumière

1) Si tu n'as pas mis le 1er script sur toutes tes pages, oui
2) Google ne prend pas toujours toutes les pages, il va crawler ton site mais il ne va pas forcement toutes les indexer ni toutes les crawler (à vérifier avec quelqu'un de plus expérimenter que moi sur ce point :))

nan mais pour les deux questions je parlais du sitemap.xml !
c'est quoi le 1er script dont tu parles ???
 
WRInaute discret
Il y a un premier bout de code à mettre sur chaque page. C'est de ça dont je parle en tant que 1er script.

PS : Je parlais aussi de ça :) Ce n'est pas parce qu'un sitemap contient 3500 liens que Google va tous les indexer même s'ils sont valides.
 
Nouveau WRInaute
Si sa peut en aider quelques un voici une fonction trouvée sur le net qui permet de remplacer la fonction glob quand celle-ci est désactivée :

Code:
     function free_glob($path) {
          $result = Array();
          $index = 0;
          preg_match("#^(.*/)?([^/]*)$#", $path, $matches);
          list(, $dir, $path) = $matches;
          $path = "#" . str_replace(Array("\\", ".", "[", "]", "?", 
                                          "+", "(", ")", "#", "*"),
                                    Array("\\\\", "\\.", "\\[", "\\]", "\\?",
                                          "\\+", "\\(", "\\)", "\\#", "([^/]*)"),
                                    $path) . "#";
          if($dir == '')
               $handle = opendir('.');
          else
               $handle = opendir($dir);
          while($file = readdir($handle)) {
               if($file == '..' || $file == '.')
                    continue;
               if(preg_match($path, $file)) {
                    if(is_file($dir . $file)) {
                         $result[$index] = $dir . $file;
                         $index++;
                    }
               }
          }
          closedir($handle);
          return $result;
     }

have fun
 
WRInaute discret
Bonjour,

Je viens d'installer le script modifié par yvan02
Celà fonctionne au niveau de la récupération des url de page mais quand j'appelle le second script pour obtenir le sitemap j'ai l'erreur suivante :

La page XML ne peut pas être affichée
Impossible d'afficher l'entrée XML en utilisant la feuille de style XSL. Corrigez l'erreur, puis cliquez sur le bouton Actualiser ou réessayez ultérieurement.


--------------------------------------------------------------------------------

Le symbole point-virgule était attendu. Erreur de traitement de la ressource ***p://www.monsite.net/monsitemap.php. Lig...


Merci pour votre aide
 
Nouveau WRInaute
silius a dit:
Si sa peut en aider quelques un voici une fonction trouvée sur le net qui permet de remplacer la fonction glob quand celle-ci est désactivée

Justement à ce propos, est-ce que quelqu'un est arrivé à faire fonctionner le script sans utiliser la fonction glob ? Ta fonction, j'ai pas réussi à l'utiliser moi ... T'as fait quoi sur ton site exactement ?
 
Nouveau WRInaute
Code:
<?php
     function free_glob($path) {
          $result = Array();
          $index = 0;
          preg_match("#^(.*/)?([^/]*)$#", $path, $matches);
          list(, $dir, $path) = $matches;
          $path = "#" . str_replace(Array("\\", ".", "[", "]", "?", 
                                          "+", "(", ")", "#", "*"),
                                    Array("\\\\", "\\.", "\\[", "\\]", "\\?",
                                          "\\+", "\\(", "\\)", "\\#", "([^/]*)"),
                                    $path) . "#";
          if($dir == '')
               $handle = opendir('.');
          else
               $handle = opendir($dir);
          while($file = readdir($handle)) {
               if($file == '..' || $file == '.')
                    continue;
               if(preg_match($path, $file)) {
                    if(is_file($dir . $file)) {
                         $result[$index] = $dir . $file;
                         $index++;
                    }
               }
          }
          closedir($handle);
          return $result;
     }
	 
echo'<'.'?xml version="1.0" encoding="UTF-8"?'.'> 
<urlset xmlns="https://www.google.com/schemas/sitemap/0.84"> 
';
 
foreach (free_glob("/chemin-absolut/ton-site.fr/sitemaps/*.*") as $filename) { 
   $filename = str_replace("/chemin-absolut/ton-site.fr/","",$filename); 
   include ($filename); 
} 

echo'</urlset>'; 
?>

Voila ! Sa marche super sur sivit mutualisé et pour les autres aussi je pense
+@+
 
Nouveau WRInaute
Merci BEAUCOUP !
Ca faisait au moins trois heures que je cherchais ! :wink:

Au fait, il y a une raison pour laquelle tu ne mets pas çà en début de script ?
header("Content-Type: text/xml"); // On déclare un fichier XML
Code:
echo'<'.'?xml version="1.0" encoding="UTF-8"?'.'>
<urlset xmlns="https://www.google.com/schemas/sitemap/0.84"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="https://www.google.com/schemas/sitemap/0.84 https://www.google.com/schemas/sitemap/0.84/sitemap.xsd">
';
 
Nouveau WRInaute
Il faut définir la fonction avant de l'utiliser, donc :

On la déclare :

Code:
  function free_glob($path) { 
          $result = Array(); 
          $index = 0;  ....

      return $result; 
     }

Et on l’utilise :

Code:
foreach (free_glob("/chemin-absolut/ton-site.fr/sitemaps/*.*")

Après la transformation du script par le serveur on a bien l’echo, en premier voilou :D
 
Nouveau WRInaute
Bonjour !

une gentille personne a fait mon site forum :
http://www.proximarc.com/leforum/portal.php
Hélas ! elle m'a abandonné pour des raisons qui lui sont propres !
Moi j'y connais rien !
Jamais encore fais de site lol je ne sais par où commencer.
Hors j'arrive sur cette page qui semble formidable.

est-il possible d'envoyer ma première page et de me dire où placer cet codes.

j'espère être pas trop dérangeant.

amitiés d'un retraité perdu
 
WRInaute discret
Bonjour

J'ai une question :

Le script reprend les url générés par mon moteur de recherche, utilisant les pseudos frames, il éxecute forcement le script :x

Comment je peux faire pour ne pas générer l'url du ayant 'recherche' dans l'url ?

Merci d'avance
 
Nouveau WRInaute
fandecine a dit:
Jaunalgi a dit:
Petit bémol : je ne veux pas indexer index.html pour éviter le conflit avec le domaine seul.

d'ou l'interet de ce bout de code: :wink:
Code:
if($_SERVER['REQUEST_URI']=="/") $filtrePage="/index.html";else $filtrePage=$_SERVER['REQUEST_URI']; //on evite de dupliquer domaine.com et domaine.com/index.html

Bonjour à tous,

J'ai installé le script sur mon site, mais le fichier xml comporte :

Code:
<?xml version="1.0" encoding="UTF-8" ?> 
- <urlset xmlns="https://www.google.com/schemas/sitemap/0.84">
- <url>
  <loc>http://www.monsite.com/index.html</loc> 
  <lastmod>2006-11-22T16:34:33+00:00</lastmod> 
  </url>
  </urlset>

Est-ce normal ?
Parce que justement, je ne souhaite pas non plus que index.html soit indexé.
Je suis en 90plan chez OVH.

Merci pour votre réponse.
 
WRInaute discret
Bonsoir,

Le script à l'air très intéressant dans son principe, j'aimerais juste savoir si celui ci est compatible dans le cas d'un hébergement free.fr

Merci
 
Nouveau WRInaute
merci pour se script;

Code:
note: Pour les sites qui comprennent un nombre de pages proche de la limite fixée par google pour le fichier sitemap, je publierais prochainement une adaptation gérant les fichiers sitemaps en cascade....

A quand ce script ?

merci ;)
 
WRInaute impliqué
Salut tout le monde

Ce script est tres bien pensé dans le principe ( c'est intéligent d'avoir pensé a faire bosser les visiteurs ;)

Je l'ais installé et essayé plusieurs jours .

Il y a malheureusement un gros bémol , voir meme un gros point noir :

Lorsqu'un visiteur , ou un bot , entre un parametre quelquonque dans l'url , ca lance le script ( comme tt les pages ) , et ajoute une page dans le site map , une page qui n'existe pas !

C'est très genant et je crois que du coup je vais le désinstaller faut de solution , a moins que quelqu'un ais une idée ?
 
WRInaute discret
Stellvia a dit:
Salut tout le monde

Ce script est tres bien pensé dans le principe ( c'est intéligent d'avoir pensé a faire bosser les visiteurs ;)

Je l'ais installé et essayé plusieurs jours .

Il y a malheureusement un gros bémol , voir meme un gros point noir :

Lorsqu'un visiteur , ou un bot , entre un parametre quelquonque dans l'url , ca lance le script ( comme tt les pages ) , et ajoute une page dans le site map , une page qui n'existe pas !

C'est très genant et je crois que du coup je vais le désinstaller faut de solution , a moins que quelqu'un ais une idée ?

Personnellement j'ai résolut le problème, je fait de l'urlrewriting sur toute mes pages pour ne plus avoir de paramétré dans mes urls et je supprime les paramétre dans le code.

Code:
<?php 
$Dossier='sitemaps/';
$url = parse_url($_SERVER['REQUEST_URI']); 
$fichierSitemaps="map-".ereg_replace('/','-',$url['path']);

     if(file_exists($_SERVER['DOCUMENT_ROOT']."/sitemaps/".$fichierSitemaps)==false)
	 {
		$fd = fopen('sitemaps/'.$fichierSitemaps, 'w');  
		if ($fd)
		{
			if($url['path']=="/index.php") $Page="/"; else $Page=$url['path'];
			$Page=ereg_replace('&','&amp;',$Page);
			
			fwrite($fd,"<url>\n\t<loc>http://".$_SERVER['HTTP_HOST'].$Page."</loc>\n\t<lastmod>".date('Y-m-d')."T".date('H:i:s+00:00')."</lastmod>\n</url>\n");
			fclose($fd);
		}
	}
?>
 
Nouveau WRInaute
bonjour à tous,

effectivement c'est un très bon script. Bravo à son créateur.

Par contre, est-ce qu'il existe un script qui génère d'abord des fichiers d'index sitemap ?
 
Nouveau WRInaute
est ce que quelqu'un pourrait m'indiquer comment on fait pour afficher le xml qu'on a générer avec sitemap.php ? :roll:
 
Nouveau WRInaute
Bonjour,
Ce matin je me connecte au forum pour poser une question s'il existait un moyen de générer automatiquement un sitmap sans passer par un logiciel..
Donc c'est pil poil ce que je cherchais je vais tester

merci d'avoir fait partager ce script :D
 
WRInaute discret
Bonjour,

D'abord un grand merci pour ce script vraiment efficace! Bravo!

Maintenant une question car je rencontre actuellement un souci qui me met les nerfs à bout lol!

Depuis quelques jours, le sitemap généré n'est plus reconnu comme valide par Google car il y a une inclusion vraiment étrange dans le sitemap... Après vérification dans le répertoire sitemaps de mon site je constate à chaque fois que l'erreur se produit qu'il y a en effet un fichier nommé : sitemaps203.188.201.253:25/

Est-ce que quelqu'un pourrait me venir en aide et me dire à quoi ça correspond svp et surtout comment faire en sorte de régler le problème... ?

J'ai d'abord pensé que ça pouvait être le bot de Google mais après un petit coup de parano je me suis dis que ça pouvait tout aussi bien être une tentative d'intrusion... Bref HELP ME please je vous en serai vraiment reconnaissant!
 
WRInaute accro
L'IP en question renvoie sur
Erreur!
L'accès à ce port est interdit pour des raisons de sécurité.

Sans doute du spam referer pour t'inciter à suivre le lien.

Supprime l'url incriminée et bloque l'IP via ton htaccess.
 
WRInaute discret
salva a dit:
L'IP en question renvoie sur
Erreur!
L'accès à ce port est interdit pour des raisons de sécurité.

Sans doute du spam referer pour t'inciter à suivre le lien.

Supprime l'url incriminée et bloque l'IP via ton htaccess.

Merci pour ta réponse Salva. Je pense en effet que tu vises juste pour le spam referer car je ne vois pas d'autre explication. J'ai blacklisté l'ip sur mon serveur via iptables. Penses-tu que ça suffise ? Comment la bloquer via le htacces stp ? (je ne savais pas qu'on pouvait le faire)
 
WRInaute discret
Arg décidément on m'en veut... Cette fois ci ce n'est plus la même adresse ip puisque je l'ai blacklistée mais je me retrouve maintenant avec des sitemapshttp://www.yahoo.fr dans mon répertoire sitemaps...

Une idée svp ? Car je ne vois vraiment pas comment je peux régler le problème définitivement.
 
WRInaute discret
J'ai vu dans ce sujet que le script semblait être toujours d'actualité... malgré le fait que certains utilisateurs mentionnaient des erreurs.

Quelle est la version optimale du script svp?
 
WRInaute discret
herbertwest a dit:
J'ai vu dans ce sujet que le script semblait être toujours d'actualité... malgré le fait que certains utilisateurs mentionnaient des erreurs.

Quelle est la version optimale du script svp?

en ce qui me concerne je l'utilise toujours, il fonctionne parfaitement. Le script du premier post a été mis à jour à chaque relevé de bug donc tu peux utiliser celui-là.
 
WRInaute discret
par contre le seul souci que j'ai toujours avec ce script c'est le problème des adresses saisies avec des paramètres ou des fautes de frappe... Ces url's "erronées" sont enregistrées dans le sitemap ce qui génère évidemment des 404

Le problème a déjà été évoqué dans le fil mais il ne me semble pas qu'il y ait eu une réponse à ce sujet.

Est-ce-que par hasard quelqu'un saurait comment remédier à ça ? Ce serait vraiment sympa car pour le reste, de tout ce que j'ai pu essayer, je trouve que ça reste le meilleur moyen de générer un sitemap de manière dynamique.
 
Nouveau WRInaute
Whaow, je le prends la tête depuis des mois pour essayer de mettre en place un vrai sitemap dynamique en cascade car mon site (www.dvdseries.net) fait plus de 20 000 pages.

De plus j'ai un soucis de dingue car GG ne référence pas plus de 12000 pages.

Je vais tester ce script asap.

Merci encore fandecine
 
Nouveau WRInaute
Bonjour,

J'ai développé un script similaire mais qui enregistre les uri en DB. Ce n'est pas ça qui m'amène à poster ce message aujourd'hui mais je me suis inspiré de la même méthode d'enregistrement des URI par visite utilisateur. je ne génère pas de balise "last_mod" pour le moment car mon champ last_mod est initialisé à la date à laquelle mon entrée est enregistrée.

Si, par la suite, une page est modifiée, le last_mod lui, ne change pas. Je cherche une méthode assez générique afin d'éviter ce problème et de pouvoir utiliser à bon escient le champ last_mod. Pour l'instant, je vois deux manières fonctionnelles d'y parvenir mais aucune ne me semble viable:

1° Sauvegarder le code HTML de chaque page dans la DB pour le comparer lorsque le script est appelé
-> problème : je vais avoir un gros volume pas forcément très utile en DB (j'ai pas mal de pages quand même)

2° Sauvegarder un md5 du code du site en DB pour éviter un trop lourd volume
-> problème : Je vais devoir md5 le code de chaque page à chaque visite pour le comparer aux md5 stockés en DB et donc, je vais utiliser beaucoup trop de ressources du serveur avec cette méthode.

Si quelqu'un avait une piste, une idée ou l'autre pour ce genre de recherche, ça m'aiderait grandement :) merci d'avance !
 
WRInaute accro
WebzineMusik a dit:
Tu as la possibilité d'effectuer tout simplement des redirections dans htaccess...

Ca ne changera rien dans son cas, ce ne sont pas les url qui bougent mais le contenu des pages. Perso, je ne renseigne pas le lastmod, je renseigne juste l'url.

Mais j'ai pris pour habitude de ne pas me reposer sur le sitemap pour favoriser l'indexation de mes pages. Un bon maillage interne est bien plus efficace.
 
WRInaute discret
Faux.
Dans la mesure que j'ai la même chose: avec eux blog wordpress j'ai en fait une seule.
j'ai été obligé de passer par des redirections.
 
WRInaute accro
Je le redis, je ne vois pas vers quoi tu rediriges, si l'url ne change pas (et c'est le cas de l'exemple). Ca n'a aucun sens de rediriger une url vers elle-même.
 
Nouveau WRInaute
merci pour ce script, merci aussi a WRI , vraiment une super base de données SEO :D ,j'ai hâte de lire plus d'articles
 
Nouveau WRInaute
Salut tout le monde!

J'ai crée un site qui s'appelle SeeYoo, que l'on peut trouver en Suisse sur www.see-yoo.ch

Depuis plus d'un mois, je n'ai toujours pas d'indexation. Savez vous comment faire?

Merci d'avance. Guillaume
 
WRInaute passionné
@jimmyjjohn: 8 ans pour trouver 2 erreurs dans un code, tu es un rapide ! :mrgreen:

Comme le dit spout, un peu plus de détails serait utile à la communauté ...
 
Statut
N'est pas ouverte pour d'autres réponses.
Discussions similaires
Haut