Google跟踪代码管理器dataLayer持久性

Ale*_*tov 4 javascript tracking google-analytics google-tag-manager

摘要

随着时间的推移,Google跟踪代码管理器dataLayer会被规则和标记过于复杂,特别是在AJAX密集的网站上.


我正在一个跟踪繁重的网站上实施GTM,并寻找以下问题的清洁解决方案.我将以Google Analytics为例.

它允许您设置和使用4个宏进行事件跟踪:

  • 类别{{ga event category}}
  • 行动{{ga event action}}
  • 标签{{ga event label}}
  • 价值{{ga event value}}

值和标签是可选的,但dataLayer是持久的,不是吗?那么我该如何处理以下场景:

dataLayer.push({
  'event':'gaEvent', 
  'gaEventCategory':'my-category', 
  'gaEventAction':'my-action',
  'gaEventLabel':'my-label',
  'gaEventValue':'my-value'
});
Run Code Online (Sandbox Code Playgroud)

但是后来在同一页面上我必须跟踪另一个事件,但是没有Label和Value:

dataLayer.push({
  'event':'gaEvent', 
  'gaEventCategory':'another-category', 
  'gaEventAction':'another-action',
});
Run Code Online (Sandbox Code Playgroud)

如果我设置了一个类似"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>
Run Code Online (Sandbox Code Playgroud)

第二个事件将被推到_gaq前一个事件的标签和值.

如何处理这类案件?

对于那些想知道的人,我需要能够在某些点触发同一事件上的不同标签,这就是为什么我想要这种"动态"解决方案,但是dataLayer像那样持久化会搞乱规则.

编辑1:测试例程

这是我测试这个的方法.

  • 我在Chrome中安装了Google Analytics Debugger
  • 我在调试模式下有GTM
  • 加载站点后,在控制台中,我将从描述中执行第一次dataLayer推送
  • 我从GA Debug输出中看到GA事件是用4个值触发的
  • 我从控制台进行第二次推送
  • GA Debug输出告诉我GA事件是使用新的类别和操作触发的,但是先前已推送标签和值

这就是我所说的持久性.为了避免这个,我只能拿出不同的事件类型,如gaCustomEvent,gaCustomEventWithLabel,gaCustomEventWithOption等等,然后规则和标签,对于那些每一个.那太荒谬了,你不同意吗?

小智 7

您可以将对象推送到dataLayer,其中包含与单个事件相关的所有信息,例如:

dataLayer.push({
    'gaEvent':{
        'category': 'foo',
        'action': 'bar',
        'label': 'blah blah blah',
        'value': 1,
        'nonInteraction':false
    }
});
Run Code Online (Sandbox Code Playgroud)

然后,您可以在GTM中设置相关的宏来收集和使用相关字段,这些字段不会被转移到任何将来的事件,因为只使用推入dataLayer的对象的最后一个值.