先给结论:不要急着在标签或代码里把重复触发“压掉”。正确顺序是先冻结一份修复前的原始事件样本,再决定是在采集层去重,还是在分析层按事件ID去重。前者改变后续所有数据的口径,后者保留历史并可回溯。选择取决于重复来源是否稳定、你是否还需要用旧数据做同比。
两种来源对应两种记录策略。采集端重复,通常表现为同一用户在极短时间内产生两条几乎相同的事件,时间戳接近、参数一致;回传端重复,常见于页面刷新、表单重复提交或回传接口被重试,事件之间可能间隔几秒到几分钟,且带有相同的业务单号或会话标识。
区分方法不靠感觉,靠证据:
这里有一个容易误判的点:请求量或回传量某天突然归零,不能单独证明去重逻辑生效了。也可能是标签未加载、回传接口报错或统计口径被改动。归零只是现象,必须配合原始日志和接口返回码一起看,才能判断是修好了还是断掉了。
当你能稳定复现重复,比如某个表单页在特定浏览器下必然触发两次,且业务上不需要保留这两条记录,可以在采集层加去重。典型动作是给事件加一个由业务ID加事件名拼成的唯一键,在发送前判断该键是否已存在。
这个动作的结果会直接影响下一步:去重上线后,新数据的转化量会下降。如果下降幅度与之前测得的重复比例大致吻合,说明修复方向正确;如果下降幅度远超预期,说明去重键设计过宽,把本应计为两次的真实转化合并了,需要回退并收窄键的组成。
代价要提前说清:采集层去重是不可逆的。修复之后,你再也拿不到修复前的原始重复数据,历史同比会断层。所以只有在确认旧数据不再用于对比、或已单独归档一份原始快照的前提下,才选这条路。
当重复偶发、来源不固定,或者你还需要用修复前的数据做月度对比,就不要动采集逻辑。改为在报表或数据集层面按唯一键去重,原始表保持原样。
具体做法分三步:
假设一个例子:某周原始记录显示转化120条,去重视图显示96条。若重叠期用同一规则回算修复前一周,原始130条对应去重后约104条,比例接近,说明重复率稳定,可以放心切换报表口径;若比例从20%跳到5%,则要先查清是重复真的减少了,还是唯一键在修复后变了。
无论选哪条路,修复前后都要能对齐。建议至少保留:事件发生时间、业务唯一ID、事件名、来源渠道标识、以及一个修复批次标记。修复批次标记用来区分“这条是修复前采集的”还是“修复后采集的”,否则两段数据混在一起,无法判断差异来自修复还是来自流量变化。
如果修复涉及回传接口,还要记录接口返回码和重试次数。重试次数本身就能解释一部分重复:返回超时后系统自动重试,是常见的重复来源,这类重复在采集层压掉会掩盖接口稳定性问题,更适合在分析层处理并单独监控重试率。
如果重复事件已经和真实转化混在同一张表里,且没有业务唯一ID,那么先不要做任何去重。此时任何去重都是在猜。正确动作是先补埋点,让新数据带上唯一标识,同时把旧数据整体标记为“口径不可比”,避免拿它和新数据直接做同比。这一步看起来慢,但能避免后续反复推翻结论。
另外,如果重复只出现在某个渠道的回传里,且该渠道本身支持去重配置,优先用渠道侧的能力处理,同时在自己的记录里保留一份未去重的原始回传日志。这样即使渠道侧规则调整,你仍有独立证据可以核对。