先接受一个前提:旧实验复现失败,不等于当初的结论作废,也不等于必须全部丢弃。对alexa排名查询这类历史数据,你手里通常只剩一张截图、一段笔记或一份导出表,缺少当时的查询时间、口径和完整排名区间。此时应把结论降级为“有条件成立”,并写清复现失败卡在哪一步。具体做法是:以你手中那份资料为对象,逐项标注可核验部分、不可核验部分和替代解释,最后只保留那些不依赖已消失入口也能成立的判断。
复现失败通常有三种可区分的原因。第一种是入口变化:当初通过某个页面能查到的数值,现在同一路径不再返回相同内容。第二种是口径变化:排名对应的时间粒度、统计范围或更新周期与当时不同。第三种是资料本身残缺:你只有结论,没有查询条件。三者的处理方式不同。
区分方法很直接:把旧记录里的每个字段列出来,逐项问“这一项现在还能独立验证吗”。如果只有排名数字、没有日期和查询对象,那属于资料残缺,补再多新数据也无法复原旧实验。如果日期和对象都在,只是入口不可用,那属于入口变化,可以寻找同一历史时点的其他记录做交叉参照。如果是同一入口返回的数值含义变了,那属于口径变化,旧结论只能限定在旧口径下使用。
这一步的实际动作是给每个字段标上“可核验”“不可核验”“口径存疑”三种状态。标记完成后,你会发现问题往往集中在少数几个字段上,而不是整份资料都不可用。下一步的取舍就围绕这几个字段展开。
复现失败后最容易犯的错误,是继续用原来的肯定句式写结论。更稳妥的做法是把结论改写成条件句,让读者知道它在什么前提下成立。例如原来写“该站点排名进入前若干名”,可以改为“在旧记录所载的查询日期与统计口径下,该站点排名进入前若干名;该口径现已无法复现”。
改写时保留三类信息:原始数值、原始条件、复现障碍。原始数值是资料里实际写下的内容,不要四舍五入或换算。原始条件是日期、查询对象和当时使用的口径描述。复现障碍要写具体,比如“原查询入口当前不可访问”或“缺少当时的统计范围说明”,而不是笼统写“数据已失效”。
这样改写之后,结论仍然可用,但用途变了:它不再支持“现在排名如何”的判断,只支持“当时记录显示什么”的判断。如果你后续要做趋势对比,就必须另找同一口径下的连续记录,不能拿旧结论直接对接新数据。
假设你手里有一份旧笔记,写着某站点在某个时间点排名约为某数值,但没有写明查询入口和统计范围。按上面的流程处理:
这个例子的数字和站点都是假设,只用于说明标记方法。走完这一步你会发现,真正能保留的结论比预想的少,但每一条都站得住。接下来是否继续追查,取决于这份结论要支撑什么决定:如果只是内部存档,到此即可;如果要对外引用,就需要补充同一时点的其他独立记录。
是否继续追查,看两个条件。第一,旧结论是否影响一个仍然有效的判断。如果它只是历史记录的一部分,封存即可;如果它被用来支持某个现行结论,就必须追查或明确降级。第二,是否存在同一时点的独立资料。如果存在,可以做交叉参照;如果不存在,继续追查只会得到新的不可核验材料。
封存时建议在资料上写明封存理由和复查条件。复查条件可以写成“若出现同一时点的独立记录,则重新比对”。这样以后有人拿到这份资料,不会误以为它是当前有效结论,也不会重复你已经做过的无效尝试。
需要提醒的是,请求量、抓取量或某项统计归零,都不能单独证明旧结论错误或入口已永久消失。归零还可能有采集范围调整、访问路径变化、资料未覆盖等解释。在没有排除这些解释之前,只把归零当作一条线索,而不是结论。
如果你要把这份处理结果交给别人,至少包含以下内容:
这份交付物不承诺旧结论仍然有效,也不假装复现成功。它的作用是让下一个人能看出哪些判断有依据、哪些只是记录,从而决定是否值得继续投入。做到这一点,旧实验即使无法复现,也仍然留下了可用的有限结论。