Il me manquait ce petit truc crucial pour guider les moteurs d'indexations, un plan du site et un fichier robots.txt qui indique sa position. Les implémenter n'est pas très compliqué, mais il y a quand même quelques points d'attention.
Trouver comment faire avec Eleventy est facile, il y a de multiples ressources à ce sujet, comme celle-ci, assez proche de ce que j'ai choisi de faire : Generate a sitemap for your Eleventy website(Opens in a new window)
Le robots.txt
Ce fichier est le plus simple, en fait il est tellement simple que l'on pourrait simplement l'écrire tel quel et juste ajouter une config pour le copier tel quel (comme on le fait pour les images) :
// In eleventy.config.js
eleventyConfig.addPassthroughCopy({ 'src/robots.txt': '/robots.txt' });
Attention !
Les points à ne pas oublier avec les robots.txt
Il y a deux points sur lesquels il ne faut pas se tromper :
- Le fichier doit toujours être à la racine du site
- Il doit toujours s'appeler
robots.txt
Si ces deux points ne sont pas respectés, les robots ne les trouveront jamais !
PS : il faut aussi faire attention au poids max de 512ko, mais dans mon cas, ça ne devrait pas être trop dur.
Mais je suis fainéant et j'aime bien jouer au plus malin, donc à la place je me fait un petit fichier robots.liquid :
---
permalink: /robots.txt
layout: false
eleventyExcludeFromCollections: true
---
User-agent: *
Allow: /
Host: {{ base.url }}
Sitemap: {{ base.url }}/sitemap.xml
Au final, je n'ai rien à interdire dans mon fichier robots.txt et le templating me sert uniquement à dynamiser le nom de domaine (comme ça si, un jour, je change de nom de domaine, je n'ai qu'une donnée à changer à un endroit).
Le sitemap.xml
Contrairement au précédent fichier, il y a un vrai intérêt à dynamiser ce fichier, vu qu'il doit contenir toutes les pages web du site.
Et avec les collections, c'est assez facile :
---
permalink: /sitemap.xml
layout: false
eleventyExcludeFromCollections: true
---
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{%- for page in collections.all %}
<url>
<loc>{{ base.url }}{{ page.url }}</loc>
<lastmod>{{ page.date | dateForURL }}</lastmod>
<changefreq>{{ page.data.changeFreq | default: "monthly" }}</changefreq>
</url>
{%- endfor %}
</urlset>
Avertissement
Bien exclure tous les contenus non-pertinents
L'objectif est de ne générer des entrées que pour les contenus pertinent. Il faut donc bien s'assurer d'exclure des collections tous les contenus transformés par Eleventy et qui ne sont pas pertinents, comme :
- les pages 404
- les
.htaccesset.htpasswd - les pages que nous venons d'ajouter
- etc.
C'est fini pour les robots, tout est en place.
Maintenant je m'interroge… et pour les humains ?
Car un plan exhaustif et à jour du site est un mode de navigation alternative plébiscité par les normes d'accessibilité (Exemple dans les WCAG : G63: Providing a site map(Opens in a new window))
Sauf que les humains ne se contenteront pas d'un paquet d'URL en vrac… Il leur faut du sens !
Le sujet est un peu plus complexe à résoudre avec Eleventy, il va falloir que je travaille dessus…