站内搜索第一页结果正常,点第二页跳到 /page/2/ 后直接 404,地址里把 s 参数删掉再访问又恢复正常,说明问题出在参数上。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,搜索分页必须带着 s 查询变量,重写规则把只带 page 的地址当成文章翻页处理,找不到对应文章就返回 404,和文章列表的分页走了同一条路径。
「搜索结果分页 404」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
add_filter('get_pagenum_link', function ($link) {
if (!is_search()) return $link;
return add_query_arg('s', get_search_query(), $link);
});
同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
具体做法是,先看分页链接里 s 参数有没有被模板丢掉,点开链接对照地址栏;检查搜索页的重写规则是否启用,search 路径有没有被覆盖;用 paginate_links 重新生成链接,把当前查询串里的参数都并进去。
最后用这个标准收尾,第二页能正常列出结果,翻到第三页也正常,地址里的 s 参数始终保留。
