服务器返回 200,页面却是空白、报错信息,或者只剩一句“暂无相关内容”。这种页面在浏览器里往往看不出异常,用户以为只是没找到东西,但搜索蜘蛛拿到的是一个信号矛盾的页面:状态码说一切正常,内容却说这里什么都没有。这就是通常说的软 404。
软 404 是怎么产生的
它很少是有人故意写出来的,多数是几种常见情况叠加的结果。
- 内容被删除后,模板仍然可以渲染,只是正文区为空。
- 筛选、排序、搜索参数组合没有匹配结果,页面照样返回 200。
- 站点改版或迁移时,旧 URL 统一兜底到一个 200 的提示页。
- 商品下架、文章撤稿后,页面保留但内容被清空。
- 接口超时或数据异常,页面把错误信息当成正文输出。
这些页面有一个共同点:URL 可以访问,模板完整,只有内容缺失。
蜘蛛遇到软 404 会怎么处理
从抓取角度看,影响主要在几方面。
- 抓取请求被占用:蜘蛛仍然要请求、下载、解析这个 URL,才能判断它没有价值。这类请求多了,真正有内容的页面被访问的机会就变少。
- 索引状态反复:已经不在索引里的 URL 可能因为 200 状态被重新收录,过一段时间又消失,形成来回波动。
- 模板级判断:当同一套模板下出现大量空结果页,蜘蛛对整个模板的抓取意愿会下降,连带影响正常的列表页和筛选页。
- 排查困难:日志里看到的状态码是 200,只看状态码分布很难发现异常,需要结合响应体大小和 URL 特征一起看。
几种容易混淆的处理方式
404、410 与 200 兜底页
内容确定永久移除,就让它返回 404 或 410,让蜘蛛明确知道这个地址不再有意义。用 200 的“该内容已删除”页面兜底,短期省事,长期是持续消耗抓取。410 与 404 对蜘蛛来说都属于可以遗忘,区别只是前者表述更明确。
noindex 不是万能替代
只加 noindex 而不改状态码,蜘蛛依然要抓取页面才能读到这条指令。对于已经确定废弃的 URL,直接给 404 更省资源。noindex 更适合那些需要保留给用户访问、但不希望出现在搜索结果里的页面。
canonical 指向自己
空结果页如果 canonical 指向自身,等于告诉蜘蛛这就是正版页面。这种情况下,要么改成指向有内容的上级列表页,要么干脆让它返回 404。
从日志和报告里找线索
排查时可以关注几类信号:状态码为 200 但响应体明显偏小、URL 命中同一套空结果模板、某个参数目录下大量 URL 被反复抓取却没有带来流量变化。站长平台里的软 404 报告也值得定期看,它会直接列出一批“返回 200 但没有内容”的地址。
处理顺序建议
- 先分类:内容是永久删除、暂时下架,还是参数组合本身不该存在。
- 永久删除的,返回 404 或 410,不要再叠加 noindex。
- 暂时下架的,保留 200,但给出明确说明和相关推荐链接,不要让页面一片空白。
- 参数组合无结果的,考虑返回 404,或至少让 canonical 指向上级列表页。
- 迁移遗留的旧地址,301 到最相关的新页面,而不是统一跳到首页。
- 改完之后观察一段时间的抓取分布,看空结果模板的请求量是否下降。
状态码是蜘蛛判断页面价值的第一个依据。让状态码和内容说同一件事,比事后补一堆优化规则更有效。