把“已发现”和“未发现”的页面按一个可解释的变量分成两组,是最小可行的对照方法;但它只能产生候选原因,不能直接证明该变量就是收录差异的原因。若分组变量同时与站点结构、发布时间或内容类型高度重合,这个对照就会失效,需要换一种切分方式重做。
划分对照组之前,要先统一“被发现”指的是什么。是日志里出现过抓取请求,还是站点地图提交后返回了已处理状态,还是站内搜索或链接点击产生了访问?这三种口径对应的页面集合往往不同。如果一部分页面通过站点地图提交,另一部分只靠内链被动发现,那么两组之间的差异可能来自提交方式,而不是页面本身。
在缺少完整数据或权限的情况下,仍可执行的最小动作是:从现有可导出的日志或服务端访问记录中,筛出带搜索引擎爬虫标识的请求,按URL路径聚合,得到一份“至少被抓取过”的名单;再与站点地图或后台可见的页面清单做差集,得到“未被抓取”的候选集合。这个动作的结果决定了下一步:如果差集里大量是同一目录或同一模板生成的页面,说明分组变量应优先选目录或模板,而不是逐页内容特征。
常见的错误是把“已发现”和“未发现”本身当成两组,然后去比较两组的标题长度、字数、外链数,得出“标题短的更容易被发现”这类结论。这是在结果上分组,任何差异都可能是结果造成的,而不是原因。
可用的分组变量应当满足两个条件:在抓取发生之前就已确定,且两组之间只在这一项上有系统差异。适合作为切分依据的包括:
假设有 200 个批量生成的页面,其中 60 个被抓取、140 个没有。若这 60 个恰好都是列表页直接链接到的,而 140 个只能通过分页或站内搜索到达,那么“是否存在直接站内链接”就是一个可检验的切分变量。此时可以只改动其中一部分未发现页面的内链位置,观察后续抓取名单是否变化。这个动作的结果会告诉你:链接路径是否值得继续投入,还是应该转向检查页面本身是否可访问。
一个明确的反例是:分组变量与另一个更强变量完全重合。比如所有带直接内链的页面都是三个月前发布的,而所有没有内链的页面都是上周刚生成的。此时即使内链组被抓取比例更高,也无法区分是链接的作用还是时间的作用。遇到这种重合,要么按发布时间分层后再比较,要么放弃这个变量,改用能在同一时间段内产生差异的切分方式。
另一个会使结论失效的情况是抓取限制被误当成索引状态。robots.txt 中的抓取限制只约束爬虫访问,不等于可靠的索引移除;页面可能仍以其他方式出现在结果中。同样,站点地图提交不保证收录,站点地图里存在只说明你声明了该URL,不说明它已被处理。若把“已提交站点地图”直接等同于“应被发现”,对照组的基线就错了。
当样本量允许时,先按发布时间或模板分层,再在每一层内部比较有无内链、有无站点地图提交等变量的差异。这样可以把时间、模板这些干扰因素固定住。分层后如果某一层内仍然呈现一致的差异,这个变量才值得进入下一步验证;如果各层方向不一致,说明当前切分不足以解释现象。
需要明确的是,即使分层后差异稳定,也只能说明该变量与抓取差异相关,不能直接推出因果关系,更不能据此承诺收录结果。请求量或抓取量归零也有多种合理解释:可能是爬虫临时降低了该目录的抓取频率,可能是日志采集本身中断,也可能是页面返回状态发生了变化,单凭归零这一现象不能证明此前的处理正确或错误。
下一步动作应当是可回退的小范围改动:选择一组条件接近的未发现页面,只调整一个变量,例如为其中一部分增加来自已发现页面的直接链接,保持其他条件不变,然后在后续的抓取记录中对比两组名单变化。如果差异出现,再考虑扩大范围;如果没有差异,就回到可访问性和状态码层面继续排查,而不是继续加链接。