先给出结论:不要按“已发现”和“未发现”直接分组,而要先按每个URL是否被站内链接、站点地图、重定向或历史外链指向来分层,再在每一层内部随机抽一半作为处理组、一半作为对照组。只有当两个组在“入口来源”这一维度上分布接近时,后续观察到的差异才更可能来自你做的改动,而不是来自页面本身被发现路径的不同。
假设你下线了一个旧栏目,批量返回404 not found,并保留了一批仍有价值的页面。几周后你会发现:其中一部分URL出现在抓取日志或被重新访问,另一部分则像从未存在过。这时最容易犯的错误是直接把“被发现的”当成处理组、“未发现的”当成对照组,然后比较两者的内容或外链差异。
这种分组的根本问题在于:分组变量本身就是结果。被抓取这件事可能正是你后续要测量的因变量,用它来分组会产生循环论证。
面对上述现象,通常有两种合理解释。
解释一:入口来源不同。被发现的URL可能仍被导航、正文链接、站点地图或旧外链指向;未发现的URL可能只存在于历史数据库里,没有任何当前入口。这种情况下,差异来自“有没有路通向它”,而不是页面内容好坏。
解释二:页面自身状态不同。被发现的URL可能返回了带说明的404页、保留了部分内容或做了301;未发现的URL可能直接返回空白404,或服务器响应不稳定。这种情况下,差异来自页面本身的可处理性。
两种解释会导向完全不同的动作:前者要补入口,后者要改响应和内容。
要区分上述解释,需要分别收集两类证据,而不是只看抓取结果。
如果入口证据显示两组差异明显,而响应证据接近,那么解释一更成立;反之则解释二更成立。如果两者都不同,说明存在混杂,需要先按入口分层再比较。
这里有一个常见误解需要澄清:robots.txt限制抓取不等于可靠的索引移除,站点地图也不保证收录。因此不能用“已加入站点地图”作为该URL一定被发现的证据,只能作为入口存在的一项记录。
具体操作可以按以下顺序进行。
这样做的结果是:处理组和对照组在入口分布上接近,后续如果出现抓取或访问差异,更可能归因于你的动作,而不是入口本身的不均衡。如果某一层样本太少,无法随机分配,就应把该层单独描述,不并入总体比较。
假设有200个旧URL返回404 not found,其中60个仍被导航链接指向,140个无任何当前入口。若直接比较“有入口的60个”和“无入口的140个”,你无法判断是入口起了作用,还是这60个页面本身内容更完整。
按分层做法:在“有入口”层内随机抽30个补充说明内容,另30个保持原样;在“无入口”层内随机抽70个补充站点地图入口,另70个保持原样。观察一段时间后,比较同一层内处理组与对照组的抓取日志变化。如果“无入口”层内处理组出现抓取而对照组没有,同时“有入口”层内处理组与对照组差异不明显,那么入口补充更可能是关键动作。
需要说明的是,抓取量或请求量归零并不能单独证明某个处理正确,它也可能来自服务器波动、日志采集中断或爬虫调度变化。因此比较时应同时看响应码分布和入口变化记录,而不是只看一个计数。
如果证据支持入口差异,下一步应优先为无入口但有价值的URL补充站内链接或站点地图,并把仍无入口的URL归入退出流程。如果证据支持页面自身差异,下一步应统一404页的响应与内容,再重新分层观察。无论哪种情况,都应在同一层内保留对照组,否则你无法把新的变化与原有差异分开。
最后提醒一点:不同搜索引擎对404、410和软404的处理方式需要分别核查,不能假设一家引擎的观察结果可以直接套用到另一家。对照组的价值正在于让你在不确定外部规则时,仍能通过组间比较做出相对可靠的判断。