站点运营里有一类问题很隐蔽:地址能打开,浏览器不报错,用户看到一句「暂无内容」,服务器返回的却是 200。这种页面在蜘蛛眼里是正常页面,但它没有任何价值,还会不断占用抓取额度。这就是软 404。
软 404 和真 404 的区别
真 404 是服务器明确告诉蜘蛛「这个地址没有对应内容」。软 404 是内容已经不存在,服务器却给出 200,只是在页面里写了提示文字。前者能让蜘蛛快速放弃这个地址,后者会让蜘蛛反复回来确认,甚至在索引里留下一条空壳记录。
还有一种相反的情况:真正的错误页返回的状态码是 200。比如有人把自定义错误页配置成普通页面,用户看到「页面不存在」,蜘蛛收到 200,于是把它当成一篇正常内容对待。
常见的软 404 来源
空列表与空搜索结果
筛选条件叠加到没有结果的组合、搜索关键词没有匹配、栏目下暂时没有内容,这些页面往往沿用列表页模板,返回 200 并显示「暂无相关结果」。如果参数组合能被无限拼出来,这类地址会成规模出现。
已下架但保留框架的详情页
商品、活动、职位、文章下线后,很多人只在前台把正文删掉,页面模板还在,标题变成空白或「内容已删除」,状态码依旧是 200。
框架统一返回 200
部分前端框架在客户端渲染,服务端对所有路由都返回 200,再由 JavaScript 决定显示哪种页面。蜘蛛拿到的初始响应是 200,看不到真实状态。单页应用尤其容易出现这种情况。
兜底跳转与首页重定向
把不存在的地址全部 301 到首页,看起来用户不会碰到错误页,但对蜘蛛来说,一批无关地址指向同一个页面,既浪费抓取,也容易让首页被当成万能落点。这种处理通常比直接返回 404 更麻烦。
自查步骤
- 用命令行工具或浏览器开发者工具看响应头,重点关注状态码,而不是页面长什么样。
- 挑一批低价值地址做抽查:空筛选组合、已下架详情页、长期无更新的栏目页、站内搜索结果页。
- 翻服务器访问日志,统计返回 200 但内容几乎为空的地址数量,按目录归类。
- 在站长平台里查看软 404 相关报告,与日志结果对照,确认不是统计口径的问题。
- 检查自定义错误页本身返回的状态码,确认它是 404 而不是 200。
发现之后怎么处理
- 确实没有内容的地址:返回 404;如果内容是永久移除并且有明确判断依据,可以用 410。状态码要真实,不要用 200 加一句提示来代替。
- 内容迁移到了新地址:用 301 指向新页面,并保证新旧内容对应,不要一律指向首页。
- 参数拼出的空结果:从内链和模板里减少无意义入口,必要时用 robots.txt 或 noindex 控制,前提是这些页面确实没有独立检索价值。
- 暂时缺内容的栏目:如果短期内会补上内容,可以先不开放访问,等有内容再上线,比长期挂一个空壳页更稳妥。
- 前端渲染的站点:尽量让服务端返回正确状态码,或者对确实不存在的路由在服务端做判断。
状态码是给机器看的说明书,页面里写多少提示文字,都代替不了一个准确的 404。
最后提醒一点:处理软 404 改的是状态码和内容策略,不是把提示页做得更漂亮。批量修改后记得抽查几条地址,确认响应头真的变了,再观察一段时间的抓取与索引变化。抓取额度和索引位都是有限的,把它们留给真正有内容的地址,比留住一堆空壳页面更有意义。