先给结论:不要按“已发现”和“未发现”直接分组,而应先按页面模板、入链来源和内容生成时间做分层,再把每层随机拆成处理组与对照组。因为百度爬虫的发现行为往往由模板级或目录级因素驱动,按发现结果分组会把原因和结果混在一起,后续无论怎么改都难以判断是哪项改动起了作用。
假设你手上有 2000 个商品页,百度爬虫只抓了其中 600 个。最直观的做法是把这 600 个归为 A 组、剩下 1400 个归为 B 组,然后对 B 组做优化。问题在于,这两组从划分那一刻起就已经不是同一批页面了:被发现的页面很可能集中在某个分类目录、某套模板、某个上线较早的批次里。你之后观察到的差异,可能来自模板本身,而不是你的优化动作。
更麻烦的是,这种分组方式没有对照组。你改了 B 组,B 组发现率上升,但 A 组同期也可能因为站点整体被抓取而上升。缺少同期未改动的对照,就无法把变化归因到具体动作上。
可区分原因的证据通常长这样:如果未发现页面高度集中在某一个模板或某一个目录,说明问题更可能是结构或入口层面的;如果未发现页面分散在各模板、各目录,只是零星缺失,说明更可能是单页质量或链接深度问题。这两种判断导向完全不同的处理方向。
分层的目的,是让处理组和对照组在关键变量上尽量一致。对批量页面,建议至少考虑三个维度:
具体做法:先按模板把 2000 个页面切成若干层,比如详情页 1500 个、聚合页 500 个。在详情页这一层内,再按入链深度分成“浅层”和“深层”。然后在每个小格子里,用随机方式把页面分到处理组和对照组。这样两组在模板和深度上是可比的,差异才更可能来自你的改动。
假设你有 1200 个详情页,其中 400 个已被发现、800 个未发现。先按入链深度分:浅层 500 个、深层 700 个。在浅层里随机取 250 个作为处理组、250 个作为对照组;深层同样各取 350 个。对处理组统一增加一条从相关分类页指向它的内链,对照组不动。观察一段时间后,比较两组在百度爬虫抓取日志中的出现次数变化。这个例子中的数字只是说明分层与随机化的比较方法,不代表任何实际抓取比例或效果。
你面前通常有两个看似合理的选择。
做法一:对全部未发现页面统一加内链或统一改模板。 它成立的条件是,你已经通过日志或页面结构确认未发现页面的问题高度同质,比如全部缺少站内入口。代价是,一旦效果不理想,你无法判断是哪个环节的问题,而且全量改动会同时改变多个变量,后续很难回退到干净状态。
做法二:先分层,再只对处理组做改动,保留对照组。 它成立的条件是你有足够的页面数量,能在每一层里分出可比的组;页面太少时,随机分组可能仍然不均衡。代价是需要多一轮观察周期,短期内看到的是组间差异而不是全站数字。
选择依据可以落到一个动作上:先导出百度爬虫日志,按 URL 归类到模板和目录,看未发现页面是集中还是分散。如果集中度很高,说明问题在结构层,做法一可能更直接;如果分散,说明需要逐层验证,做法二更稳妥。这个动作的结果直接决定你下一步是改结构还是做分层实验。
第一,把站点地图当成收录保证。提交站点地图只是提供发现线索,百度爬虫是否抓取、是否索引仍是独立环节,不能用站点地图提交量代替发现率。
第二,用 robots.txt 做“临时移除”。robots.txt 限制的是抓取,不是索引移除;已索引的页面不会因为加了限制就自动消失,用它来清理批量页面往往会得到与预期不符的结果。
第三,观察窗口太短。抓取和索引之间存在时间差,处理组刚改完就下结论,容易把正常波动当成效果。建议在改动前后各留出足够观察期,并同时看处理组与对照组的相对变化。
第四,忽略抓取日志本身的噪声。某段时间抓取量下降,可能是站点整体响应变慢、也可能是爬虫调度变化,不能单独作为某一组处理失败的证据。要结合同期对照组的表现一起看。
把分层、随机分组和同期对照这三件事固定下来,你手上的批量页面问题就从“哪些没被发现”变成了“哪一层、哪一项改动带来了可比较的差异”,后续每一步调整都有依据可循。