先别急着回滚。把“死链修复”拆成三个可独立验证的动作——目标URL变更、跳转规则生效、旧地址退出——再沿请求链逐段定位。多数情况下,异常不是修复本身错了,而是上游规则先改变了请求的落点,让原本正常的旧地址变成了新问题的入口。
死链处理通常依赖一条链:入口页或站点地图给出旧地址,服务器或CDN接收请求,重写规则决定去向,最终页面返回状态码。修复动作往往只改了其中一段,却让另一段暴露出来。
可区分的原因大致有三类。第一类是规则顺序:新加的跳转规则排在旧规则之前,把原本应返回410的地址也一并接管。第二类是缓存层:CDN或反向代理仍持有旧响应,源站已改但边缘节点未刷新。第三类是内容依赖:目标页虽然返回200,但它依赖的资源或接口已随旧页下线,页面实际不可用。
区分方法很直接:用带查询串的测试URL绕过缓存,直接请求源站;再对比边缘节点的响应。如果源站正常、边缘异常,问题在缓存刷新;如果两者都异常,问题在规则或内容依赖。
发现异常后,常见选择是保留旧规则、改写规则,或让旧地址退出索引。三者不是递进关系,适用条件不同。
选择依据不是“哪种更彻底”,而是“这条依赖链上还有谁在依赖它”。如果上游还有站点地图或内链指向旧地址,先改上游,再决定旧地址的去向。
假设某站把一批失效的产品页统一301到分类页。上线后分类页正常,但列表页出现空白。排查发现:列表页通过接口拉取产品数据,而接口的路径也命中了新加的跳转规则,被重定向到了分类页,返回的是HTML而非JSON。
这里的依赖链是:跳转规则 → 接口路径 → 列表页渲染。修复动作本身没错,错在规则匹配范围覆盖了非页面请求。
实际动作可以是:先给跳转规则加上内容类型或路径前缀约束,只对页面请求生效;再单独请求接口路径,确认返回的是数据而非跳转。这个动作的结果会直接决定下一步——如果接口恢复,列表页问题随之消失,无需回滚整批跳转;如果接口仍异常,说明还有另一条规则或缓存层在拦截,需要继续沿链排查。
请求量下降、抓取量归零或某个统计指标变化,都不能单独证明修复正确。它们还有别的合理解释:抓取预算被其他任务占用、日志采样口径改变、缓存命中率波动。要结合状态码分布、目标页可访问性和上游引用是否更新一起看。
站点地图不保证收录,HTTPS也不保证安全无漏洞或排名提升。这些是常见误解,在排查依赖链时容易把注意力引偏。真正需要确认的是:旧地址现在返回什么、新地址是否可用、上游引用是否已改。三者一致,修复才算闭环。
如果异常涉及多个搜索引擎,需分别核查各自的处理情况,不同引擎对跳转和状态码的支持与响应并不一致。把一条链拆开、逐段确认,比整体回滚或整体重做更能定位问题,也更容易判断下一步该改规则、刷缓存还是改上游引用。