当死链测试工具报告某批旧地址全部返回 200,但页面内容明显是错误提示、空模板或占位文案时,先不要把它当成工具误报。200 只说明服务器接受了请求,不说明返回的是有效内容。核对一致性的核心动作是:把响应状态、响应体特征、渲染后可见内容三者分开采集,再判断这条旧地址应当保留、改写还是退出。只有三者指向同一结论时,才值得进入下一步处理。
错误页面返回成功响应,通常落在三种情形里,处理方向完全不同。
三者的共同点是状态码无法单独作为判断依据。区别在于:软 404 说明该地址应当退出;空壳页说明需要决定改写还是合并;错误落点说明重定向目标需要重新选择。先归类,再谈取舍。
第一轮采集响应层信息:请求旧地址,记录状态码、响应头中的内容类型、响应体长度、是否有 noindex 指令。这一轮不执行脚本,看到的是服务器直接吐出的内容。
第二轮采集渲染后信息:让页面执行完脚本,记录可见正文的字符数、是否包含错误提示词、主要标题与原始页面主题是否相关。这一轮看到的是用户实际读到的内容。
把两轮结果并列后,会出现四种组合,每种对应不同动作:
这里有一个容易忽略的动作:在响应头里检查是否已经带了 noindex。如果错误页面已经带 noindex,即使返回 200,它的索引风险也已被削弱,处理优先级可以降低;如果没带,软 404 就是需要优先处理的对象。这个检查会直接改变下一步是“立即改状态码”还是“先排期改写”。
判断依据不是页面数量,而是这条旧地址是否还有承接价值。
保留成立的条件:旧地址仍能对应一个真实存在的主题,站内没有更合适的替代页面,且该主题仍有被检索的可能。此时要做的是补齐内容,而不是改状态码。
改写成立的条件:旧地址的主题已经被新页面覆盖,但旧地址本身有外部指向或历史访问。此时可以把旧地址做成指向新主题的聚合页,或把内容合并进新页面后对旧地址做 301。注意,改写后仍要复核新落点的状态与内容是否一致,否则只是把软 404 换了个位置。
退出成立的条件:旧地址对应的服务、合作或内容已经彻底终止,且没有可承接的替代主题。此时应返回 404 或 410,并移除站内指向它的链接。如果只是因为担心影响访问量而保留一个空壳页,那属于把问题延后,不是解决。
需要说明的是,robots.txt 的抓取限制不等于可靠的索引移除。对已经返回 200 的软 404 页面加一条 Disallow,既不能保证它从索引中消失,也会让后续核对变得更困难,因为抓取被挡住了。同理,站点地图里保留这些地址也不保证它们被正确处理。索引移除要走页面级的明确信号,而不是靠抓取限制。
假设某站有三条旧合作方页面,合作已结束,页面分别返回 200。采集后发现:A 页正文只剩“合作已结束”,响应体不足 200 字符;B 页正文完整介绍了一个仍存在的行业概念,只是不再提具体合作方;C 页跳转到首页。
按上面的条件判断:A 没有承接价值,应返回 404 并清理站内链接;B 的主题仍有检索可能,应保留地址、删去合作方信息、补全概念内容;C 的落点与原始意图不符,应改为指向对应栏目页而非首页。
处理完成后,用同一套两轮采集再跑一遍,确认三条地址的状态、响应体和渲染内容已经指向同一结论。这个复核动作本身就是判断处理是否完成的依据:如果 A 变成了 404,B 的正文与主题重新相关,C 的落点与栏目一致,那么这一批就可以关闭;如果其中任何一条仍然状态与内容不一致,就回到对应分支继续处理。
这类问题的根源在于,很多旧系统在内容不存在时并不返回错误状态,而是渲染一个通用模板并返回 200。死链测试工具能发现状态异常,但状态正常时它不会报警,所以需要额外补一层内容核对。
可执行的做法是:对每批准备退出的旧地址,固定执行“响应层采集 → 渲染层采集 → 四象限归类 → 按条件选择保留、改写或退出 → 处理后复核”。其中响应头是否带 noindex 会直接影响处理顺序,正文与主题是否相关会直接影响保留还是退出。把这两个判断点固定下来,就能避免把“返回 200”误当成“页面正常”,也能避免在错误页面上继续投入改写成本。