阅读器里同一批文章反复出现,抓取日志显示它每隔十分钟请求一次带 paged=2 的地址,返回内容却和第一页一模一样。乍看像缓存或者权限的锅,追下去往往不是。

add_action('rss2_head', function(){
  $next = get_pagenum_link(get_query_var('paged') + 1);
  echo '<atom:link rel="next" href="' . esc_url($next) . '" />';
});

追下去是这么回事:分页参数在 feed 里应该用 paged,但查询没接收这个参数,页码被忽略。next 链接里的地址还少了必需的参数,服务端按默认第一页返回。有些阅读器只认 atom:link 的 rel=next。

「feed 分页链接」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。

具体做法是,确认 feed 查询读取的是 paged 而不是 page,两个参数在 feed 下行为不同;next 链接用分页函数生成,别手拼查询串;补上 atom:link 的 rel 为 next 和 self,阅读器靠这个判断翻页。

验收就看一点,翻页请求返回第二页文章,阅读器不再重复抓同一批。

作者 9823189