这个坑值得记一笔。改版后做了个带搜索框的 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 糊过去。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
