站点上有一类页面,服务器返回的是 200,状态码看上去一切正常,但页面里没有实质内容:筛选后无结果的列表页、已经下架的商品页、内容被清空只剩框架的详情页。对访问者来说它是一片空白,对蜘蛛来说,它同样是一次没有收获的抓取。搜索引擎把这种情况称为软 404。
软 404 和真正的 404 有什么不同
真正的 404 是一个明确信号:这个地址对应的资源不存在。蜘蛛收到 404 之后,会把 URL 从待抓列表里逐步移除,不再为它消耗时间。软 404 恰恰相反,HTTP 状态码是 200,蜘蛛必须把 HTML 抓回来、解析完,才发现页面上没有可用内容。这个判断发生在抓取之后,成本已经付出去了。
换句话说,软 404 消耗的是抓取资源,却换不回索引价值。
常见的软 404 触发场景
- 站内搜索页、筛选参数生成的空结果页,返回 200 但正文只有一句“没有找到相关结果”。
- 商品、文章下架后保留原 URL,页面只剩标题和推荐位。
- 模板渲染失败或数据接口超时,页面照常返回 200,正文区域是空的。
- 分页超出实际范围,例如只有 5 页的列表却能从 ?page=20 打开空白页。
- 用户中心、订单页等需要登录才能看到内容的页面,被外部链接暴露出来。
它对抓取意味着什么
搜索结果里不会立刻出现明显报错,但影响是渐进的:
- 抓取预算被稀释:蜘蛛把时间花在空页面上,真正需要更新的 URL 排队更久。
- 索引状态不稳定:搜索引擎可能把这些 URL 判定为软 404 并从索引中移除,也可能反复抓取、反复判断,形成拉锯。
- 内链路径被浪费:从列表页点进空详情页,蜘蛛沿这条路走一趟,带不回新内容。
怎么确认一个软 404 是否被判定
可以分三步看:
- 抓取日志:统计返回 200 但响应体很小、正文关键词缺失的 URL,这类地址往往是嫌疑对象。
- 站长工具:看索引状态里的“软 404”“已排除”等分类,能把范围缩小到具体目录。
- 人工抽查:随机打开几条可疑 URL,关掉 JS 看原始 HTML 里还剩多少文字。如果剥掉导航和页脚就什么都不剩,基本可以确认。
处理思路
处理的原则是:让“没有内容”这件事在 HTTP 层面就表达清楚,而不是让蜘蛛抓完再猜。
- 确实不存在的页面,返回 404 或 410,不要为了保住流量长期返回 200。
- 暂时无货、暂时无结果但之后可能恢复的页面,考虑用 503 加 Retry-After,或者保留一个有实质内容的说明页。
- 筛选参数产生的空结果页,可以在 robots.txt 层面收敛,或通过参数规范避免被大量生成。
- 需要登录的页面,用 robots.txt 或 X-Robots-Tag 明确禁止抓取,别让它们进入抓取队列。
- 已经确认无效的 URL,用 301 指向最相关的有效页面,而不是一律指向首页。
把软 404 当作“状态码写错了”来修,通常比事后清理索引更省事。抓取资源是有限的,蜘蛛少走一次空路,就能多抓一次有价值的页面。
小结
软 404 的关键在于状态码与页面内容不一致。它不致命,但会持续消耗抓取预算,拖慢新内容的发现速度。定期从日志和索引状态里筛出这类 URL,按“真消失、暂时消失、不该被抓”三类分别处理,抓取路径会干净很多。