先给结论:不要继续在同一个入口反复重试,而是把从“产生待提交URL”到“观察结果”的链路拆成若干可独立验证的环节,找出这次修复究竟改变了哪一环的输入或输出。修复动作本身常常顺带改掉了前置条件,于是原来被掩盖的异常才暴露出来。
两种情况的处理方向不同,但外观很像。可区分的原因大致有这几类:
判断方法:把修复前后的待提交URL列表各留一份快照,逐条比对差异。如果新异常只出现在新增或格式变化的地址上,多半是修复引入;如果新旧地址都出现且比例相近,更可能是被掩盖的问题浮出水面。这里要提醒一句:提交量或抓取量突然归零,并不能单独证明修复正确,它也可能是采集延迟、日志口径变化或上游任务未跑导致的。
与其盯着最终结果,不如给每一段留下可对比的证据:
拆开的意义在于:任何一段的异常都能被单独定位,而不是把“提交了但没收录”当成一个笼统问题。需要说明的是,站点地图不保证收录,robots.txt 的抓取限制也不等于可靠的索引移除,这两点常被误当作链路中的“开关”,实际它们只影响其中一段。
面对“修复A引出异常B”,常见决策有三种,各自成立条件不同:
这三种不是必须全选,很多情况下只有一种前提成立。比如当待提交集合规模很小时,逐条核对成本低,可以保留修复并人工处理B;当规模变大后出现例外,就说明规则本身需要改写,因为个别样本成立不代表规则可规模化照搬。
假设某站修复了URL拼接中的编码问题,把中文参数从一种编码统一为另一种。修复后,原先能正常提交的地址出现失败,而新格式的地址正常。此时不要急着回退。先取修复前后各一批地址,分别按同一口径提交并记录返回,再对照服务端访问日志。
如果失败只集中在旧格式地址上,说明下游仍在按旧格式消费,应改写提交段的适配逻辑;如果新格式地址的抓取记录里出现异常状态码,说明问题在抓取段而非提交段,应优先排查服务端响应。这个例子的数字与比例仅用于说明比较方法,不代表真实结果。
动作与结果的关系要记清:你做的每一次比对,都应该缩小下一次动作的范围。如果比对后范围没有缩小,说明拆得还不够细,或者证据口径不一致。
个别样本跑通,只能说明该样本的链路成立。规模化前至少要确认三件事:规则对边界输入是否稳定,异常是否有独立于主流程的观测方式,以及回退路径是否可用。缺少任何一项,都容易在下一次修复时重复“修一处、冒一处”的循环。另外,不同搜索引擎对提交与抓取的支持情况需分别核查,不能把一套结论直接平移。
当新异常出现时,先问它是修复引入还是被掩盖,再按生成、提交、抓取、结果四段留证据,最后在保留、改写、退出之间按前提取舍,这样依赖链才真正被拆开,而不是被暂时压住。