先看差异是不是“同一对象被拆成多行”造成的。如果报告的一行对应一个页面或一条记录,而实际对象是一个软件、一个版本或一个渠道,那么页数天然会大于对象数。此时不要急着删行,先决定去重口径:按对象合并,还是按页面保留。判断依据是后续动作——要做覆盖率统计就按对象合并,要做页面级问题定位就保留页面并标注归属。
按对象去重适合回答“有多少个软件被覆盖到”。代价是丢失页面差异,比如同一软件的产品页、下载页、帮助页被合并后,你无法看出哪一页内容重复或哪一页缺少转化入口。按页面保留适合回答“哪些页面需要改标题或补充说明”。代价是分子分母都变大,覆盖率会被低估,因为一个对象可能占多个页面。
选择条件可以拆成两条。第一条,看报告字段里有没有稳定的对象标识,例如软件名加版本号、内部产品编号或渠道加产品组合。有稳定标识时,按标识合并更可靠。第二条,看差异是否集中在少数对象上。如果只有少数对象出现多行,优先逐条核对;如果大面积出现多行,优先统一口径,再抽样检查。
实际动作是:在报告里新增一列“对象键”,用你确认过的字段拼出来,例如产品编号 + 渠道。然后按对象键分组,统计每组行数。行数大于一的对象单独列出来,不要直接删除。结果会告诉你差异来自哪里:是同一对象有多个页面,还是同一页面被不同查询条件重复抓取,还是对象键本身写错了。
这个动作会直接影响下一步。如果分组后大部分对象只有一行,说明差异是局部问题,可以进入逐条核对。如果分组后大量对象都是多行,说明报告粒度与对象粒度不一致,应该先调整导出或查询条件,再谈去重,否则你只是在结果层打补丁。
当你的后续动作是改页面标题、补充功能介绍、调整下载入口或排查重复内容时,页面就是处理单元。此时合并会掩盖问题。正确做法是保留页面行,同时增加“所属对象”列,让统计和操作分开:统计时按对象去重,操作时按页面执行。
例外情况是,如果多个页面指向同一对象且内容几乎相同,而你又不打算分别维护,那么可以合并为一个代表页面。但合并前要确认没有独立流量入口或独立转化路径,否则合并后可能丢失可操作的线索。这个确认动作本身就会改变下一步:有独立入口的页面进入保留清单,没有独立入口的页面进入合并清单。
假设某次查询得到 120 行页面记录,实际对象是 80 个软件。按对象键分组后,70 个对象各占一行,10 个对象各占多行。此时合理选择是:对 70 个单行对象直接统计,对 10 个多行对象逐条核对。核对后如果发现其中 6 个对象的多行只是同一页面的不同查询参数,就按页面地址去重;剩下 4 个对象确实有多个独立页面,就保留页面并标注对象键。这样得到的对象数是 80,页面数是 80 加上额外保留的页面,两个数字都能解释。
这个例子的关键不是数字,而是分组结果决定了动作顺序:先分组,再判断差异来源,最后才决定删行还是保留。反过来先删重再统计,你很难说清删掉的是重复记录还是独立页面。
去重完成后,至少检查两件事。第一,对象键是否有空值或明显异常值,空值行不能直接参与合并,否则会把不同对象并成一个。第二,去重前后用于判断覆盖率的分子分母是否同步调整。只改分子不改分母,会得到虚高的覆盖率;只改分母不改分子,会得到虚低的覆盖率。
如果报告来自外部工具,具体字段名称、导出选项和去重能力需要以该工具当前说明为准,不要假设某个按钮一定存在。你可以在导出后用自己的表格完成对象键分组,这一步不依赖工具是否提供去重功能。最后,把去重口径写进报告说明,下一次查询时沿用同一口径,差异才可比较。