修复转化重复触发时,最稳妥的做法不是先删旧数据,而是先冻结一份修复前快照,再让修复后的数据写入新口径字段,两套记录并存一段时间。这样你能比较同一时间窗内事件数、去重后转化数和后端成交数,判断差异来自重复上报、页面重复加载还是回传链路重试,而不是把历史记录一并覆盖掉。
发现转化数突然高于预期时,常见的第一反应是代码坏了。但至少有两种解释都成立。
这两种解释对应的修复位置完全不同:前者改页面触发逻辑,后者改发送与接收端的幂等处理。如果只凭“数量变多”就删数据,很可能把真实转化一起删掉,后续再想还原修复前的对照样本就没有了。
要作取舍,先收集能区分原因的证据,而不是先定结论。
这些证据只能缩小范围,不能单独证明某一种原因。请求量、抓取量或某个统计归零,也可能来自统计口径切换、标签未加载或数据延迟,不能直接当作处理正确的证明。
面对已经重复的数据,有两种常见做法,各自成立的条件不同。
在原有转化记录上增加一个修复批次字段,把修复前的事件标为旧口径,修复后的事件标为新口径,保留原始时间戳和访客标识。适合以下情况:重复量不大、需要逐条追溯、后续还要做前后对比。
代价是查询时要额外过滤,报表口径容易混用;如果下游已经按旧字段汇总,需要同步说明字段含义。
修复后的转化写入一张新表,旧表只读保留。适合重复量大、需要快速恢复报表、且团队能接受两套表并行维护的情况。
代价是存储和口径维护成本上升,一段时间后必须明确哪张表是主口径,否则分析人员会各取一张表,得出不同结论。
假设某账户在修复前一周记录到 120 条转化事件,后端确认成交 80 单。若直接删除疑似重复记录,可能只剩 70 条,反而低于真实成交;若保留新旧两套并标注口径,就能看到 120 条事件、去重后 85 条、后端 80 单之间的差额,并据此判断还有多少重复未被覆盖。这个数字只是说明比较方法,不代表任何账户的真实水平。
无论选哪种做法,先执行一个动作:导出修复前的原始记录并冻结。导出内容至少包含事件时间、访客标识、转化类型、页面地址和当时使用的上报参数。冻结之后再做代码或回传调整,后续所有变化都能与这份快照对照。
这个动作会直接影响下一步:如果快照显示重复集中在某一类转化类型,就优先修那一类触发逻辑;如果重复分散在多种类型且时间间隔规律,就优先检查回传端的幂等与重试策略。没有快照,修复后只能看到“数量变正常了”,却无法说明正常来自修复本身,还是来自同期流量、预算或页面变化。
另外,修复上线后不要立刻把旧口径报表删掉。保留一个观察窗口,用同一时间范围分别统计事件数、去重后转化数和后端成交数,确认三者关系稳定后,再决定是否停用旧口径字段。广告投放与自然搜索是不同机制,转化数据修复不会改变自然结果的排名逻辑,也不构成任何排名保证。
保留记录不等于无限期保留所有原始明细。需要提前约定:哪些字段属于审计必需,哪些字段可以聚合后归档;谁有权修改口径字段;新旧口径并行多久。没有这些约定,双写会变成长期负担,打标记也会逐渐失去可信度。
如果重复事件涉及跨设备或跨登录状态,还要说明同一用户的识别依据是什么。识别依据不同,去重结果就会不同,修复前后记录的可比性也会下降。把识别规则和修复批次一起写进记录说明,比单纯保留两份数据更有用。