RGJ
(Richard - Communiteq)
1
这里似乎有两个或三个“差一错误”(off-by-one errors)叠加在一起……
一旦某个主题有 18 篇帖子,sitemap_recent.xml 就开始显示一个带有页码的 URL,例如 https://forum.example.com/t/slug/123?page=2。
问题 1:页面 2 实际上要等到主题有 20 篇帖子时才存在,但站点地图却显示了该链接。
预期:站点地图应在主题拥有 20 篇帖子之前不显示 page=2。
问题 2:当主题有 18 篇帖子时,点击该链接会显示“该页面不存在”的错误。
预期:应优雅地处理此情况,并将用户重定向到该主题的末尾。
问题 3:当主题有 19 篇帖子时,点击该链接会显示“错误。在加载过程中出现问题”的提示。
预期:应优雅地处理此情况,并将用户重定向到该主题的末尾。
问题 4:当主题帖子数超过 20 篇,但因部分帖子被删除导致可见帖子总数减少时,?page=2 仍会保留在最近站点地图中,直到发布一条新帖子后才会消失。
预期:页码应消失(或对于更高页码则应减少),以反映实际可用的页数。
更严重的是:这个错误的链接甚至出现在 Google 搜索结果中!
问题 5:点击该链接时,用户会看到错误提示。
但在 Google 中,似乎因此生成了重复内容。
在 Meta 上的复现步骤:
-
找到一个有 17 或 18 条回复的主题:

-
在 https://meta.discourse.org/sitemap_recent.xml 中找到该主题:
-
点击该链接:
-
检查 Google:
6 个赞
嗯,这可不太好!我们应该修复它并回推到 @zogstrip。
5 个赞
nbianca
(Bianca)
4
计算页码的主要问题出在 discourse-sitemap 中:
缓存问题已在此处修复:
我还修复了核心部分的一个次要问题(未找到错误):当请求第二页但实际只有 20 篇帖子(即仅 1 页)时,系统会错误地返回 200 状态码:
8 个赞