服务器返回 200,页面却只有一句“暂无内容”,或者商品下架后只剩一个空壳模板——这类地址在站内并不少见,但对搜索蜘蛛来说,它传达的信号是矛盾的:状态码说“这里有东西”,页面本身却说“什么都没有”。这种矛盾就是软 404。
软 404 为什么会让蜘蛛走错路
蜘蛛判断一个地址是否值得继续抓取,依赖两类信息:HTTP 状态码和页面内容本身。当两者冲突时,它通常先按 200 处理,把页面当成正常内容入库,随后在质量评估阶段发现内容空洞,再把它降级。这个过程可能跨越多轮抓取,中间反复消耗抓取资源。
更麻烦的是路径问题。一个返回 200 的空页面,往往还带着导航、面包屑和页脚链接,蜘蛛会顺着这些链接继续往下走,把整条链路都走一遍,最后发现每个节点都是空的。
软 404 对抓取的三个实际影响
- 抓取预算被空转:蜘蛛把时间花在没有内容的页面上,留给真正有价值的页面的额度就少了。
- URL 发现链条被拖慢:内链指向的空页面被反复回访,新地址的发现优先级被推后。
- 状态判断变得不稳定:同一个模板下,有的页面有内容、有的没有,蜘蛛对目录整体的判断会摇摆。
怎么把站内的软 404 找出来
- 看抓取统计里的软 404 报告,这是最直接的入口,注意区分是模板问题还是单页问题。
- 抽服务器日志:找那些返回 200、但响应体积明显偏小、正文长度接近模板骨架的地址。
- 按目录排查:列表页翻到最后一页、筛选条件组合为空、已下架商品详情页,是三个高发区。
处理方式:先分清“暂时空”和“永远空”
- 内容只是暂时缺失(缺货、活动未开始):保留地址,给出明确提示,同时把相关内链暂时指向替代页面,避免蜘蛛顺着走到空页。
- 内容已永久移除且没有替代品:返回 404 或 410,不要用 200 加一句“内容不存在”。
- 有更合适的承接页面:做 301,把地址和链接关系一起交给新页面。
- 想保留页面但不希望被抓取:用 noindex,注意 noindex 的页面仍可能被爬取,只是不进索引。
核心原则:状态码要和页面实际状态一致。让蜘蛛一眼判断“这条路走不通”,比让它自己反复猜要划算得多。
Sitemap 和内链要同步收口
处理完状态码之后,还要检查两条通路。Sitemap 里不要再保留已经返回 404 的地址,否则蜘蛛会因为文件里的信号再次回访;内链层面,把指向空页面的链接改掉或去掉,尤其是导航和列表页模板里的循环链接。如果空页面数量较多,可以用 robots.txt 屏蔽参数化路径,但要注意别把正常页面一起挡掉。
软 404 不会立刻带来明显波动,它的代价是长期而缓慢的——抓取效率被摊薄,新页面的发现速度被拖慢。定期扫一遍空页面,比事后补救省力得多。