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

时间:2013-09-25 14:05:09

标签: javascript google-analytics tracking google-tag-manager

摘要

Google跟踪代码管理器dataLayer会随着时间的推移而被一些值限制,导致规则和标记过于复杂,尤其是在AJAX密集的网站上。


问题

我正在一个追踪重型网站上实施GTM,并寻找以下问题的清洁解决方案。我将以谷歌分析为例。

它允许您设置和使用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'
});

但是后来在同一页面上我必须跟踪另一个事件,但是没有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调试输出告诉我GA事件是使用新类别和操作触发的,但是先前已推送标签和值

这就是我所说的持久性。为了避免这种情况,我只能提出不同的事件类型,例如gaCustomEventgaCustomEventWithLabelgaCustomEventWithOption等,然后是每个事件类型的规则和标记。那太荒谬了,你不同意吗?

3 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:0)

我认为您的问题是在自定义HTML标记和规则{{event}} equals gaEvent中使用_gaq.push:

<script type="text/javascript">
_gaq.push(['_trackEvent', '{{ga event category}}', '{{ga event action}}', '{{ga event label}}',  {{ga event value}}]);
</script>

因此,当您执行dataLayer.push时,规则将被触发,从而导致自定义HTML标记将_gaq.push跟踪器发送到GA。当你去做第二个dataLayer.push时,规则再次触发,但感觉它没有标签或值的值,它使用了dataLayer.push的标签和值的先前值。

我要做的是:

设置一个名为events的新宏 - 这是一个Google Analytics标记,其轨道类型为event。接下来将宏添加到事件跟踪参数的宏中,并将标记设置为当前用于gaEvent({{event}} equals gaEvent)的规则。

enter image description here

通过这种方式处理事件,您将使用GTM向GA发送事件的方法,并且您将阻止自己发送附加信息,如标签,值等。

答案 2 :(得分:0)

每个dataLayer.push()都是精细的,独立的,并且触发带有匹配触发规则的标签。 如果您希望第二个事件从第一个事件继承dataLayer变量,那么最好在您的应用程序中处理,而不是GTM。

另一种选择是在第二次推送时使用不同的事件名称,并使用宏来获取dataLayer变量的默认值。您可以配置GA事件跟踪代码,以侦听多个触发规则。它是任意一个,因此要么触发_gaq.push()