核心做法是先把重复触发当成数据链路问题而不是报表问题:在修复前冻结一份原始事件样本,修复后用同一套标识重新对账,并明确哪些转化进入出价信号、哪些只留在审计记录里。这样做的目的不是让数字变好看,而是让修复动作本身可追溯,避免把修复前后的数据混在一起做预算和出价判断。
重复触发可能来自三个不同位置,处理方式完全不同。第一层是页面上的转化代码被多次加载,例如同一容器里同时存在硬编码和标签管理器版本;第二层是事件本身被多次发送,例如表单提交后用户刷新页面、或成功页被回退再进入;第三层是回传链路重复,例如服务端回传和前端像素同时上报同一笔转化。
区分方法很直接:取一小段原始日志,看同一笔业务订单号对应几条事件记录、时间戳间隔多少、来源标识是否一致。如果同一订单号在几秒内出现多条、且来源标识相同,多半是页面层重复;如果来源标识一个是前端、一个是服务端,则属于回传链路重复。这一步的结论决定了后面是改代码、改触发条件,还是改回传去重规则。
在动任何代码或配置之前,先导出一段原始事件数据并留存。建议包含这些字段:业务订单号或用户标识、事件时间戳、来源标识、转化名称、以及当时上报的数值。导出时间范围要覆盖重复触发明显的那几天,并且单独保存,不要覆盖。
这份冻结样本的作用是修复后的对照基准。没有它,修复后你只能看到总数下降,却无法判断下降来自去重生效,还是来自转化本身变少。一个常见误判是:修复后转化数腰斩,就认为去重成功,但实际上可能是修复过程中误伤了正常上报。冻结样本能让你逐笔核对,而不是只看总量。
按前面判断的层级选择动作,并同步记录改了什么、何时生效。
每做一步,都在冻结样本上标注对应的修复批次。这样修复后重新导出数据时,你能按时间切分出修复前、修复中、修复后三段,而不是笼统地比较前后两个总数。
假设某账户的转化事件以订单号为业务唯一键,修复前同一订单号平均产生两条上报。修复时约定只由服务端回传,前端不再上报。可以这样对账:
如果 B 明显低于 A,而流量和预算没有同步下降,就要怀疑修复动作误伤了正常上报,而不是去重成功。这个例子的数字仅为说明比较方法,不代表任何真实账户表现。
修复期间不建议立刻把全部转化都喂给出价系统。更稳妥的做法是:修复前已确认的重复数据只留在审计记录里,不参与出价;修复后经对账确认的唯一转化,才逐步恢复为出价信号。判断标准是这笔转化能否对应到唯一业务键,且来源标识单一。
这个取舍会影响下一步:如果过早把未去重的数据送出,出价系统会按虚高转化量分配预算,修复后真实转化下降时预算分配已经偏离。反过来,如果长期不恢复任何转化信号,出价又失去优化依据。因此需要按批次恢复,每恢复一批就观察一段时间的转化量和成本走势,再决定是否继续。
如果修复后按业务键去重仍与预期不符,先排除几个合理解释:统计口径是否包含不同转化名称、导出时间范围是否与修复时间重叠、业务侧订单号是否存在一单多付或退款。请求量或某项统计归零,并不能单独证明去重正确,也可能是上报通道整体中断。此时应回到冻结样本,逐笔比对时间戳和来源标识,而不是直接下结论。
把这些记录保留下来,后续无论调整出价、预算还是落地页,都能说清某个时间点的转化数据是修复前口径还是修复后口径。这比单纯追求一个干净的总数更有用。