服务器返回 200,页面却什么都找不到——这类页面常被称为软 404。它和真正的 404 不同:状态码是正常的,蜘蛛在抓取环节拿到的第一个信号是“成功”,只有在解析页面内容之后,才会发现这里没有实质信息。
蜘蛛看到的 200 和实际内容之间的落差
抓取一个 URL 时,蜘蛛先记录的是 HTTP 状态码、响应头、跳转情况,然后才解析正文。软 404 页面的状态码没有任何异常,所以它会被当作正常抓取结果进入后续流程。真正让它被识别出来的,通常是内容层面的特征:
- 正文几乎没有可用文本,只剩导航、页脚和模板框架;
- 多个不同 URL 返回高度相似的“暂无内容”提示;
- 页面标题或正文里出现“未找到”“无结果”“已下架”等字样;
- 原本有内容的 URL,更新后只剩空壳。
主流搜索引擎会把这些页面归到软 404 一类,并在站长后台给出相应报告。要注意的是,这个判断发生在内容解析阶段,而不是抓取请求阶段。
对抓取路径的影响:入口还在,价值没了
软 404 最容易被忽略的地方,是它不会切断抓取路径。页面上如果还挂着列表、推荐位、分页链接,蜘蛛依然会顺着往下走。结果是:
- 同样的地址被反复访问,抓取预算花在没有产出的 URL 上;
- 新 URL 从这些页面被发现的概率降低,链接传递的价值信号变弱;
- 日志里表现为状态码 200 的请求数量不少,但站点内容并没有对应增长。
换句话说,它不像 404 那样直接给出“这里没有东西”的明确信号,反而更像一个长期开着门的空房间。
哪些地方最容易生成软 404
- 站内搜索的无结果页:参数组合几乎是无限的,每一种都可能生成一个 200 页面;
- 筛选与排序聚合页:条件组合后没有匹配结果时,页面照样渲染;
- 下架商品、过期活动页:为了保住外链而保留 URL,但正文被清空;
- 分页超出范围:页码超过实际页数,页面仍然返回 200。
这些入口如果同时存在于内链或 Sitemap 中,蜘蛛就会持续回访。
处理思路:给一个明确的信号
核心原则是让页面状态的语义和内容实际状态保持一致。
- 彻底没有内容:返回 404 或 410,并把它从内链和 Sitemap 中移除。
- 内容暂时缺失:如果确实会恢复,可以保留页面并给出说明,但不要让空页面长期挂在可抓取的链接里。
- 有替代页面:用 301 指向最相关的分类页或上级页面,让抓取信号继续流动。
- 参数组合页:与其用 robots.txt 屏蔽目录(被屏蔽的 URL 仍可能从外部链接被发现),不如让无结果时直接返回 404,或用 noindex 明确表态。
- 站内搜索页:无结果时不要输出可抓取的链接列表,也不要把这类地址写进 Sitemap。
怎么排查
从访问日志入手比较直接:筛选状态码为 200、但响应体明显偏小,或者地址里带着搜索、筛选参数的请求,按出现次数排序,看哪些 URL 被反复抓取。再看看这些地址是否出现在内链或 Sitemap 中。站长后台的软 404 报告可以作为交叉验证。
处理完一批之后,观察一段时间日志:如果同类地址的抓取次数下降,有效页面的抓取占比上升,说明方向是对的。反之,如果只是把 404 改成 200,问题只是从“明显报错”变成“隐形的空转”。
小结
软 404 的问题不在于状态码本身,而在于它让蜘蛛无法从状态码判断页面价值,只能靠解析内容来猜。把状态码和内容对齐,把无效入口从链接结构里清掉,通常比反复提交 Sitemap 更有用。抓取资源有限,留给有内容的地址更划算。