先给结论:不要在同一轮里同时改抓取规则、页面输出和站点结构。把“修复动作”当成变量,把“收录时间变化”当成结果,先找出修复动作依赖了哪些上游条件,再按依赖方向逐段回退。只有当你能指出哪一段被改动、哪一段没被改动、两者之间隔着什么中间环节时,才可能判断新异常是修复的副作用,还是原本就存在的另一条问题被暴露出来。
假设你为了处理一个页面长期不收录,调整了 robots.txt,让某个目录重新可抓。随后发现另一批原本正常的页面收录时间被拉长。此时不要急着把 robots.txt 改回去,先做一次依赖拆解:
这四段是串联关系,但串联不等于因果。robots.txt 放行只影响抓取许可,不直接决定索引结果;站点地图提交也不保证收录。因此,如果新异常出现在索引层,而你的修复只动了抓取层,就要先怀疑中间环节被间接改变,而不是直接认定修复动作有错。
最实用的办法是做一份改动前后对照,而不是凭感觉判断。以你手上的一个页面为例,记录以下字段:
如果第 1 项变了,第 2、3、4 项也变了,说明你的修复动作已经穿透了多层依赖,新异常很可能是连带结果。如果第 1 项变了,但第 2、3、4 项完全没变,那么新异常更可能来自另一条独立问题,只是恰好在这段时间显现。注意,抓取量或请求量下降不能单独证明你改错了,它也可能是抓取预算重新分配、站点整体更新频率变化,或者同期有别的规则上线。
当你确认修复动作已经穿透多层时,回退要按依赖方向来,不要一次性把所有改动还原。具体动作是:
这个动作的结果会直接决定下一步:若回退后新异常缓解,下一步不是永久撤销,而是把放行范围缩小到单个目录或单个 URL 模式,再观察收录时间是否恢复。若回退后毫无变化,下一步应检查站点地图是否因为规则变化产生了重复 URL,或者页面本身是否在放行后暴露了重复内容。每一步只改一个变量,才能把依赖链拆开。
假设某站点原本禁止抓取 /tag/ 目录,后来为了处理标签页不收录,改为允许抓取整个 /tag/。随后发现文章页的收录时间被拉长。按依赖链拆解:
/tag/ 放行后,抓取请求可能被大量标签页占用。这时正确的动作不是立刻把 /tag/ 重新禁止,而是先只保留标签页的放行,同时把站点地图中的标签页条目暂时移除,观察文章页收录时间是否恢复。如果恢复,说明问题在发现层的优先级分配;如果不恢复,再检查标签页是否与文章页产生了重复标题。这个例子中的数字和目录名都是假设,目的是说明比较方法,不是真实项目结论。
回到你正在处理的那个页面:先写下这次修复到底改了哪一条规则,再列出这条规则影响到的所有下游环节。如果下游环节超过两个,就不要在同一轮里继续修第二个问题。先让第一个修复单独运行,确认收录时间的变化方向,再决定是否进入下一层。百度收录时间本身是一个结果指标,不是原因指标;把它当成观察窗口,而不是判断依据,你才更容易在修复引发新异常时找到真正的依赖断点。