Sitemap généré automatiquement par PHP

PHP-MysqlUn sitemap est en quelque sorte le plan de votre site pour les moteurs de recherche. Mis en place par Google il y a environ 10 ans, ce fichier est indispensable pour permettre aux robots d’indexation de ne rater aucune page de votre site.

Pour le site espace-monnaies.fr que j’administre, il était indispensable de créer un tel fichier avec toutes les pièces de monnaies du site. Or, elles sont toutes sur la même page avec un paramètre dans l’URL différent (GET).

Exemple : http://espace-monnaies.fr/produits.php?idProduit=2923

Afin de générer un fichier complet, j’ai créé un fichier PHP qui fait une requête dans la base de données du site, afin d’avoir tous les liens vers toutes les pièces de monnaies.

La base d’un fichier XML

Un fichier XML doit être valide et répondre aux exigences des normes du même nom.

Les fichiers sitemap ne dérogent pas à la règle. Voici un exemple :

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
	<url>
		<loc>http://espace-monnaies.fr/index.php</loc>
		<changefreq>daily</changefreq>
		<priority>1.0</priority>
	</url>
	<url>
		<loc>http://espace-monnaies.fr/inscription.php</loc>
		<changefreq>monthly</changefreq>
		<priority>0.9</priority>
	</url>
</urlset>

Le fichier PHP

Commencez en premier le par l’inclusions de vos classes et autres fonctions nécessaires (Mysql par exemple).

Ensuite, on inclus les premières lignes de base du XML

$xml = '<?xml version="1.0" encoding="UTF-8"?>';
$xml .= '
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';

J’ajoute ensuite les liens de mes pages.

$xml .= '
	<url>
		<loc>http://espace-monnaies.fr/index.php</loc>
		<changefreq>daily</changefreq>
		<priority>1.0</priority>
	</url>
	<url>
		<loc>http://espace-monnaies.fr/inscription.php</loc>
		<changefreq>monthly</changefreq>
		<priority>0.9</priority>
	</url>
	<url>
		<loc>http://espace-monnaies.fr/livreOr.php</loc>
		<changefreq>weekly</changefreq>
		<priority>0.9</priority>
	</url>
	<url>
		<loc>http://espace-monnaies.fr/contact.php</loc>
		<changefreq>weekly</changefreq>
		<priority>0.8</priority>
	</url>
	<url>
		<loc>http://espace-monnaies.fr/validerCommande.php</loc>
		<changefreq>weekly</changefreq>
		<priority>0.1</priority>
	</url>
	<url>
		<loc>http://espace-monnaies.fr/login.php</loc>
		<changefreq>weekly</changefreq>
		<priority>0.6</priority>
	</url>
	<url>
		<loc>http://espace-monnaies.fr/cgv.php</loc>
		<changefreq>weekly</changefreq>
		<priority>0.7</priority>
	</url>
';

Maintenant, j’ajoute une requête dans la base de données. Ici je recherche tous les idProduit des pièces de monnaies de mon exemple (avec PDO)

$requete = $bdd->prepare('
	SELECT idProduit
	FROM boutique_produits
	WHERE idProduit > 0
	AND actif = 1
');
$requete->execute();

$resultat = $requete->fetchAll(PDO::FETCH_OBJ);

La variable $resultat contient donc toutes les valeurs de mon paramètre idProduit qui se trouve dans mes URL.

Il ne reste plus qu’a boucler ce résultat et ainsi générer les URL.

foreach($resultat AS $produit) {
	$xml .= '
	<url>
		<loc>http://espace-monnaies.fr/produits.php?idProduit='.$produit->idProduit.'</loc>
		<changefreq>monthly</changefreq>
		<priority>0.5</priority>
	</url>';
}

Adaptez changefreq et priority selon vos besoins.

Enfin, on insère la clôture du fichier XML et on lance l’écriture du fichier.

$xml .= '</urlset>';
$file = fopen('sitemap.xml', 'r+');
fputs($file, $xml);

Il faut bien entendu veiller à disposer des droits d’écriture sur le fichier xml.

Votre fichier est désormais enregistré à la racine de votre site, et les robots vont l’utiliser afin de cartographier votre site.

Laisser un commentaire