当一批永久重定向上线后,只有部分目标页面被搜索引擎发现,不能直接把“被发现”当成成功、把“没被发现”当成失败。更稳妥的做法是先按可核对的特征把页面分成处理组与对照组,再比较同一时间段内两组的抓取与索引变化;但如果整批页面共享同一批内链或同一张站点地图,对照组可能被“污染”,此时应改用同模板、同层级、不同目录的页面作对照,或者干脆放弃因果判断,只做分阶段观察。
“被发现”至少可以指三种不同状态:链接被爬虫跟进过、URL 出现在抓取日志里、以及最终进入索引并可被检索。三者不是同一件事。批量永久重定向之后,如果只有一部分新 URL 被抓取,常见原因包括:旧 URL 的内链尚未全部更新、站点地图仍指向旧地址、目标页所在目录的抓取预算被其他模板占用、以及部分重定向链过长导致爬虫中途放弃。这些原因指向的分组维度不同,所以第一步不是急着分组,而是先确定你手里能拿到哪一类证据。
可用的证据通常有三类:服务器访问日志中的状态码与爬虫标识、站点地图提交记录、以及站内链接图谱。如果只有站点地图记录,你只能按“是否在站点地图中”分组;如果同时有日志,可以按“是否被爬虫请求过旧 URL”和“请求后是否跟进到新 URL”做两级分组。证据粒度决定了对照组能划多细,划不细的时候强行分组只会得到无法解释的差异。
分组不是一次定死的,随着数据积累,每个页面都可能需要被保留在对照组、改写分组标签,或者退出对照。判断依据是页面在观察期内是否发生了与处理无关的变化。
取舍的前提是你能记录每个页面的状态变更时间。如果变更没有被记录,事后按结果反推分组,等于用结论挑样本,对照就失去意义。
批量永久重定向最容易出现的污染是:处理组和对照组共享同一批导航链接或同一张站点地图,爬虫顺着链接走的时候会同时触达两组,导致“处理效应”外溢。判断污染是否发生的可核对信号是:对照组页面在重定向上线后,抓取频率也出现了同向变化。
如果确认污染,有两个替代方案。一是改用同模板、同层级、但位于不同一级目录的页面作对照,前提是这些目录的历史抓取节奏相近,可以用上线前两周的日志做基线核对。二是放弃组间比较,改为同一组页面的前后对比,把重定向上线前的时间段作为自身对照,但要接受一个限制:季节性抓取波动无法与处理效应分离。
假设某站点把 400 个旧 URL 永久重定向到新 URL,观察两周后只有 120 个新 URL 被抓取。可以这样分组:
接下来要做的实际动作是:检查 B 组旧 URL 的响应头是否携带了正确的 Location,并核对 B 组所在目录是否在站点地图中被覆盖。如果 B 组中大部分页面的重定向链超过一跳,那么下一步应优先缩短链路,再重新观察 B 组是否进入抓取,而不是继续扩大样本量。
如果处理后 B 组抓取率上升而 A 组不变,说明链路长度或站点地图覆盖是主要瓶颈,下一步应把同样处理推广到 C 组。如果两组都没有变化,而对照组 B 的抓取频率也在下降,更可能是整站抓取节奏收紧,此时继续细分对照组没有收益,应转而检查服务器响应时间和站点地图的更新频率。如果 A 组抓取上升但索引未增加,说明问题已经从“被发现”转移到“被处理”,分组目标需要重新定义。任何一组数据归零都不足以单独证明重定向正确或错误,还需要排除日志采样缺失、爬虫标识识别错误等合理解释。