先给结论:错误页面返回 200 时,必须把“HTTP 状态”“页面正文语义”“robots 元指令与 X-Robots-Tag”“是否被软 404 判定”分开核对,不能只看其中一项就下结论。核对的目标是判断这个 200 是真实内容页、还是伪装成成功响应的错误页,然后决定修正服务端状态码,还是仅调整内容与索引指令。
多个角色对同一 URL 的理解不同,通常卡在两个层面。运维看到 200 就认为“服务正常”,SEO 看到正文写着“页面不存在”就认为“这是错误页”,两个判断都只覆盖了一半事实。
可以按下面两种条件分别处理:
判断依据是“正文语义与状态码是否指向同一事实”。如果正文说资源不存在、状态码说成功,两者矛盾,就是不一致;如果正文有完整有效内容、状态码为 200,则一致,不需要按错误页处理。
把分歧转成可核对的项目,关键是取一组任何人重跑都能得到相同结果的证据。建议至少记录四项:
X-Robots-Tag、Location、Cache-Control。<head> 中的 <meta name="robots"> 取值,是否含 noindex。一个注明假设的短例子:假设某商品下架后页面仍返回 200,正文显示“该商品已下架”,meta robots 为 noindex。此时状态码与内容矛盾,但索引指令已阻止收录。若只修 noindex 而不改状态码,下一次抓取仍会看到“成功响应 + 错误内容”的组合,软 404 判定不会消失。正确动作是让服务端对下架且不再恢复的资源返回 404 或 410,再检查响应头确认生效。这个动作的结果会决定下一步:如果状态码已改但页面仍被当作有效页,说明缓存层或 CDN 仍在返回旧响应,需要继续排查缓存。
常见误区是:既然错误页返回 200,就干脆在 robots.txt 里屏蔽它。需要明确,robots.txt 的抓取限制不等于可靠的索引移除。被 robots.txt 屏蔽的 URL 仍可能因外部链接出现在索引中,只是抓取方无法读取内容来确认状态,反而更难判断它是否为软 404。
同样,noindex 也只是一种索引指令,它不改变 HTTP 状态码,不能替代正确的 404 或 410。两者适用条件不同:
noindex,且此时正文应是有效内容,不是错误提示。另外,不同搜索引擎对软 404 的判定和支持情况须分别核查,不能以某一家的表现推断全部。站点地图也不保证收录,把错误 URL 留在站点地图里只会增加矛盾信号。
改完状态码或内容后,不要只看一次请求就收工。按下面的顺序复查:
X-Robots-Tag。要注意,抓取量、请求量或某项统计归零,不能单独证明处理正确。它也可能来自抓取频率调整、缓存命中变化或屏蔽策略生效,这些都与状态码是否修好无关。只有“状态码、正文语义、索引指令”三者指向同一事实,才算一致性恢复。若三者仍冲突,下一步应回到服务端响应逻辑,而不是继续叠加 robots 或 noindex 指令。