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 donc13 -->14 <loc>http://www.example.com/</loc>15 <!--16 lastmod: paramètre optionnel, indique la date de dernière17 modification18 -->19 <lastmod>2005-01-01</lastmod>20 <!--21 changefreq: paramètre optionnel, indique la fréquence des22 modifications sur cette page23 -->24 <changefreq>monthly</changefreq>25 <!--26 priority: paramètre optionnel, indique l'importance de27 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 <link3 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
A lire
Autres articles de la même catégorie
Explorez le CQRS avec le package artisansdk
Exploitez le pattern CQRS dans votre application Laravel.
Valider des numéros de téléphone avec Laravel
Simplifier la validation des numéros de téléphone grâce au package laravel-phone
DTO est mort vive Data !
Prise en main du paquet spatie/laravel-data remplaçant de spatie/data-transfer-object