先给结论:不要按“已发现/未发现”直接分组,而要先按页面是否具备被发现的必要条件分层,再在层内随机划分对照组。否则你比较的是两类本来就不该被同等对待的页面,结论会失真。下面用一个假设情境把决策过程走完。
假设某站改版后产生约五千个URL,其中一千二百个被某搜索引擎发现,其余长期停留在未知状态。团队想验证“把404页面统一改成410或保留404并加引导”是否影响发现速度,于是打算拿已发现和未发现两组做对比。这个设计有根本缺陷:已发现的那批很可能本身就在站点地图里、有内链、或曾被外部链接引用,而未发现的那批可能只存在于数据库导出中。两组在起点上就不可比。
更稳妥的做法是先做一次分层,把“是否具备被发现条件”当作分层变量,而不是当作结果变量。
对每个URL记录三类客观事实,而不是主观判断:
用这三项把五千个URL切成若干层。例如“有站点地图且有内链”是一层,“只有站点地图无内链”是一层,“两者都没有”是一层。分层之后,只有在同一层内部,已发现与未发现的页面才具备可比性。这一步的动作是导出一张分层表,它的直接结果是:你会看到某些层里发现率接近零,而那些层往往根本没有被抓取的入口,此时讨论404页面的处理方式没有意义。
在每一层内,把URL随机分成处理组和对照组。处理组施加你要验证的那个变化,例如把默认404响应替换为带站内搜索和分类入口的404页面;对照组保持原状。关键约束是同一层内两组只差这一个变量,站点地图归属、内链数量、目录深度都保持一致。
如果某一层样本太少,比如只有十几个URL,就不要在该层下结论,把它合并到条件最接近的层并注明合并理由。合并本身会影响解释力,这是必须接受的取舍。
发现量变化不等于处理生效。以下现象都有其他合理解释:
因此对照组的作用不是证明“处理有效”,而是给出同一时间窗口内的基线。若处理组和对照组同步上升,说明变化来自外部因素。这一步的动作是记录两个组在同一时间点的发现数量,其结果是你可以把处理效应和整体波动分开看。
这套分层对照在“页面数量有限、可逐条核查”时成立。当URL达到数十万级、且大量页面由参数动态生成时,逐条分层不再可行,只能按模板或目录抽样,此时结论只能推到被抽样的那类模板,不能推到全站。另外,robots.txt中的抓取限制只约束抓取行为,不等于可靠的索引移除手段;站点地图提交也不保证收录。不同搜索引擎对状态码和站点地图的支持情况需要分别核查,不能把一家的观察直接套到另一家。HTTPS同样不构成安全或排名的保证,它不该出现在这组对照的自变量里。
把这些边界写进实验记录,比事后解释异常更有用。下一步动作是:先完成分层表,确认每一层都有可抓取入口,再决定是否值得在该层内做对照;如果某层没有入口,优先补入口,而不是改404页面。