?page= が時々異なる正規URLのページにリダイレクトされる

クライアントの一人が、ここで再現可能な以下のSEO関連の問題を発見しました。

Discourseがクローラーによってアクセスされると、Discourseは以下のようにページネーションリンク ?page=XX を挿入します。

<link rel="next" href="/t/slug/123?page=2">

および

<span itemprop='name'><b><a rel="next" itemprop="url" href="/t/slug/123?page=2">次のページ</a></b></span>

そのようなページがブラウザで読み込まれると、Discourseは /t/slug/123/NN(NNは投稿番号)というURLへのJavaScriptリダイレクトを発行します。

したがって、https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294?page=2https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294/23 にリダイレクトされ、
https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294?page=3https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294/45 にリダイレクトされます。

ただし、時々、そのページには元リクエストされたページと一致しない正規化URL(canonical URL)が含まれています

上記の例では、?page=3 は投稿45にリダイレクトされ、投稿45のページには正規化URL ?page=2 が含まれています。

<link rel="canonical" href="https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294?page=2" />

クライアントのSEOレポートからの引用:

これにより、正規化タグとリダイレクトの連鎖が生まれ、Googleは設定された正規化タグを信頼しなくなる可能性があります。

この問題の原因がどこにあるのか、どうにもわかりません。正規化URLには、場合によってはページ番号が大きい値、低い値(この例のように)、あるいは正しい値が含まれることがあります。

削除された投稿や囁き(whispers)に関連しているのではないかと考えましたが、多くの削除された投稿を含むトピックでは、この動作は必ずしも見られません(例:https://meta.discourse.org/t/topic-list-previews/101646?page=5 は投稿471(!)にリダイレクトされますが、この投稿には正しい正規化URL ?page=5 が含まれています)。これはオフ・バイ・ワンエラー(off-by-one error)ではないかと考えています。

「いいね!」 7

おそらく、canonical 側の括弧の配置が少しずれているのかもしれません。@kris.kotlarek さん、来週調査していただけませんか?ローカルで 44 件の返信がある投稿を作成して、その後どうなるか確認する必要があります。

「いいね!」 6

@kris.kotlarek 氏の修正がマージされました!

動作に問題がある場合はお知らせください!

「いいね!」 3