先给结论:如果重复触发已经影响到回传、去重或后续出价判断,优先保留修复前后的两套记录,并给它们加上可区分的时间边界和来源标记;只有在重复只发生在展示层统计、且不影响任何回传与结算口径时,才可以只留修正版。判断依据不是“数据干不干净”,而是这次重复会不会改变你下一步的预算、出价或归因决定。
转化事件重复触发通常出现在三个位置:落地页上的埋点被多次执行、服务端回传被重复发送、平台侧把同一事件按不同规则计入多次。三者对记录的要求不同。
区分方法很直接:去原始日志或回传日志里数一遍事件条数。如果原始条数就是两条,问题在上游;如果原始只有一条而报表是两条,问题在下游统计或去重规则。
保留修复前后两套记录不是免费的。它会让报表变复杂、让对账时多一层解释、让自动化脚本需要额外字段来区分版本。所以要先问:这次重复会不会改变一个即将做出的决定。
值得保留双份的条件:
可以只留修正版的条件:
实际动作上,比较稳妥的做法是:在事件表里加一列 record_version,修复前写入 pre_fix,修复后写入 post_fix,再配合事件时间戳。这样不需要维护两张物理表,也能在查询时随时切换口径。做完这一步,你下一步该做的是对比两个版本在同一时间窗口内的事件条数差,而不是立刻删掉旧数据。
假设某账户的表单提交事件在页面加载时绑定了一次,又在提交按钮点击时绑定了一次,导致同一用户提交一次却产生两条转化。修复方式是移除其中一处绑定。
修复前,回传日志里有两行相同的事件 ID;修复后,只剩一行。此时如果只保留修复后的记录,你会看到一个干净的转化数,但无法解释修复前平台为什么收到了双倍信号,也无法在平台侧出现异常波动时回溯原因。反过来,如果两套都留但不加版本标记,后续做周报的人可能把两套记录加在一起,反而制造新的重复。
所以这个例子里的合理动作是:保留两套,用 record_version 区分,并在报表默认查询里只取 post_fix,把 pre_fix 留作审计用途。这个动作的结果是,日常看数不受干扰,需要解释历史时又能还原现场,下一步的根因复盘才有据可依。
很多人修复完重复触发后,第一反应是把旧记录标记为无效或直接删除。这里有个容易忽略的点:旧记录里可能包含真实转化,只是被重复计数了。删掉整条记录,可能连那一次真实转化也一起删掉。
更稳的处理是区分“这条记录本身是否真实”和“这条记录是否应该计入当前口径”。一条重复事件里的第一条往往对应真实转化,第二条才是多余。你可以保留两条,只把第二条标记为 duplicate_of 指向第一条,而不是两条都删或两条都留。
需要说明的是,平台侧的去重规则、回传接口的当前行为以及审核要求都可能变化,具体以官方文档和后台实际说明为准。本文给出的只是记录结构上的取舍原则,不构成对任何平台现行功能的断言。
重复触发不会是最后一次。与其每次争论留不留旧数据,不如在流程里固定一条规则:凡是进入回传或结算口径的转化事件,修复前后都保留,并用版本字段区分;只影响内部展示的重复,修复后可以只留修正版,但原始日志保留至少一个可回溯周期。
这条规则的价值在于,它把“要不要留”从主观判断变成可执行条件。当你下一次遇到重复触发时,先查这个事件有没有进入回传或结算,答案就出来了,剩下的只是按既定字段打标和切换默认查询口径。