当错误页面返回 200 而不是 4xx 或 5xx 时,先不要急着改服务端配置,而是确认两件事:响应状态码与页面实际内容是否指向同一结果,以及这个不一致是否被爬虫真实观察到。如果只有状态码异常而内容仍能明确表达“无结果”,影响可能有限;如果内容也像正常页,爬虫会把它当有效页面继续抓取和入库,这才是需要优先处理的情况。
状态码由 HTTP 响应头决定,页面文字由 HTML 决定,两者可以独立出错。核对时把问题拆成三层:
只有三层都指向“错误”,状态码才是可信的。如果传输层是 200、内容层却写着“无此内容”,这就是典型的内容与状态不一致,爬虫很可能按正常页处理。
没有服务器日志、没有搜索平台后台权限,仍然可以完成一次可复查的核对:
curl -I 查看响应头,记录状态码和 Content-Type。这个动作的结果会直接影响下一步:如果响应头与正文都显示错误语义,问题可能只在状态码声明;如果正文是正常模板,就要先修内容再修状态码,否则改状态码只是掩盖问题。
假设某商品已下架,页面返回 200,正文却仍保留商品名称、价格和“加入购物车”按钮,只是库存显示为零。此时不能因为页面里出现“库存为零”就认定状态码没问题。爬虫看到的是可索引的商品页,用户看到的是可操作的购买页,状态码 200 与这个结果是一致的——真正的问题是内容没有表达“该页已失效”。反过来,如果页面返回 404,正文却完整展示商品信息,那状态码与内容也不一致,但方向相反。两种情况下,单看状态码或单看文字都会得出错误结论。
根据核对结果分两种处理路径:
noindex。如果内容不先改,状态码改成 404 会让用户看到 404 页面却仍能读到商品信息,体验和语义都混乱。站点地图不保证收录,robots.txt 的抓取限制也不等于可靠的索引移除。如果错误页面已被大量链接指向,仅改状态码不会立刻改变爬虫行为,需要同时清理站内入口并观察后续请求。
一次请求返回 200 且正文正常,不能证明所有错误页面都这样;一次返回 404 也不能证明修复已经生效。请求量、抓取量或某个统计指标归零,可能是缓存、限流、日志采样或爬虫调度变化造成的,不能单独作为处理正确的证据。要判断影响范围,至少需要同一类错误页面的多个样本,以及不同入口(站内链接、站点地图、外部链接)的访问结果。如果只有一条 URL 可查,结论只能限定在这条 URL 上,不能推广到整个站点。
下一步动作很具体:把核对结果按“响应头—正文语义—站内入口”三列记录,对同类错误页面抽样至少三条,确认不一致是模板问题还是个别数据问题,再决定改模板、改状态码还是两者都改。