function sitemapBdd() {
global $uriSitemap;
if (defined('SITEMAP') ) { // Cela me sert pour définir une autre url dans certains cas (pour mon glossaire par exemple, je définis cette constante pour indiquer une url légèrement modifiée)
$url = $uriSitemap;
}
else { // Si la constante n'est pas définie, on récupère l'url
$url = $_SERVER['REQUEST_URI'];
}
if (eregi('/index.php', $url) ) { // Si on est sur l'acceuil, l'url ne sera composé que du nom de domaine pour éviter le duplicate content (cela implique bien sur qu'aucun de vos autres fichier se nomme index.php)
$url = '/';
}
$date = date('Y-m-d', time() ); // On récupère la date
if ($url) { // si on à une url on la cherche dans la BDD
$res_urlSitemap = sqlSitemap('url sitemap', 'trouver l\'url '.$url.' dans le sitemap.', $url); // requête SQL
$nbUrlSitemap = mysql_num_rows($res_urlSitemap);
if ($nbUrlSitemap == 1) { // Si l'url est trouvée, on modifie la date et on incrémente le compteur de visite
$traitement = sqlSitemap('modification données url', 'modifier les données de '.$url.' dans le sitemap.', $url, $date); // requête SQL
}
else { // on insère l'url, la date et on incrémente le compteur
$traitement = sqlSitemap('enregistrement url', 'Enregistrer les infos de l\'url '.$url.' dans le sitemap.', $url, $date); // requête SQL
}
}
}
/* *********************** */
/* Requêtes sur la BDD du sitemap */
/* *********************** */
function sqlSitemap($sql, $desc, $var1 = '', $var2 = '') { // type de requêtes SQL, description de la requête SQL, variable
$T_sitemap = nom de ta table;
switch ($sql) { // Création des requêtes
case 'création sitemap' : // Créaion du sitemap limité à 50 000 url (pour faire un sitemap plus grand, il vous faudra modifier un peu le code)
$sql = 'SELECT url, date FROM '.$T_sitemap.' ORDER BY id LIMIT 0,50000';
break;
case 'enregistrement url' : // incrémentation du compteur de visite pour l'url (x)
$sql = 'INSERT INTO '.$T_sitemap.' (id, url, date, nb) VALUES ("", "'.$var1.'", "'.$var2.'", 1)';
break;
case 'modification données url' : // incrémentation du compteur de visite pour l'url (x)
$sql = 'UPDATE '.$T_sitemap.' SET nb = nb + 1, date = "'.$var2.'" WHERE url = "'.$var1.'"';
break;
case 'url sitemap' : // sélection de l'url (x)
$sql = 'SELECT * FROM '.$T_sitemap.' WHERE url = "'.$var1.'"';
break;
}
// Je me sert de plusieurs fonction personnelle pour la connection à une base de donnée avec gestion d'erreur personnalisée. Je vous laisse le soin de codé cette partie pour la connection
$sql_connection = connection à votre base de données // Connection à la BDD
$res = envoi de la requête $sql // Envoi de la requête
mysql_close(); // Fermeture de la connection
return $res; // On retourne le résultat de la requête
}
function sitemapXml() {
$baseUrl = http://www.NDD;
$fichier = 'sitemap.xml'; // nom du ficher XML
$path = ''; // pour placer le fichier xml en racine
$fp = fopen($path.$fichier, "w");
$sitemap = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$sitemap .= "<urlset xmlns=\"https://www.google.com/schemas/sitemap/0.84\">\n";
fwrite($fp, $sitemap);
$res_liste = sqlSitemap('création sitemap', 'créer le sitemap.'); // requête SQL
while (list($a, $b) = mysql_fetch_array($res_liste) ) {
$a = ereg_replace('&','&', $a);
$nbUrl ++;
$sitemap = "\t<url>\n";
$sitemap .= "\t\t<loc>$baseUrl$a</loc>\n"; // L'url à indexée
$sitemap .= "\t\t<lastmod>$b</lastmod>\n"; // la date sera toujours la date de dernière visite de la page
$sitemap .= "\t\t<changefreq>weekly</changefreq>\n"; // vous pouvez changer cette valeur selon votre choix
//$sitemap .= "\t\t<priority>0.5</priority>\n"; // idem pour cette dernière
$sitemap .= "\t</url>\n";
fwrite($fp, $sitemap);
}
$sitemap = "</urlset>\n";
fwrite($fp, $sitemap);
fclose($fp);
/*Le code suivant est à laisser uniquement dans une partie privative. Elle vous donne quelques infos. */
echo '<p>Le sitemap contient '.$nbUrl.' url.<br />
<a href="http://www.NDD/'.$fichier.'">voir le fichier généré : '.$fichier.'</a></p>';
}
if (!eregi('[=#]', $_SERVER['REQUEST_URI']) && !defined('NO_SITEMAP') ) { // Si la page est autorisée pour l'indexage. Dans le premier !eregi, je n'indexe pas les url avec des ancres ou le signe = (pour mon cas, quand le visiteur change de skin, l'url n'est pas rewrité en partie)
sitemapBdd(); // Modification de la BDD pour le sitemap
}
if ($glossaire['texte']) { // si le terme à été défini
define('SITEMAP', true); // on autorise l'indexation
$terme = traitementCaractereUrl($glossaire['nom']);
$uriSitemap = '/glossaire'.REW.'terme'.REW.$terme.'.html'; // on modifie l'url avec le nom par défaut pour éviter le duplicate content
}
if ($glossaire['texte'] == '[à définir]' || !$glossaire['texte']) { // Si le terme est à définir ou si il n'est pas encore défini
define('NO_SITEMAP', true); // pas d'indexation dans le sitemap
define('META_ROBOT', true); // pas d'indexation par les robots
define('NO_GOOGLE', true); // Pas d'affichage d'Adsense (trop peu de contenu)
}
franck05 a dit:Salut,
Bon j'ai un petiti problème car la fonction sqlSitemap doit retourner un tableu, or return ne renvoie pas un tableau...
franck05 a dit:moi je suis toujours scié de voir sur ce forum des gens qui viennent en demandant des conseils simple alors que sur leur site ils proposent des prestations de développement et/ou référencement professionnel,
faudrait arreter de fumer là ! :twisted:
serval2a a dit:Bonjour,
Essaie, http://www.blocklayer.com/googlesitemap/ avec un réglage des paramètres d'exclusion ça devrait le faire.