ASP.NET MVC vs SEO : Part 3 – Le SiteMap.xml

Dans mon billet précédent consacré au SEO pour les sites en ASP.NET MVC, nous avons vu comment créer et intégrer le fichier Robots.txt utile au référencement (cela ne suffira pas à être N° 1 sur Google ou autre moteur de recherche, mais y contribue). Cette fois-ci, nous allons définir et voir comment implémenter le fichier sitemap.xml au niveau de notre application web ASP.NET MVC.
Le fichier SiteMap.xml : kezako ?
Tout comme le fichier robots.txt, le ficher sitemap.xml est une ressource que l’on rend disponible sur notre site web. Il va définir les différents liens des pages de notre site web afin que ces dernières soient automatiquement prises en considération par les moteurs de recherche pour l’indexation. Ce fichier n’est pas obligatoire et n’est également pas disponible lorsque vous initialisez un projet Web ASP.NET MVC par défaut dans Visual studio. S’il est disponible sur un site, son contenu peut être affiché directement en rajoutant /sitemap.xml (ou /sitemap ou autre selon le type ou le nombre de fichier site map de site) à l’url d’origine. Vous trouverez plus bas un aperçu du fichier sitemap.
Bon à savoir
- Il existe des générateurs de “sitemap” en ligne qui peuvent vous fournir directement le contenu à mettre dans votre fichier sitemap ;
- On peut avoir plusieurs sitemaps pour un même site internet ou pas du tout ;
- Le sitemap est généralement au format XML mais certains moteurs acceptent également le format Texte.
Pour chaque nœud du fichier Xml, on retrouve les descriptifs suivants :
- loc : le chemin de la page ==> cette information est la seule indispensable, les suivantes sont facultatives.
- lastmod : la date de dernière modification de la page.
- changefreq : la fréquence de mise à jour de la page (à titre informatif).
- priority : le niveau de priorité de la page par rapport aux autres pages.
Exemple d’un nœud du sitemap :
Intérêt pour le SEO
Comme son nom l’indique, le fichier “sitemap.xml” met en évidence la “map” de votre “site”, c’est à dire les différents chemins (urls) pointants vers vos pages. On pourra ainsi influer sur certaines pages par rapport à d’autres (notamment les priorités) de notre site au moteur de recherche qui scannera ce fichier en priorité si vous rajoutez une ligne le spécifiant dans votre fichier Robots.txt. Son principal objectif est d’avertir les moteurs de recherche du contenu (différentes pages) d’un site internet et surtout de tenir informés les moteurs de l’évolution du contenu (ajouts/suppressions de nouvelles pages web) de votre site : il s’agit encore une fois d’un outil facilitant la détection et l’indexation des pages de notre site internet notamment sur les très gros sites où la prise en compte naturelle des pages dans l’indexation peut être relativement longue.
Tous les moteurs de recherche ne proposent pas d’Api pour soumettre son sitemap, c’est pourquoi il est judicieux de rajouter une ligne dans le fichier “Robots.txt” mentionnant son emplacement si vous en disposez.
Implémentation avec ASP.NET MVC du Sitemap
Tout comme le fichier robots.txt, le fichier sitemap.xml peut être un fichier physique. On peut également passer par un HttpHandler pour retourner le flux Xml au client comme présenté dans mon billet précédent sur l’implémention du robots.txt.
Nous allons cette fois-ci exploiter une autre technique pour le générer : le mécanisme de “route” par défaut d’ASP.NET MVC qui générera dynamiquement (en partie) notre sitemap : Vous trouverez une implémentation très poussée de ce mécanisme faite par Ben Foster à cette adresse que je trouve très intéressante et bien faite.
Nous allons d’abord créer un controller dedié au sitemap :
// GET: /Sitemap/ public ActionResult Index() { var sitemapItems = new List<SitemapHelper.SitemapItem> { new SitemapHelper.SitemapItem(Url.FullActionLink ("index", "home"), changeFrequency: SitemapHelper.SitemapChangeFrequency.Always, priority: 1.0), new SitemapHelper.SitemapItem(Url.FullActionLink("about", "home"), lastModified: DateTime.Now, changeFrequency: SitemapHelper.SitemapChangeFrequency.Always, priority:0.7), new SitemapHelper.SitemapItem(Url.FullActionLink("Contact", "home"), lastModified: DateTime.Now,changeFrequency: SitemapHelper.SitemapChangeFrequency.Monthly, priority:0.2), }; // articles smartphone list var smartphoneList = _telephoneSmartphoneListManager.List(); foreach (Smartphone sphone in smartphoneList) { sitemapItems.Add(new BATO.Helpers.SitemapHelper.SitemapItem(Url.QualifiedAction("Smartphone", "Telephone", sphone.Id.ToString()), lastModified: DateTime.Now, changeFrequency:SitemapHelper.SitemapChangeFrequency.Weekly, priority: 0.9)); } return new SitemapResult(sitemapItems); }
On y instancie une liste d’urls (SitemapHelper.SitemapItem) statiques (index, about…). Ce qui est intéressant ici, c’est que nous y instancions dynamiquement les urls de type http://monsiteweb.com/Telephone/Smartphone/12. Dans l’exemple ci-dessous, je récupère la liste des smartphones via la méthode _telephoneSmartphoneListManager.List() qui me sert à alimenter le paramètre de mes Urls. Pour un site de ventes en ligne par exemple, nous aurons autant d’urls que de “produits” commercialisées dans notre sitmap, ce qui nous évite la saisi en dur des liens dans notre sitemap.
Le sitemap requiert (en général) d’être au format XML, d’être encodé en UTF8, et doit avoir une signature précise pour être bien interprété par les moteurs.
Ainsi nous allons ‘overrider’ la méthode ‘ExecuteResult’ de l”ActionResult (action retournée par la view mvc) afin de retourner en ‘ActionResult’ un ‘SitemapResult’ (héritant de ActionResult) :
public class SitemapResult : ActionResult { private readonly IEnumerable<SitemapHelper.ISitemapItem> siteMapItems; private readonly SitemapHelper.ISitemapGenerator siteMapGenerator; public SitemapResult(IEnumerable<SitemapHelper.ISitemapItem> items) : this(items, new SitemapHelper.SitemapGenerator()) { } public SitemapResult(IEnumerable<SitemapHelper.ISitemapItem> items, SitemapHelper.ISitemapGenerator generator) { this.siteMapItems = items; this.siteMapGenerator = generator; } public override void ExecuteResult(ControllerContext context) { var response = context.HttpContext.Response; response.ContentType = "text/xml"; response.ContentEncoding = Encoding.UTF8; using (var writer = new XmlTextWriter(response.Output)) { writer.Formatting = Formatting.Indented; var sitemap = siteMapGenerator.GenerateSiteMap(siteMapItems); sitemap.WriteTo(writer); } } }
Vous trouverez le code complet de cette implémentation sur mon github :
Conclusion
Bien que facultatif, le sitemap peut s’avérer être un bon complément d’aide au référencement naturel. Sur les très gros sites (plusieurs milliers de pages) où le scan des pages par les robots peut s’avérer long, le sitemap jouera un rôle d’index de pages et se révèlera très utile.
Aussi, grâce aux paramètres optionnels de chaque entrée du sitemap, nous allons pouvoir influer sur le SEO en précisant par la périodicité (changefreq) de mise à jour de chaque page, l’importance de certaines pages (priority) par rapport à d’autres et la date de dernière mise à jour (lastmod) de ces dernières.
Il est cependant important de n’y mentionner que des “urls valides”. Dans le cas contraire, ou si vous ne maitrisez pas son implémentation, il est préférable de ne pas rajouter de sitemap à votre site et laisser les moteurs de recherche faire le travail tout seul, car le sitemap à lui tout seul ne révolutionnera pas votre SEO : il n’est qu’un outil d’aide au SEO s’il est bien implémenté.
Nous avons vu tout au long de cette série d’articles comment les balises META, le fichier ROBOT.TXT et enfin le SITEMAP.XML pouvaient influer sur le référencement de notre site. Une fois la mise en œuvre de ces techniques, que fait-on ? Comment constate-on l’évolution de notre SEO ?
Pour clore cette série d’articles consacrée au SEO, nous verrons dans mon prochain article comment suivre l’évolution du référencement de notre site, notamment via l’utilisation d’outils annexes… A très bientôt