作为电商企业主或服务提供商,我们在管理和优化线上表现时,常常会面临诸多挑战。其中,跟踪与分析中最大的问题之一就是重复事件的问题。
要成功发展业务或服务,了解用户行为、流量状况并分析准确的数据至关重要。然而,当重复事件被记录时,会生成误导性的报告,并对决策产生负面影响。这不仅影响营销策略,还可能导致广告支出浪费以及错误的业务洞察。
在今天的文章中,我们将详细讨论重复事件跟踪问题,并探讨为何解决这一问题对于电商业务或在线服务的成功至关重要。

是的,我们现在明白,对于依赖准确分析的任何企业来说,重复事件跟踪都是一个严重问题。当这种情况发生时,通常会出现两种常见场景:
一:同一页面上记录重复事件——有时由于技术因素,同一事件在单个页面上会被触发多次。
二:页面刷新时触发事件——在许多情况下,每当用户刷新页面时,一个新事件会自动推送到 dataLayer,Google Tag Manager(GTM)会将其记录为新的事件。
这两种情况都会带来重大问题——尤其是在“购买”事件等关键事件上。试想,如果分析数据显示同一订单被重复计入购买,这将导致收入报告被夸大、ROAS 计算错误、广告支出浪费,以及决策所依赖的数据失真。
通过 Google Tag Manager 修复问题:同一页面上记录的重复事件
让我们从第一种情况开始:同一页面上记录重复事件。此问题可能由多种原因引起,如果不解决,会影响报告的准确性。
以下是由于技术因素,导致同一事件在单个页面上会被触发多次问题的最常见的原因:
<1> GA4 被安装了两次(GTM + 后端代码)
-
有时,企业通过 Google Tag Manager (GTM) 设置 GA4,同时又在网站后台直接安装了 GA4 代码。
-
结果,同一事件会被触发两次——一次来自 GTM,一次来自硬编码的 GA4 标签。

<2> 自定义网站的后端问题
-
如果您的网站是自定义开发的,后端逻辑错误可能会意外将同一事件多次推送到
dataLayer。
-
这会导致事件被重复记录。
<3> 在 GTM 和 GA4 中都创建了事件
-
另一个常见错误是先通过 GTM 发送同一事件,然后在 GA4 中使用“创建事件”功能重新创建该事件。
-
这种设置会导致 GA4 将事件记录两次。

<4> 插件或第三方应用
-
如果您使用第三方插件或应用(例如 Shopify、WordPress、WooCommerce 等的电商插件),它们可能已经在发送某些事件。
-
当您在 GTM 中也配置了相同事件时,就会导致事件重复。
要解决同一页面上的重复事件,需要逐一排查并修复每个问题。
<1> 首先,如果您的 GA4 已通过 GTM 安装,请从网站后台移除 GA4 代码。
<2> 对于因后端逻辑导致重复的自定义网站,请让您的开发人员确保事件只被推送一次。
<3> 如果您在 GA4 和 GTM 中都创建了相同事件,请删除 GA4 中的事件,并将 GTM 保留为主要来源。
大多数问题需要手通过以上方法手动解决,但是在技术问题或插件仍然触发重复事件的情况下,可以使用 GTM 的过滤器或条件来阻止重复事件。因为GTM 可以处理技术层面的操作。
<4> 使用 GTM 的过滤器或条件来阻止重复事件
如果您在“加入购物车”或“购买”中发现重复事件,请打开 Google Tag Manager,选择相关标签,并向下滚动到“高级设置”部分。在这里,调整标签触发选项以防止标签多次触发。

默认情况下,“每个事件一次”(Once per event)意味着每次事件发生时,标签都会触发。将其更改为“每页一次”(Once per page)可确保标签在每次页面加载时只触发一次,无论 dataLayer 中相同事件出现多少次。
修复页面刷新触发的事件
页面刷新导致的重复事件是另一个重大问题,尤其是“购买”事件。即使修复了同一页面的重复问题,刷新页面仍可能再次触发事件,从而导致数据不准确。为防止这种情况,我们需要让 GTM 能够检测页面是否已刷新,并阻止重复事件。这可以通过在 GTM 中使用自定义解决方案来实现。
操作步骤如下:
进入 GTM → 点击“变量” → 创建新的用户定义变量 → 粘贴代码


function(){
return window.performance.getEntriesByType('navigation').map(function(nav){ return nav.type}).includes('reload')
}
现在更改触发器设置 → 从“所有自定义事件”中选择“某些自定义事件” → 选择您创建的变量并设置条件。

工作原理:
-
检查页面加载是否为刷新。
-
如果是刷新,可以阻止 GTM 再次触发该事件。
-
本质上window.performance.getEntriesByType(‘navigation’)
会返回页面加载类型:“reload”、“navigate”、“back_forward”等。
感谢您的支持。如遇任何问题或有任何疑问,请随时联系我们。