Un de nos clients a signalé le problème SEO suivant, que je peux reproduire ici sur Meta.
Lorsqu’un robot d’indexation visite Discourse, celui-ci insère des liens de pagination ?page=XX comme suit :
<link rel="next" href="/t/slug/123?page=2">
et
<span itemprop='name'><b><a rel="next" itemprop="url" href="/t/slug/123?page=2">next page â</a></b></span>
Lorsqu’une telle page est chargée dans un navigateur, Discourse effectue une redirection JavaScript vers une URL du type /t/slug/123/NN, où NN correspond au numéro d’un message.
Ainsi, https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294?page=2 redirige vers https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294/23
et https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294?page=3 redirige vers https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294/45.
Cependant, parfois, cette page contient une URL canonique qui ne correspond pas à la page originale qui a été demandée.
Dans l’exemple ci-dessus, ?page=3 redirige vers le message 45, et la page du message 45 contient une URL canonique ?page=2 :
<link rel="canonical" href="https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294?page=2" />
Citation tirée du rapport SEO du client :
Cela crée une chaîne de balises canoniques et de redirections, et Google finira par ne plus faire confiance aux balises canoniques mises en place.
Je n’arrive pas à identifier l’origine de ce problème. Parfois, l’URL canonique contient un numéro de page plus élevé, parfois elle fait référence à un numéro de page inférieur (comme dans cet exemple), et parfois elle est correcte.
Je pensais que cela pouvait être lié à des messages supprimés ou à des messages privés, mais un sujet comportant de nombreux messages supprimés ne présente pas systématiquement ce comportement (par exemple, https://meta.discourse.org/t/topic-list-previews/101646?page=5 redirige vers le message 471 (!), qui possède la bonne URL canonique ?page=5). Je pense qu’il pourrait s’agir d’une erreur de décalage de un (off-by-one).