Génération d’un sitemap - module Spatie
Dans l’eco-système Laravel, l’équipe belge de Spatie propose bon nombre de modules utilitaires répondant efficacement à des besoins spécifiques. C’est le cas du module suivant, utilisé notamment sur ce site : laravel-sitemap
Qu’est-ce qu’un sitemap ?
Un sitemap est un fichier placé sur un site internet qui est lu et interprété par les moteurs de recherche (Google, DuckDuckGo, Ecosia) afin d’indexer plus efficacement le site. Il peut être définis sous plusieurs formats (généralement en XML) et répertorie l’ensemble des URLs du site (il peut répertorier dans certains cas des images et des vidéos utilisées sur le site) en y ajoutant certaines informations spécifiques : date de dernière modification, priorité, fréquence de mise à jour, etc. Ces informations peuvent être utilisées ou non par les moteurs de recherche, par exemple Google ne prend pas en compte les indications relatives à la priorité et à la fréquence de mise à jour.
Pour en savoir plus : la documentation Google sur les sitemaps
Mise en place d’un sitemap
La création et la mise à jour d’un sitemap peut se révéler laborieuse lorsque le site web possède plusieurs dizaines de pages ou intègre des pages générées dynamiquement (dans le cas d’un blog par exemple ou d’une boutique en ligne).
Afin de faciliter cette gestion, les CMS populaires comme Wordpress intègrent nativement ce processus de génération, là où d’autres nécessitent de passer par des extensions (c’est le cas pour Prestashop).
Dans le cas du framework Laravel, cette automatisation n’est pas intégrée nativement. Spatie met à disposition des développeurs un module répondant à cette problématique.
Exemple de fichier sitemap généré par le module - sitemap du site www.updaz.fr
Installation et utilisation du module Spatie laravel-sitemap
L’installation du module sur un projet Laravel s’effectue en ligne de commande via le gestionnaire de paquets Composer :
composer require spatie/laravel-sitemap
Une fois le module installé, il ne nous reste plus qu’à mettre en place un processus Laravel pour lancer cette génération.
Commande Laravel pour générer un fichier sitemap
Afin de faciliter la création du fichier via le module laravel-sitemap, nous allons créer une commande Artisan qui lancera la génération du sitemap : php artisan make:command GenerateSitemap
Cette nouvelle commande, définie dans le dossier app/console/command/
du projet contiendra les instructions spécifiques à la génération du sitemap.
Voir le fichier de la commande Laravel pour le site www.updaz.fr
Il ne restera plus qu’à lancer la commande dans le terminal pour générer le fichier :
php artisan sitemap:generate
Et voilà ! L’extension est installée et pleinement fonctionnelle. Le sitemap est généré en utilisant un crawler (un processus qui va analyser le code source) et en se basant notamment sur les routes définies au préalable sur l’application.
Si la configuration par défaut du module n’arrive pas à répondre aux spécificités de la plateforme pour générer le fichier, il est possible de surcharger la configuration du module pour utiliser un crawler personnalisé.
Générer un crawler spécifique à une application
Tout d’abord il faut générer un fichier de configuration avec la commande suivante :
php artisan vendor:publish --provider="Spatie\Sitemap\SitemapServiceProvider" --tag=sitemap-config
À l’intérieur, nous retrouvons l’option crawl_profile
qui permet d’indiquer le crawler que l’on veut utiliser sous forme d’une classe.
Cette nouvelle classe viendra étendre celle du module par défaut Spatie\Crawler\CrawlProfiles\CrawlProfile
. En surchargent la méthode shouldCrawl
il sera possible de définir des cas d’usage pour, par exemple, ne pas générer de sitemap sur un environnement de développement.
Pour en savoir plus : https://github.com/spatie/laravel-sitemap#configuration.
Automatisation du sitemap
Afin de pousser un peu plus la génération automatique du sitemap, on peut utiliser le système de CRON Laravel pour lancer à intervalle régulier la commande de génération du sitemap que nous venons de mettre en place.
Pour en savoir plus : https://github.com/spatie/laravel-sitemap#generating-the-sitemap-frequently
Dans un contexte de développement continu, on peut aussi lancer cette commande à chaque PUSH via un outils de contrôle de version comme GIT.