Améliorer le référencement avec spatie/laravel-sitemap

Publié le 15 mai 2024 par Antoine Benevaut
Couverture de l'article Améliorer le référencement avec spatie/laravel-sitemap

La création d'un sitemap pour votre site web est essentielle afin d'optimiser son référencement auprès des moteurs de recherche.

Ce dernier permet aux moteurs de découvrir, d'indexer et de comprendre le contenu de votre site de manière efficace et sans avoir à parcourir l'intégralité du site.

Un sitemap représente le plan de votre site au format XML (Extensible Markup Language) avec un balisage codifié que l'on retrouve généralement à la racine d'un site avec le nom sitemap.xml.

Sitemaps.org nous indique le balisage suivant :

1<?xml version="1.0" encoding="UTF-8"?>
2<!--
3 urlset: paramètre requis, encapsule les liens du sitemap
4-->
5<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
6 <!--
7 url: paramètre requis, décrit une url
8 -->
9 <url>
10 <!--
11 loc: paramètre requis, indique la localisation de la page,
12 son url donc
13 -->
14 <loc>http://www.example.com/</loc>
15 <!--
16 lastmod: paramètre optionnel, indique la date de dernière
17 modification
18 -->
19 <lastmod>2005-01-01</lastmod>
20 <!--
21 changefreq: paramètre optionnel, indique la fréquence des
22 modifications sur cette page
23 -->
24 <changefreq>monthly</changefreq>
25 <!--
26 priority: paramètre optionnel, indique l'importance de
27 cette page (1 la plus importante, 0 la moins importante)
28 -->
29 <priority>0.8</priority>
30 </url>
31</urlset>

Vous n'en avez pas sur votre site web ? Découvrons comment en mettre un en place avec spatie/laravel-sitemap.

Passons à l'action !

Imaginons un portfolio très simple avec une page d'accueil, une page d'information légale (CGV/CGU) et une page de présentation de plusieurs projets paginée.

Commencons par installer le package à l'aide de la commande composer suivante :

1composer require spatie/laravel-sitemap

Une fois le package installé, ajoutons une commande Laravel qui aura la responsabilité de générer le sitemap à l'aide de la commande artisan suivante :

1php artisan make:command GenerateSitemap

Nous sommes prêts à compléter la première URL de notre sitemap en commençant par la page d'accueil de notre site, ce qui créera en même temps le premier bloc d'URL du sitemap :

1namespace App\Console\Commands;
2 
3use Illuminate\Console\Command;
4use Spatie\Sitemap\SitemapGenerator;
5 
6class GenerateSitemap extends Command
7{
8 protected $signature = 'app:generate-sitemap';
9 protected $description = 'Generate sitemap';
10 
11 public function handle()
12 {
13 $sitemap = SitemapGenerator::create(config('app.url'))
14 ->getSitemap();
15 
16 $sitemap->writeToFile(public_path('sitemap.xml'));
17 }
18}

Une fois le sitemap complété avec cette première URL, nous l'enregistrons dans le fichier /public/sitemap.xml afin qu'il soit accessible aux moteurs de recherche.

Voici à quoi ressemblera notre sitemap pour le moment :

1<?xml version="1.0" encoding="UTF-8"?>
2<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
3 <url>
4 <loc>https://mon-site.com/</loc>
5 <changefreq>daily</changefreq>
6 <priority>0.8</priority>
7 </url>
8</urlset>

Ajoutons maintenant la page d'informations légales. C'est généralement de cette façon que vous renseignerez vos pages statiques dans votre sitemap.

1$sitemap->add(
2 Url::create(route('terms.index'))
3 ->setChangeFrequency(Url::CHANGE_FREQUENCY_YEARLY)
4 ->setPriority(0)
5);

Concernant les informations sur la fréquence et la priorité, le site Sitemaps.org nous rappelle que nous les définissez selon votre propre appréciation, ces informations, bien ou mal évaluées, n'influenceront pas l'indexation par les moteurs de recherche.

Continuons et intégrons maintenant la page des projets paginée.

Techniquement, il s'agit de traduire une page qui affiche 12 projets avec deux actions "suivant" et "précedent" dans notre sitemap.

Chaque page appelée via une action "suivant" ou "précedent" contiendra le numéro de page visité avec un paramètre de requête /projects?page=NUMERO.

Pour ce faire, on va simplement parcourir l'ensemble des pages de projet en prenant garde de ne pas renseigner d'argument pour la page d'accueil de nos projets.

1$projects = (new Project())->paginate(12);
2 
3if ($projects->lastPage() > 0) {
4 foreach (range(1, $projects->lastPage()) as $index) {
5 $url = route('projects.index', $index === 1 ? [] : ['page' => $index]);
6 $sitemap->add(
7 Url::create($url)
8 ->setChangeFrequency(Url::CHANGE_FREQUENCY_DAILY)
9 ->setPriority(0.5)
10 );
11 }
12}

Après génération, voici un aperçu des urls ajoutées.

1<?xml version="1.0" encoding="UTF-8"?>
2<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
3 <url>
4 <loc>https://mon-site.com/</loc>
5 <changefreq>daily</changefreq>
6 <priority>0.8</priority>
7 </url>
8 <url>
9 <loc>https://mon-site.com/terms</loc>
10 <changefreq>yearly</changefreq>
11 <priority>0.0</priority>
12 </url>
13 <url>
14 <loc>https://mon-site.com/projects</loc>
15 <changefreq>daily</changefreq>
16 <priority>0.5</priority>
17 </url>
18 <url>
19 <loc>https://mon-site.com/projects?page=2</loc>
20 <changefreq>daily</changefreq>
21 <priority>0.5</priority>
22 </url>
23 <url>
24 <loc>https://mon-site.com/projects?page=3</loc>
25 <changefreq>daily</changefreq>
26 <priority>0.5</priority>
27 </url>
28</urlset>

Maintenant que votre sitemap est généré, vous pouvez renseigner son chemin dans votre code HTML, entre les balises <head/>.

1<head>
2 <link
3 rel="sitemap"
4 type="application/xml"
5 title="sitemap"
6 href="https://mon-site.com/sitemap.xml"
7 >
8</head>

Ça y est, nous avons intégré notre sitemap à notre site !

Si comme dans cet exemple, vous avez intégré du contenu dynamique à votre sitemap (les pages projets), n'oublié pas d'automatiser la génération de votre sitemap pour que celui-ci soit mis à jour régulièrement avec votre nouveau contenu.

Source : https://gist.github.com/abenevaut/25d28d73662d184cc84ca04b4c398a43
Antoine Benevaut avatar
Antoine Benevaut
PHP & Laravel Consultant - Lead Developer, Paris / Passionate / Cat lover / #laravel 😍

A lire

Autres articles de la même catégorie