随便访问一个不存在的地址,页面显示「抱歉,页面不存在」,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 消除后,抓取频次通常会有明显回升。