先给结论:状态码和页面内容必须分别取证,再判断二者是否匹配。错误页面返回 200 通常意味着服务器把“找不到”或“已失效”当成了正常页面输出,此时不能只看状态码,也不能只看页面文字,而要用同一 URL、同一请求方式,把响应状态、响应体中的关键文案、以及渲染后的可见内容放在一起比对。只要三者不一致,就应优先按内容性质决定返回码,而不是按状态码去改文案。
下面用一个假设情境串联决策过程。假设某站点把已下架商品统一跳到一个“商品已下架”的提示页,服务器对该提示页返回 200。变化点是:过去这些 URL 确实对应有效商品,现在业务上已经永久失效。变化前后应采用不同决策——若只是临时缺货且预计恢复,保留可访问的替代页并返回 200 尚可接受;若已永久下架,则应让该 URL 明确返回 404 或 410,而不是继续用 200 承载失效信息。
核对一致性前,要先固定变量:同一个 URL、同一种请求方法、同一组请求头,最好包含和不包含常见的爬虫 User-Agent 各测一次。原因是部分站点会对不同来源返回不同内容,若一边看浏览器、一边看命令行,结论很容易互相矛盾。
实际操作可以分三步:
curl -I 只取响应头,记录状态码、Content-Type、Location、Cache-Control 等字段。curl -s 取响应体,搜索页面中是否出现“已下架”“不存在”“已删除”等关键文案。如果第 1 步返回 200,第 2 步响应体里却写着“页面不存在”,说明状态与内容已经冲突。此时下一步不是改文案,而是回到路由或模板层,确认这个提示页是否被错误地配置成了正常页面输出。
错误页返回 200 并不只有一种成因,至少可以分成三类,每类需要看的证据不同。
Location,最终 URL 与原始 URL 不同。这三类的共同点是状态码都为 200,但处理动作不同:软 404 要改应用层返回码;重定向要判断目标页是否与原始意图一致;空壳页要决定是补 410 还是保留替代内容。若把三类都当成同一种问题,很容易改错地方。
假设同一批下架商品有 100 个 URL,可以抽 10 个做对照,而不是全量直接改。对照方法是:对每个 URL 分别记录原始状态码、响应体关键文案、渲染后首屏文字,以及是否存在跳转。然后把它们分成两组:
这个对照的作用是帮助你决定下一步:如果组 A 占多数,优先修应用层的错误处理逻辑;如果组 B 占多数,优先检查跳转目标和替代内容质量。动作的结果会直接影响后续范围——组 A 修完后,再用同一方法抽检,确认状态码与文案一致;组 B 则继续观察用户是否从替代页继续访问。
第一,robots.txt 的抓取限制不等于可靠的索引移除。即使你用 robots 规则挡住某个路径,已经存在的索引记录仍可能保留,且不同搜索引擎的处理方式需要分别核查。因此不能用 robots 限制来代替正确的 404 或 410 响应。
第二,站点地图不保证收录,HTTPS 也不保证安全无漏洞或排名。这两点与状态码一致性没有直接因果关系,但常被误当成“已经处理好了”的理由。真正能作为证据的,仍是同一 URL 下的响应状态、响应体文案和渲染后内容三者是否一致。
最后给一个可执行动作:选 5 个返回 200 的错误页 URL,按上面的三步记录状态码、响应体关键词和渲染首屏文字。如果状态码为 200 而文案为“不存在”,就回到应用层把该分支改为 404 或 410;改完后用同一组 URL 复测,确认状态码、文案和可见内容三者一致,再决定是否扩大到全量。