摘要
随着时间的推移,Google跟踪代码管理器dataLayer会被规则和标记过于复杂,特别是在AJAX密集的网站上 .
问题
我正在一个跟踪繁重的网站上实施GTM,并寻找以下问题的清洁解决方案 . 我将以Google Analytics为例 .
它允许您设置和使用4个宏进行事件跟踪:
-
类别{}
-
行动{}
-
标签{}
-
Value {}
值和标签是可选的,但dataLayer是持久的,不是吗?那么我该如何处理以下场景:
dataLayer.push({
'event':'gaEvent',
'gaEventCategory':'my-category',
'gaEventAction':'my-action',
'gaEventLabel':'my-label',
'gaEventValue':'my-value'
});
但是后来在同一页面上我必须跟踪另一个事件,但是没有Label和Value:
dataLayer.push({
'event':'gaEvent',
'gaEventCategory':'another-category',
'gaEventAction':'another-action',
});
如果我设置了一个类似“Event is gaEvent”的规则,那么我会关闭“Google Analytics”标记,该标记如下所示(此处使用HTML标记而不是内置标记):
<script type="text/javascript">
_gaq.push(['_trackEvent', '{{ga event category}}', '{{ga event action}}', '{{ga event label}}', {{ga event value}}]);
</script>
第二个事件将被推送到 _gaq
,前一个事件的标签和值 .
如何处理这类案件?
对于那些想知道的人,我需要能够在某些点触发同一事件上的不同标签,这就是为什么我想要这种“动态”解决方案,但是dataLayer像那样持久化会搞乱规则 .
编辑1:测试程序
这是我测试这个的方法 .
-
我在Chrome中安装了Google Analytics Debugger
-
我在调试模式下有GTM
-
加载网站后,在控制台中,我从描述中执行第一次dataLayer推送
-
我在GA Debug输出中看到GA事件是用4个值触发的
-
我从控制台进行第二次推送
-
GA Debug输出告诉我GA事件是使用新类别和操作触发的,但是先前已推送标签和值
这就是我所说的持久性 . 为了避免这种情况,我只能提出不同的事件类型,如 gaCustomEvent
, gaCustomEventWithLabel
, gaCustomEventWithOption
等,然后是每个事件的规则和标签 . 那你是同意吗?
3 回答
您可以将对象推送到dataLayer,其中包含与单个事件相关的所有信息,例如:
然后,您可以在GTM中设置相关的宏来收集和使用相关字段,这些字段不会被转移到任何将来的事件,因为只使用推入dataLayer的对象的最后一个值 .
我相信您的问题是在自定义HTML标记和规则_2520817中使用_gaq.push:
因此,当您执行dataLayer.push时,规则将被触发,从而导致自定义HTML标记将_gaq.push跟踪器发送到GA . 当您继续执行第二个dataLayer.push时,规则再次触发,但感觉它没有标签或值的值,它使用该dataLayer.push的标签和值的先前值 .
我会做的是:
设置一个名为events的新宏 - 这是一个Google Analytics标记,其中跟踪类型为event . 接下来放入事件跟踪参数的宏,并将标记设置为当前用于gaEvent(
{{event}} equals gaEvent
)的规则 .通过这种方式处理事件,您将使用GTM向GA发送事件的方法,并且您将阻止自己发送标签,值等附加信息 .
每个
dataLayer.push()
都是粒度,独立且触发带有匹配触发规则的标签 . 如果你希望你的第二个事件从第一个事件继承dataLayer变量,它可能最好在你的应用程序而不是GTM中处理 .另一种选择是在第二次推送时使用不同的事件名称,并使用宏来获取dataLayer变量的默认值 . 您可以配置GA事件跟踪代码,以侦听多个触发规则 . 这是任何一个,所以要么触发
_gaq.push()
.