当修复动作上线后出现新的异常,不要先回滚,而要把“修复目标—依赖条件—可观测结果”拆成一条链:先确认新异常是否由同一变更触发,再判断两条链是否共享同一处配置或同一批URL,最后用最小范围实验分离变量。若新异常只影响被修复的URL,说明依赖集中在页面层;若同时影响未改动URL,说明依赖上移到模板、规则或站点级配置。
假设一个情境:站点对某批栏目页做了抓取路径调整,原本希望解决这些页面长期不被抓取的问题,上线后发现另一批正常页面的抓取频次也下降。此时不要把它当作“修复失败”,而要问:两次异常是否落在同一层依赖上。
判断动作很直接:从新异常里各抽一个“被修复URL”和“未改动URL”,分别请求并记录返回状态、响应正文长度、是否被规则拦截。如果未改动URL也出现相同拦截特征,依赖链就在站点层,不应继续在单页模板里找原因。
常见取舍是:先回滚修复,还是先保留修复并隔离新异常。两者都成立,但条件不同。
选择回滚的条件是:新异常已经影响核心目录的抓取,且你无法在短时间内确认两条链是否共享规则。回滚的代价是修复进度归零,但能快速恢复一个已知状态,便于对比。回滚后要立刻记录回滚前后的同一批URL响应差异,否则下次仍会重复判断。
选择保留并隔离的条件是:新异常只出现在小范围URL,且你能把修复动作限制到更小集合。比如只对原目标目录保留新规则,其余目录恢复旧规则。代价是配置出现临时分叉,后续必须清理,否则分叉本身会成为新的异常来源。这个动作的结果决定下一步:若隔离后新异常消失,说明依赖在目录规则;若仍存在,说明还有站点层条件未拆开。
不要一次改动多个变量。取三个URL:一个是被修复且出现新异常的,一个是未改动但出现新异常的,一个是修复前就正常的对照。对三者依次做同一项检查,例如查看响应头、抓取状态、页面可访问性。若三者中只有被修复URL表现不同,触发者在页面层;若后两者也相同异常,触发者在共享层。
这里要提醒一个事实边界:robots.txt 的抓取限制不等于可靠的索引移除。即使某条规则让抓取量下降,也不能单独证明索引状态已经按预期变化;抓取量归零还可能是调度、服务器响应或外部链接变化造成的。站点地图也不保证收录,它只提供发现线索。HTTPS 同样不保证安全无漏洞或排名。把这些现象当作证据前,先确认它们是否与本次变更同时发生,以及是否有其他合理解释。
如果合并后原目标再次失败,说明两条链存在真实冲突,此时应把修复目标降级为更小范围,先保证不引入新异常,再逐步扩大。若合并后两者都正常,说明此前只是依赖顺序问题,下一步应把这次拆链过程固化为变更检查项,而不是继续追加新规则。
当同一变更连续两次引发不同异常,且每次异常都指向不同层级时,继续修补的代价会高于重新定义问题。此时应回到最初的目标:是要让某批URL被发现,还是要让它们被索引,还是要让它们获得展现。三者依赖的条件不同。若目标本身混在一起,任何修复都会牵动另一条链。把目标拆成可分别验证的句子,再决定是否保留当前修复,通常比继续调规则更有效。