?page= のバグ、コアとサイトマッププラグインの両方

ここには、2 つ、あるいは 3 つのオフ・バイ・ワン・エラーが重なっているようです。

トピックに投稿が 18 件あると、sitemap_recent.xmlhttps://forum.example.com/t/slug/123?page=2 というページ番号付きの URL が表示され始めます。

問題 1: 投稿が 20 件になるまでページ 2 は存在しないのに、サイトマップにはこのリンクが表示されています。
期待される動作: 投稿が 20 件になるまで、サイトマップに page=2 は表示されないこと。

問題 2: 投稿が 18 件の場合、そのリンクにアクセスすると「そのページは存在しません」というエラーが表示されます。
期待される動作: 適切に処理され、ユーザーはトピックの末尾へリダイレクトされること。

問題 3: 投稿が 19 件の場合、そのリンクにアクセスすると「エラー。読み込み中に問題が発生しました」というメッセージが表示されます。
期待される動作: 適切に処理され、ユーザーはトピックの末尾へリダイレクトされること。

問題 4: 投稿が 20 件を超えていても、削除により表示される投稿の総数が減っている場合、新しい投稿が 1 件追加されるまで ?page=2 が最近のサイトマップに残り続けます。
期待される動作: 利用可能な実際のページ数に応じて、ページ番号が削除される(あるいはより高いページの場合は減少する)こと。

さらに深刻な点: この不良リンクが Google にも表示されています!
問題 5: そのリンクをクリックするとユーザーにエラーが表示されます。
しかし、Google の側では、どうやら重複コンテンツが生成されているようです。

Meta での再現手順:

  1. 返信が 17 または 18 件のトピックを見つける:
    image

  2. https://meta.discourse.org/sitemap_recent.xml でそれを見つける

  3. リンクをクリックする

  4. Google を確認する

「いいね!」 6

うーん、それは良くないですね!@zogstrip さん、それを修正してバックポートしましょう。

「いいね!」 5

@nbianca これをリストに追加してもらえますか?

「いいね!」 3

ページ番号の計算における大きな問題は、discourse-sitemap にありました:

キャッシュに関する問題は、こちらで修正されました:

また、コア部分(軽微な修正)で、20 件の投稿しかない場合(1 ページ分)に 2 ページ目をリクエストすると 200 で応答してしまう「not found」の問題も修正しました:

「いいね!」 8