什么是软 404
软 404 指的是页面实际已经不存在、或者内容已经被清空,但服务器仍然返回 200 状态码。访问者看到的是一句“暂无内容”或者大片空白,而抓取程序读到的是“这个地址正常,可以继续来看”。两种信号对不上,问题就出在这里。
它和硬 404 的区别不在“页面看起来空不空”,而在状态码和页面实际可用性是否一致。
常见的几种触发场景
- 商品下架、文章删除之后,模板仍然渲染出空壳页面,标题还在、正文为空。
- 站内搜索结果页、筛选页在没有命中结果时返回 200,只显示一句“暂无相关内容”。
- 栏目页因为内容被移走而变空,但栏目地址本身没有做任何处理。
- 后端把 404 统一处理成跳转首页,或者跳到一个提示页,状态码却是 200 或 302。
- URL 拼错后,路由兜底到一个通用模板,任何不存在的路径都返回 200。
为什么它比硬 404 更麻烦
硬 404 是一个明确的信号:地址不存在,可以不再来了。软 404 给出的却是相反的暗示,抓取资源被持续花在永远不会有内容的地址上。同时,用户从搜索或外链点进来,看到空白页,体验落差明显;站点统计里这些地址还会被算作有效访问,干扰后续判断。
判断软 404 的关键,不是页面看起来空不空,而是状态码与页面实际可用性是否一致。
自查步骤
- 整理一批已经删除、下架、改名过的地址,做成清单。
- 用命令行工具逐个查看返回状态码,重点看响应里的第一行状态码字段。
- 同时把页面打开,确认正文是否为空壳、是否只有模板框架。
- 做对比:状态码为 200、内容却为空的地址,就是软 404 候选。
- 额外抽查站内搜索结果页、空分类页、空标签页这几类页面。
- 翻一下服务器日志,看这些地址被抓取的频次,判断影响范围有多大。
处理思路
确实不存在的地址
返回 404 或 410 都可以,410 表示永久删除。选哪个看站点习惯,关键是不要再返回 200。
有替代地址的
用 301 指向最相关的现存页面,而不是全部统一跳首页。跳首页对用户帮助有限,也不利于理解站内结构。
暂时没有内容的页面
如果只是暂时缺内容、之后会补上,可以考虑保留页面,或者先用 noindex 挡住,等内容补齐再放开。要注意 noindex 和 404 是两种不同处理,不要混用。
搜索与筛选结果页
无结果时直接返回 404 未必合适。更常见的做法是仍返回 200 但加上 noindex,同时把页面做得有出口,比如给出推荐内容或返回入口。
容易踩的坑
- 只在页面上显示“404”字样,状态码却依然是 200。
- 前端路由的单页应用,所有路径都返回 200,由前端渲染出 404 页面,服务端应配合返回对应状态码。
- CDN 或反向代理把错误页缓存下来,对外统一返回 200。
- 批量删除内容时只清理了数据库,没有同步处理 URL 与跳转规则。
日常怎么维持
把状态码检查放进常规动作里,比如每季度抽查一次删除清单,或者在日志中关注那些长期被抓到、却始终没有实际内容的地址。内容会持续下架,栏目会持续调整,软 404 属于会反复出现的类型,指望一次清理就永久干净并不现实。