先承认一个事实:爬虫控制里的修改很少只影响一条路径。robots.txt 里放开一个目录,可能让原本被挡住的参数页重新进入抓取队列;站点地图里补上被误删的 URL,可能让本就靠内链发现的老页面被重新排队。修复动作本身不制造异常,它只是把之前被压住的依赖暴露出来。要拆开这条链,先别急着回滚,而是把“谁依赖谁”写清楚:入口依赖、放行依赖、渲染依赖、输出依赖,四层分开看,才能判断这次异常是修复的直接结果,还是被修复动作唤醒的旧问题。
一个常见场景是:之前为了压住低质参数页,在 robots.txt 里挡了某个带查询串的目录。后来发现部分正常页面也被误伤,于是把整段 Disallow 去掉。结果核心页面抓取量没有明显变化,反而是大量带 ?sort=、?filter= 的变体先被访问。直觉会认为“放开等于放行核心”,但实际顺序往往由内链和站点地图决定,不由修复者的意图决定。
这里有两个都能成立的解释:
不要靠“感觉抓取变多了”来判断。把证据分成三组:
假设一个短例子:某站把 /search 目录从 Disallow 中移除,第二天日志里出现大量 /search?q= 访问,但核心分类页没有增加。此时先查站点地图:如果站点地图里本来就没有 /search?q=,那这些访问更可能来自站内搜索框的链接;如果站点地图里包含这些参数页,那就说明站点地图和 robots.txt 的依赖关系没有同步,修复只改了入口规则,没有改输出清单。
一个可执行的动作是:不要一次性放开整个目录,而是先恢复一条最小路径。例如只允许核心分类页所在的路径,同时继续挡住参数页。观察日志里核心页是否被重新抓取。如果核心页恢复,说明之前的异常是规则误伤;如果核心页仍然不动,说明依赖链的下游还有问题,比如内链被改、站点地图未更新、或页面需要渲染才能输出内容。
这个动作的结果会直接影响下一步:
注意,robots.txt 的抓取限制不等于可靠的索引移除。放开规则后,页面可能被抓取,但不代表会被索引;站点地图也不保证收录。把这两件事分开,才能避免把“抓取异常”误判成“索引异常”。
如果异常表现为服务器压力骤增、参数页大量 5xx、或核心页被挤占带宽,回滚是合理的止血动作。但回滚后要记录:回滚的是哪一条规则、回滚后哪些路径恢复、哪些路径仍然异常。如果回滚后核心页依然不抓,说明问题不在这次修复,而在更早的依赖环节。
如果异常只是参数页被多抓,而核心页没有受损,可以继续拆,不必回滚。此时把参数页单独分组,用独立的规则或输出控制处理,而不是把整个目录重新挡死。挡死会再次误伤核心页,形成循环。
拆依赖链的终点不是“让抓取量归零或暴涨”,而是让每一层依赖都有明确的证据:入口是谁提供的、放行规则改了哪一条、输出返回了什么、下一步该动哪一层。缺少任何一层,修复都会变成新的异常来源。