随便访问一个不存在的地址,页面显示「抱歉,页面不存在」,HTTP 状态码却是 200。这种叫软 404,会让搜索引擎把大量无效页面当成正常内容收录。

先批量抽查

for i in 1 2 3; do
  curl -o /dev/null -s -w "%{http_code}\n" \
    https://你的域名/random-$i-test
done

三条都返回 200,说明 404 处理整体失效。正常应返回 404,已永久删除的内容可以用 410。

常见成因

  • 主题的 404 模板里做了跳转或输出内容但没有设置状态码
  • 伪静态把不存在的路径统一转发到首页
  • 单页应用所有路由都返回入口 HTML

怎么改

WordPress 主题里通常由 header 决定状态码,自定义模板时要在输出前调用状态码函数。Nginx 侧则检查 try_files 的兜底是不是写成了首页:

location / {
    try_files $uri $uri/ /index.php?$args;
}

兜底到 index.php 是对的,兜底到 /index.html 就会造成整站软 404。改完重新抽查,同时看搜索资源平台的抓取异常是否下降,软 404 会持续消耗抓取额度。

单页应用要单独处理

前端路由的站点无法在服务器区分有效路径和无效路径,常见做法是把已知路由维护成白名单,命中才返回入口页,其余直接 404。

改完用搜索资源平台的抓取诊断逐个验证,确认状态码和内容都对上,再考虑提交 sitemap。软 404 消除后,抓取频次通常会有明显回升。

作者 9823189