这个坑值得记一笔。改版后做了个带搜索框的 404 模板,测试时访问不存在的地址能看到提示文案,但响应码是 200,GSC 里这类页面全被标成软 404,数量涨到三千。

真正麻烦的地方在于,几个原因的现象几乎一样。模板在主题里用 page 模板渲染,状态码没显式设置;Nginx 的 try_files 落到 index.php 后由 WordPress 兜底,默认 200;部分插件拦截 404 并重定向到自定义页,跳转后自然是 200。

动手时先确认不存在地址的状态码

curl -sI https://www.example.com/no-such-page-123 | head -3

然后在模板里显式设置 404 状态

add_action('template_redirect', function(){ if (is_404()) { status_header(404); nocache_headers(); } });

末了关掉把 404 重定向到首页的插件选项

wp option get 404_redirect_enabled

同样的操作我在测试机上先走了一遍,线上只做验证过的部分。

怎么算真的好了,看的是同一批现象。不存在的地址返回 404 且仍展示自定义模板,GSC 软 404 数量一周内开始下降,抓取统计里这类页面的占比回落。

提醒一点。自定义 404 页面本身没问题,问题只出在状态码,设计再好看也不能用 200 糊过去。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189