Douze adresses pour un seul article
Chaque billet de ce blog existe à douze adresses. Onze portent un préfixe de langue — /en/blog/…, /de/blog/… et neuf autres — et la douzième n'en porte aucun. Celle-là lit l'en-tête Accept-Language du navigateur et répond dans celle des onze langues qu'elle y reconnaît.
Les 27 et 28 août, les robots ont pris 1 609 pages de blog sur ce site. Les lecteurs en ont pris 628.
Ce que les pages se disent déjà
Les douze disent la même chose dans leur en-tête, trois choses, et je les ai toutes les trois mesurées aujourd'hui plutôt que de croire le code.
Le canonical de chaque page pointe sur elle-même. Onze lignes hreflang nomment les sœurs, et une douzième nomme l'adresse sans préfixe comme x-default, puisque celle-là n'appartient à aucune langue en particulier. Cette adresse répond avec Vary: Accept-Language, Accept-Encoding, pour que tout cache placé devant sache que le corps dépend d'un en-tête de la requête.
La négociation fonctionne. La même adresse avec Accept-Language: de renvoie une page marquée lang="de", avec ja une page japonaise, et avec un code que personne n'emploie, de l'anglais. Douze requêtes alternant entre quatre langues ont rendu trois fois de suite quatre corps corrects : le cache de pages est donc indexé sur la langue et pas seulement sur le chemin.
C'est exactement ce que demande la spécification : un groupe complet et réciproque où chaque membre se nomme lui-même et nomme toutes ses sœurs. C'est la disposition qui permet à un moteur de traiter douze adresses comme un article en douze langues plutôt que comme douze articles qui se concurrencent.
Cela ne fait prendre moins à personne
Cela ne réduit pas non plus les téléchargements, et le journal d'accès laisse peu de place à l'interprétation.
ClaudeBot a fait 396 requêtes vers le blog pour 36 billets — exactement 11,0 versions de langue par billet, toutes les langues, à chaque fois. bingbot est à 8,7 sur 37 billets, PetalBot à 6,0, Applebot à 4,3. SemrushBot atteint 1,8. Googlebot a fait 72 requêtes pour 42 billets, soit 1,5 version de langue par billet en moyenne, et c'est le seul des six à se comporter comme si l'annotation lui était parvenue.
Tous robots confondus, 73 des 76 billets ont été touchés au moins une fois, dont 68 dans plus d'une langue. La moyenne s'établit à 7,84 versions de langue par billet sur onze possibles.
Rien de tout cela n'est une infraction. hreflang est une indication sur la façon dont les pages se rapportent les unes aux autres, adressée à la partie d'un moteur qui décide quel résultat montrer. Ce n'est pas une consigne pour la partie qui décide quoi télécharger. Un robot qui n'a jamais vu /uk/blog/… n'a aucun moyen de savoir que c'est une traduction avant de l'avoir prise et d'en avoir lu l'en-tête — l'annotation ne peut agir qu'après la requête qu'elle aurait pu épargner.
Ce que cela coûte
Moins que ne le laisse penser la section précédente. Ces 1 689 requêtes de robots vers des pages de blog représentent 0,5 pour cent des 373 019 requêtes que ce vhost a servies en deux jours, et 19,9 Mo sur les 4 363 Mo qu'il a envoyés. Une page de blog revient en un dixième de seconde environ : la collecte onze fois répétée coûte donc quelque chose comme quatre-vingts secondes de processeur par jour.
Le sitemap coûte un peu plus que prévu. Il liste 3 136 adresses avec 13 248 annotations de langue accrochées à elles : 1,85 Mo de XML, 35 Ko une fois comprimé. Il est reconstruit au plus toutes les six heures, ce qui explique qu'un billet publié à treize heures dix y figure complet quelques heures plus tard et non tout de suite.
Aucun de ces chiffres ne justifie un changement. Le seul levier qui réduirait la collecte serait de ne pas avoir les adresses, et les adresses sont précisément le but.
Lecteurs et robots ne veulent pas la même chose
Les deux mêmes journées, réparties par langue, montrent deux habitudes assez différentes.
Les robots se répartissent presque également : entre 5,5 et 10,5 pour cent de leurs requêtes vers le blog sont allées à chacune des onze versions préfixées, plus 16 pour cent à celle qui ne l'est pas. Cela ressemble à quelqu'un qui déroule une liste.
Les lecteurs ne se répartissent pas également. 38 pour cent de leurs requêtes sont allées à l'adresse sans préfixe et 18 pour cent de plus à /en/ : plus de la moitié est donc arrivée en anglais ou par négociation. Le reste se partage entre dix langues, la plus grande l'allemand avec 7 pour cent, la plus petite le français avec 2.
Ces 44 pour cent restants sont toute la raison d'être des chemins de langue. Ils sont aussi assez petits pour qu'on puisse facilement s'en dissuader — ce qui est la même erreur que de lire la colonne des robots et d'en conclure que les pages sont populaires.
Ce qui se généralise
Une indication correcte n'est pas une consigne. Tout ce qui figure dans l'en-tête de ces pages est correct, réciproque et vérifiable, et cinq robots sur six prennent comme si rien n'y était. La spécification décrit ce que l'annotation signifie, pas ce qu'un programme donné en fera.
La question utile n'a donc jamais été de savoir si le balisage est correct. C'était de savoir combien de fois chaque ramasseur vient vraiment, et seul le journal peut y répondre — et une fois qu'il a répondu, la conclusion honnête est que la collecte onze fois répétée coûte un demi pour cent et mérite qu'on la laisse tranquille.