先分清:404 是结果,软 404 是伪装
页面确实不存在,返回 404 或 410,这是正常且诚实的反馈。软 404 则相反:地址早已失效、内容早已清空,服务器却仍然返回 200,只在页面正文里写一句“内容不存在”“该商品已下架”。对访客来说这只是一次绕路,对搜索引擎来说却是一个错误信号——它会认为这是有效页面,抓回去、尝试索引,最后发现里面没有实质内容。
还有一种情况更隐蔽:站点使用前端路由,任何地址都先返回 200,再由 JavaScript 决定渲染哪个页面。如果不做额外处理,等于主动把大量空壳地址交给搜索引擎。自查时先看服务端返回的状态码,再看页面上显示了什么,顺序不要颠倒。
为什么软 404 比 404 更麻烦
404 本身不会带来惩罚,它只是告诉搜索引擎“这里没有东西,别再来了”。软 404 的代价在于消耗:抓取预算被花在空页面上,真正需要更新的内容排不上队;索引里堆积一批没有价值的地址,稀释了整站的内容质量判断。长期累积下来,抓取频次和收录效率都可能受影响。
几个高频出错的位置
- 已下架的商品或文章页:返回 200 并显示“内容已下线”。有替代内容的应 301 到最相关的类目或新地址,确实没有的应返回 404/410。
- 空搜索结果页:站内搜索无结果时仍返回 200,被大量生成。建议对空结果页加 noindex,或直接返回 404。
- 分页越界:列表只有 5 页,访问第 50 页却返回 200 的空列表,属于典型软 404。
- 排序、筛选参数拼出的无效组合:地址可访问,但列表为空。
- 被清空的标签页、专题页:栏目还在,内容已搬走,页面只剩标题和导航。
自查怎么做
- 准备一批确定不存在的地址,包括随机字符串、已删除内容地址、越界分页地址,用 curl -I 或浏览器开发者工具查看返回的状态码。
- 抽查返回 200 的页面,看正文是否为空、是否只有一句“未找到”、是否缺少唯一标题。
- 翻服务器日志,把状态码为 404 的地址按出现次数排序,找出高频项。多数时候它们来自站内错误链接,修一处能减少一批。
- 对照站点地图与站内链接,确认列出的地址都能正常打开、状态码一致。
判断标准很简单:如果没有实质内容可看,就不要用 200 告诉搜索引擎“这里有好东西”。
按内容去向决定处理方式
- 内容永久迁移:301 到最相关的新地址,尽量一对一,不要整站跳到首页。
- 内容彻底删除且无替代:返回 404;确定不再恢复的可以返回 410。
- 临时维护或短暂下线:返回 503 并附上 Retry-After,不要用 301 把临时状态固化下来。
- 地址必须保留但内容为空:至少加 noindex,并考虑把入口合并到上级页面。
404 页面本身也值得做
返回 404 并不等于访客体验差。一个合格的 404 页面应当包含:站点主导航、站内搜索框、几个热门栏目入口,以及一段说明问题可能出在哪里的文字。访客能继续往下走,而不是直接关掉页面。注意不要在 404 页面堆砌大量链接,也不要用脚本把 404 地址自动跳到首页,那会让搜索引擎把首页和无数无效地址绑在一起。
定期复盘看三个指标
- 404 数量趋势:突然上升,通常意味着某次改版或某批内容下线没有做好跳转。
- 软 404 占比:抓取日志中返回 200 但正文极短的地址比例。
- 高频 404 来源:来自站内链接的优先修,来自外部的可以先观察。
这些检查不需要复杂工具,一次抽样加一次日志筛选,通常就能发现不少问题。把它们纳入固定的维护节奏,比等到抓取异常再回头排查要省力得多。