先看差异来源:如果报告页数大于实际对象数量,多数情况是同一对象被多个入口重复计入,而不是工具算错。去重前要先判断重复是“同一对象多次出现”还是“不同对象被合并成一条”,两者的处理方向相反。下面按样本量大小分两种情况说明。
当对象数量在几十条以内时,逐条核对比写脚本更快,也更不容易误删。做法是把报告导出后按主键排序,主键优先选稳定标识,例如完整域名、备案主体名称或统一编号,而不是标题或页面名称。排序后相邻行如果主键相同,再看路径、参数或子域是否只是同一对象的不同入口。确认后保留一条、标注其余为重复来源,而不是直接删除,这样后续复查时还能追溯。
这一步的实际动作是产出一份“保留—合并—待定”三列清单。待定项通常来自主键写法不统一,例如带与不带 www、大小写混用、末尾斜杠有无。把这些待定项单独列出后再决定归一化规则,能避免规则误伤正常对象。如果待定项占比很高,说明问题出在查询对象定义阶段,而不是去重阶段,应先回到对象范围重新对齐。
对象数量上升到几百条以上时,人工比对不再可行,需要先归并主键再计数。常见做法是提取主键字段、统一大小写、去掉协议与末尾斜杠,然后按主键分组,组内保留一条代表记录。这样处理后页数会明显下降,下降幅度取决于重复入口的比例,而不是取决于工具本身。
但归并主键会带来一个反向风险:不同对象可能被错误合并。例如同一主域下的不同子域如果承担不同业务,按主域归并就会把两个真实对象压成一个。因此需要一份例外白名单,把必须独立计数的子域或路径单独列出,不参与主键归并。白名单的判定依据是业务归属,而不是字符串相似度。
www、末尾斜杠:归并主键即可,无需白名单。去重前最好先收集能区分原因的证据,而不是凭页数差直接下结论。可以对比同一对象在不同入口下的标题、正文首段、状态码和最后更新时间:如果这些字段高度一致,重复更可能是入口差异;如果标题或正文明显不同,重复更可能是不同对象被归到了同一主键下。两种情况的处理方式不同,前者合并,后者拆分。
还要注意,页数下降本身不能证明去重正确。抓取量或报告条目数归零,也可能来自查询范围缩小、时间窗口变化或对象过滤条件改动,而不是重复被清干净。要确认去重是否成立,需要同时对照去重前后的主键集合,看减少的条目是否都能对应到已识别的重复来源。
假设某次查询报告显示120条,人工核对后确认实际独立对象约80个。按主键归并后得到78条,另有6条进入待定、36条被标记为重复来源。这个结果说明归并规则覆盖了大部分重复,但待定项仍需人工判断。此时不应直接把78当作最终数量,而应先处理待定项:能归并的归并,不能归并的补进白名单,最后再重新计数。最终数量可能高于78,也可能不变,取决于待定项的性质。
如果待定项处理后数量反而上升,说明之前的主键归并过宽,需要收紧规则并复查白名单。这个来回调整的过程本身就是判断依据,比单次计数结果更有参考价值。
无论样本大小,去重完成后都应保留三样东西:原始报告、归并规则说明、例外白名单。这样下次查询对象范围变化时,可以快速判断差异是新产生的重复,还是规则本身需要调整。如果只保留去重后的数量,后续出现不一致时无法定位原因。
最后要明确适用边界:上述方法适用于同一查询口径下的对象计数,不适用于跨工具、跨时间窗口的直接对比。当报告页数与实际对象数量不一致时,先去重、再计数、后复查,比先争论哪个数字正确更能推进下一步。