- Par lunariel, le 12/02/2012 à 22h05
- 2 Commentaires PHP
Dans ce tutoriel, nous allons voir à quoi va nous servir un Sitemap et comment le créer.
Pour apparaître sur un moteur de recherche, il faut que les pages de votre site soient indexées dans leur base de données.
Pour cela il faut attendre qu'un crawler (également appelé bot ou spider) passe par votre site, enregistre la page, trouve tous les liens qu'il y a sur celle-ci et les stockent pour un futur passage.
En faisant cela, il ne trouve qu'une partie des pages de votre site il faudra attendre plusieurs autres passages avant qu'il ne découvre tous les liens menant aux autres pages de votre site web. On appelle ça l'indexation naturelle.
Maintenant, un outil peut vous permettre d'indiquer aux crawler toutes les pages de votre site et ce dès son premier passage.
C'est le protocole Sitemaps, proposé en 2005 par Google et adopté en novembre 2006 par les principaux moteur de recherche de l'époque Google, Yhaoo et Microsoft.
Un Sitemap c'est quoi ?
C'est un fichier au format XML qui liste :- Les urls du site (maximum 50000 ou 10 Mo).
- La date de sa dernière mise à jour.
- A quelle fréquence des changements sont effectués sur la page.
- Et son importance par rapport aux autres pages du site.
Grâce à toutes ces informations, les moteurs de recherche pourront indexer intelligemment votre site web.
Voici un exemple de Sitemap.
1 |
|
Un sitemap pour notre site web
Comment créer un sitemap
C'est une bonne question, il y a plusieurs solutions possibles.- A la main avec un éditeur de texte, si vous n'avez que deux ou trois pages qui ne changent jamais cela suffira largement. Mais c'est une solution à oublier dans le cas d'un site web dynamique avec beaucoup de contenu.
- Il existe des logiciels externe qui peuvent se charger de créer votre sitemap, mais la solution peut s'avérer fastidieuse à la longue. Une fois généré vous devrez uploader le fichier sur votre serveur ce qui n'est pas forcement pratique. De plus il y a souvent des limitations d'utilisation.
- La dernière solution est d'utiliser un script ou une classe qui va se charger du travail à notre place. On lui envoie les données qu'on veut voir afficher dans notre sitemap et il fait tout le reste. C'est cette solution que l'on va utiliser dans ce tutoriel.
Un sitemap c'est la Class
Car dans ce tutoriel, nous allons utiliser des fonctions récentes de PHP
Pour nous faciliter le travail on va faire une petite Class PHP qui va nous permettre de générer notre sitemap.
Pour améliorer la lisibilité des fichiers que l'on va utiliser, un fichier contenant une Class se terminera toujours par .class.php
Un attribue ou une méthode déclarée en Private commencera toujours par un underscore (_), toujours dans le but d'augmenter la lisibilité.
On crée donc un nouveau fichier, que l'on va appeler SitemapGenerator.class.php
Voyons voir la structure de notre Class.
1 |
<?php |
On a défini nos attribues et nos méthodes, on va maintenant commencer la partie technique de ce tutoriel.
Construire une base solide
Le constructeur va nous permettre d'initialiser nos attribues.
1 |
public function __construct($rootUrl = "") { |
C'est une version courte d'un if/else, dans notre cas si $rootUrl n'est pas vide $this -> _rootUrl égal $rootUrl sinon $this -> _rootUrl égal 'http://' . $_SERVER['SERVER_NAME'].
Les if et else sont remplacés par les symboles ( ? et : ), une condition ternaire est toujours utilisée sous cette forme (if puis else). On ne peut jamais utiliser de elseif.
$_SERVER['SERVER_NAME'] nous retourne le nom du serveur qui exécute le script, par exemple www.mon-site-web.com
Ajoutons des Urls à notre sitemap
On doit d'abord savoir ce qu'on veut ajouter !
Comme on l'a vu plus haut pour bien faire un sitemap utilise plusieurs données (dans notre cas quatre suffiront). Il faut les transmettre à notre Class pour quelle puisse les enregistrer.
Le seul argument obligatoire est l'url. Les autres sont facultatifs, mais on ne doit pas les négliger.
1 |
//L'url, la dernière modification, la fréquence à laquelle la page est modifiée |
Traitons ces données pour pouvoir les ajouter à notre sitemap.
Pour chaque appel à la méthode addUrl() on va créer une entrée dans un tableau avec les informations qui sont passées en arguments.
1 |
//On vérifie si l'url commence par un / sinon on l'ajoute |
La raison est très simple, faire une bonne gestion des erreurs est très long et comme ce n'est pas le sujet de ce tutoriel, je ne préfère pas les gérer ici.
Un nouveau sitemap
Comme on le verra plus loin dans ce tutoriel, un fichier sitemap ne peut comporter plus de 50000 urls. Pour beaucoup de site c'est largement suffisant, mais pour de gros sites cette limite est rapidement atteinte. La solution la plus simple est de créer un nouveau fichier à chaque fois qu'on atteint cette limite.
Nous allons maintenant voir comment sont créés ces fichier.
Pour commencer, il va falloir définir le nom de chaque fichier en fonction du nombre d'urls déjà enregistrées.
Pour préparer le fichier on utilisera fopen et XmlWriter.
1 |
private function _newSitemapFile() { |
Notre fichier est créé et prêt à être rempli.
Enregistrer le contenu
Pour le moment, on a vu dans ce tutoriel comment ajouter des liens et créer un nouveau fichier. Nous allons voir maintenant comment tout réunir dans notre sitemap et l’enregistrer sur notre site.
Pour commencer, une petite explication. Le protocole Sitemaps comporte une limitation, deux en fait
- Un fichier sitemap ne peut pas contenir plus de 50 000 urls
- Et un fichier sitemap ne peut pas peser plus de 10 Mo (Méga octets)
Vous allez me dire, c'est très embêtant, comment va t'on faire. 50 000 urls ça fait déjà beaucoup, je ne suis pas sûr que beaucoup de site (sans parler des très gros sites) arrivent à cette limite. Malgré tout on va en tenir compte et adapter notre code, on n'est peut-être limité en nombre d'urls, mais pas en nombre de sitemap.
Vous avez bien lu, on peut avoir plusieurs sitemap pour le même site, donc plusieurs fois 50 000 ça peut faire beaucoup d'urls voir même une infinité
Qu'allons-nous faire? On va d'abord vérifier le nombre d'urls pour savoir si on doit créer un nouveau fichier ou pas.
Puis on va remplir le fichier en cours avec les urls que l'on a stockées. Une fois fini, on enregistre et on ferme le sitemap.
1 |
public function generate() { |
Mise en place et fonctionnement
Il va nous falloir deux nouveaux fichiers: un qui va nous permettre de récupérer toutes les données qu'on veut enregistrer sur notre sitemap et un qui va nous permettre d'indiquer au robot l'emplacement de nos sitemaps, commençons par celui-ci.
Ce fichier doit se nommer robots.txt et doit contenir l'adresse de tous les sitemap de votre site sous ce format.
1 |
Sitemap: http://www.mon-site-web.com/sitemaps/sitemap.xml |
Donc nous n'avons ici qu'un seul fichier sitemap et il se trouve dans le répertoire sitemaps.
Pour un gros site qui possède plusieurs sitemap, il sera plus simple de modifier ce fichier automatiquement au fur et à mesure que sont créés les sitemap.
Pour le deuxième fichier, vous pouvez l'appeler comme vous voulez et le stocker comme bon vous semble. Il faudra le sécuriser pour que seuls les administrateurs du site puissent y accéder et créer un lien dans votre administration.
On a tout ce qu'il faut pour créer nos fichiers sitemaps, mais on doit encore envoyer les informations vers notre Class si on veut que cela marche.
Occupons nous de remplir le dernier fichier que l'on vient de créer.
Je pars du principe que vous savez déjà le faire, sinon vous ne seriez pas ici
Pour l'exemple, je vais utiliser un tableau que j'aurais pu récupérer depuis une base de données et qui va me servir à construire mes urls.
1 |
$urls = array( |
On a donc quatre messages venant du blog et deux tutoriels.
On va commencer par instancier notre Class et la configurer.
1 |
//j'instancie ma Class et afin d'être sur je lui passe qu'en même l'adresse de mon site |
Notre Class est prête, il n'y a plus qu'à envoyer les données.
Pour toutes les pages, celles qui viennent d'une base de données ou autre, la technique d'enregistrement est la même. On rentre les pages "static" (Accueil, Contact...) à la main .
1 |
//La page d'accueil, premier paramètre vide pour l'url, pas de date de modification, |
Passons à notre tableau, la technique est la même sauf qu'il faut parcourir le tableau.
1 |
foreach ($urls as $u) { |
Pour finir on génère le sitemap.
1 |
//On utilise la fonction generate() pour créer les fichier sitemap et les enregistrer. |
Si tout s'est bien passé, le fichier sitemap a été correctement créé.
Voilà ce tutoriel touche à sa fin, j'espère qu'il vous aura été utile.
En cas de problème avec ce tutoriel n'hésitez pas à laisser un commentaire, je me ferais un plaisir de vous répondre.