当服务器对一个本应报错的地址返回 200,单看状态码已经无法判断页面是否真的有效。核对内容与状态是否一致,核心动作是分别记录“状态码证据”和“内容证据”,再判断两者矛盾时应当保留、改写还是退出该 URL 的索引处理。下面按这个顺序展开。
状态码与内容不一致,常见的表现是:HTTP 响应为 200,但页面正文写着“页面不存在”“内容已下架”,或者正文为空、只剩导航和页脚。此时不要立刻认定是服务端配置错误,先排除三种合理解释。
区分方法是取原始响应而非渲染后的结果:用命令行工具请求该地址,只看第一跳的状态码和响应体,不跟随跳转。如果第一跳就是 200 且响应体含错误文案,矛盾成立;如果第一跳是 3xx,问题在跳转链而不是错误页本身。这一步的结果直接决定后续动作:矛盾成立才需要处理索引,跳转链问题则应回到重定向规则去改。
矛盾确认后,处理方式取决于这个 URL 是否还有真实内容可承接。
适用前提:该地址对应的内容确实已不存在,且没有等价替代页。做法是把响应改为 404 或 410,让状态码与“内容不存在”的语义一致。代价是已积累的外部链接会失效,若这些链接仍有访问量,用户会直接看到错误页。若该地址有替代内容,优先考虑下一种做法。
适用前提:该地址仍应承载有效内容,只是当前渲染出了错误提示。做法是修复模板或数据源,让 200 响应体输出真实内容。代价是需要确认修复覆盖所有同类 URL,而不是只改这一个地址;否则同一模板下的其他地址仍会返回 200 加错误文案。判断是否修全,可以抽样同一路径规则的若干地址,比较响应体是否都含错误标识。
适用前提:该地址既无内容也无替代页,且不希望它继续出现在结果中。这里要区分两个动作:服务端返回 404/410 是让页面自然退出;用 robots.txt 屏蔽抓取只是阻止爬虫访问,robots.txt 的抓取限制不等于可靠的索引移除,已收录的 URL 仍可能保留在结果里。若确实需要加速移除,应结合状态码处理,而不是只加屏蔽规则。
为了让核对结果可复查,建议对每个可疑地址记录三项:原始状态码、响应体中是否含错误标识、以及该地址在站点内是否还有入口链接。三项组合能区分不同原因。
假设一个列表页模板在数据为空时输出“暂无内容”,而该地址本应有数据。此时 200 状态码本身没错,错的是数据源。处理动作应是修复数据查询,而不是把状态码改成 404——改成 404 会让本应存在的页面被判定为不存在,反而扩大问题。这个假设说明:状态码该不该改,取决于内容是否真的应当存在,而不是取决于页面看起来像不像错误页。
处理动作落地后,验证重点不是“状态码变了没有”,而是状态码与内容是否重新一致。对改为 404 的地址,确认响应体不再输出正常内容结构;对修复内容的地址,确认同一模板下的其他地址也不再出现错误文案。若只验证单个地址,可能漏掉模板层面的同类问题。
另外,站点地图中移除某个 URL 并不保证它退出索引,站点地图不保证收录,反向也一样:从站点地图删除不等于移除。判断是否退出,应看该地址后续返回的状态码和响应体,而不是看它是否还在站点地图里。把这两件事分开记录,才能避免把“已从站点地图删除”误当成“已处理完成”。