先给结论:当错误页面返回 200 时,不要只凭“状态码是 200”就认定它该被保留,也不要只凭“页面写着 404”就认定它该被移除。正确做法是把响应状态、正文内容、页面用途三者放在同一张核对表里逐项比对,先判断这个 200 是“内容仍然有效”还是“错误页被包装成了正常页”,再决定是保留、改状态还是做内容替换。下面用一个假设情境把决策过程走完。
假设某站有一批旧合作关系页面,合作已经结束,但页面里仍有一段对用户有用的历史说明。运维在服务器上做了统一跳转,把所有已下线的旧路径都指向一个通用提示页,而这个提示页本身返回 200。于是出现一个反常现象:路径已经不存在,但请求它得到的却是成功响应,正文写的却是“内容已不可用”。
此时要核对的核心不是“200 对不对”,而是响应状态所承诺的语义,与正文实际表达的内容是否一致。200 承诺的是“这个地址上有一份可正常访问的资源”,而正文说的是“这里没有你要的资源”。两者矛盾,才是需要处理的问题。
不要用浏览器地址栏的显示结果作为唯一依据。浏览器会渲染正文,但不会替你判断语义是否匹配。至少固定三类证据:
curl -I https://example.com/old-path,看返回的是 200、404 还是 410。这三类证据要能互相对照。如果响应头是 200,正文是错误提示,来源又是站内链接,那么下一步动作就明确了:要么让正文承担 200 的语义,要么让状态码承担“不可用”的语义,不能继续让两者互相矛盾。
同样是 200 加错误文案,成因不同,处理方式也不同。可以按下面的条件区分:
判断依据是正文与路径主题的对应关系,而不是文案里有没有“404”字样。第一种应改状态或做跳转;第二种要确认替代页是否真的承接了原内容;第三种优先改文案,而不是改状态。
状态一致性解决之后,还要回到业务判断:这段旧内容是否仍然值得保留。可以用一个简单的比较方法,而不是拍脑袋。
假设同一批旧路径有 100 条,其中 20 条仍有外部引用或站内入口,另外 80 条没有任何来源指向。对前 20 条,优先保留可用内容或设置指向新页面的跳转;对后 80 条,如果确认没有承接价值,再考虑返回明确的不可用状态。这个数字只是说明比较方法,不是真实统计,也不代表任何比例结论。
这里有一个容易走偏的动作:用 robots.txt 屏蔽这些路径。抓取限制不等于可靠的索引移除,被屏蔽的地址仍可能以其他方式出现在结果里,而且屏蔽之后你也更难观察它的真实响应。要退出内容,优先处理状态与内容本身,而不是先加屏蔽。
修改后要重新取证,而不是凭印象确认。具体动作是:对同一批路径再次请求响应头,确认状态码与正文语义已经对齐;再检查站内链接和站点地图,确认没有继续把用户和抓取引向已经退出的地址。站点地图不保证收录,它只表达你希望被发现的地址,所以地图里不应再保留已退出的路径。
如果某条路径返回了 410 或 404,但站内仍有多处链接指向它,那说明退出动作只做了一半。下一步应先清理入口,再观察这些地址的请求变化。请求量下降可以作为一个参考信号,但它不能单独证明处理正确,因为入口清理、缓存、外部引用变化都可能造成同样的下降。
面对“错误页面返回成功响应”这类问题,稳定的做法是每次按同一顺序核对:先取响应头与正文快照,再判断属于软 404、迁移未改状态还是误判,然后按页面是否仍有承接价值决定保留或退出,最后清理入口并复验状态与内容是否一致。把这张表固定成流程,比每次临时判断更能避免状态码和正文长期互相矛盾。