先给有条件的结论:当同一批 URL 里只有一部分被搜索引擎发现,而你想知道差异来自哪里,最省事的划分方式不是按“已发现/未发现”分组,而是按你怀疑的那个变量分组,再在每组内部保留已发现和未发现两种结果。也就是说,对照组要围绕变量建,而不是围绕结果建。只有当这批页面除目标变量外几乎完全同质时,按结果分组才勉强可用。
把已发现页面放一组、未发现页面放另一组,看起来整齐,但它把所有差异都混在一起:上线时间、内链数量、模板、内容长度、是否在站点地图里、是否被 robots.txt 挡住、服务器对不同路径的响应是否一致。你最后只能得到“这两组不一样”,却不知道是哪个不一样造成的。
更麻烦的是,按结果分组会天然制造伪相关。比如未发现的那批恰好都是三个月前批量生成的,而已发现的都是最近改过的,你会误以为是“新旧”在起作用,实际可能是那批旧页面从来没有拿到过任何内链。结果变量本身就是待解释的对象,用它当分组依据,等于把答案写进了问题里。
先列出你手上真正能区分的候选变量,通常不超过四个。然后选一个变量做主轴,把整批 URL 切成若干层,每层内部再标记已发现与未发现。判断标准很简单:如果某个变量是原因,那么在同一层内部,已发现和未发现的比例应该接近;如果某个变量只是伴随现象,那么层与层之间的差异会一直存在。
curl -I 或日志确认每个 URL 返回的状态码一致,再谈其他变量。一个假设的例子:某批 400 个页面,其中 120 个已发现。你怀疑是内链问题,于是分成“有内链”和“无内链”两层。若“有内链”层里发现比例明显更高,而“无内链”层里几乎为零,那么下一步动作是给无内链层补上真实可爬取的链接,而不是去改内容。补完之后再观察同一层内的发现比例是否抬升,这决定了你是继续扩大补链范围,还是转向排查模板或响应差异。
最需要警惕的反例是:目标变量和另一个未纳入的变量高度重合。比如你按“是否有内链”分层,但所有无内链页面恰好也都返回了不一致的状态码,或者都被 robots.txt 的同一段规则挡住。这时分层看起来有效,实际测的是另一个变量。
另一个失效条件是样本量太小。如果某一层只有三五个 URL,已发现和未发现的比例波动可以很大,不足以支撑取舍。此时更稳妥的动作是先扩大样本,或者退回按单一变量做全量核对,而不是急着下结论。
还要注意,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。所以当某层“未发现”比例很高时,不要默认是站点地图没提交或 robots 写错了,先确认这些 URL 是否真的可被抓取、是否真的出现在可爬取的链接里。
完成分层后,只做一个动作:针对差异最大的那一层,补上你怀疑缺失的条件,然后重新观察同一层内部的发现比例。如果比例抬升,说明这个变量值得继续投入;如果不动,就换下一个变量,而不是同时改五件事。这样每一步的代价可控,也避免把多个变量的效果搅在一起。
如果所有层内部的已发现与未发现比例都接近,说明你选的变量不是主因,应该转向抓取日志和服务器响应,确认是否存在按路径或按参数区分的处理差异。这一步不做,后面的内容调整大多是在猜。