Javascript Google标记管理器数据层持久性 总结

Javascript Google标记管理器数据层持久性 总结,javascript,google-analytics,tracking,google-tag-manager,Javascript,Google Analytics,Tracking,Google Tag Manager,随着时间的推移,GoogleTagManager数据层会被值阻塞,这使得规则和标记变得过于复杂,尤其是在AJAX密集的站点上 问题: 我正在一个跟踪量大的站点上实施GTM,并寻找以下问题的干净解决方案。我将以谷歌分析为例 它允许您设置并使用4个宏进行事件跟踪: 类别{ga事件类别} 动作{ga事件动作} 标签{ga事件标签} 值{ga事件值} 值和标签是可选的,但数据层是持久的,不是吗?那么,我如何处理以下场景: dataLayer.push({ 'event':'gaEvent',

随着时间的推移,GoogleTagManager数据层会被值阻塞,这使得规则和标记变得过于复杂,尤其是在AJAX密集的站点上


问题: 我正在一个跟踪量大的站点上实施GTM,并寻找以下问题的干净解决方案。我将以谷歌分析为例

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

  • 类别{ga事件类别}
  • 动作{ga事件动作}
  • 标签{ga事件标签}
  • 值{ga事件值}
值和标签是可选的,但数据层是持久的,不是吗?那么,我如何处理以下场景:

dataLayer.push({
  'event':'gaEvent', 
  'gaEventCategory':'my-category', 
  'gaEventAction':'my-action',
  'gaEventLabel':'my-label',
  'gaEventValue':'my-value'
});
但随后在同一页上,我必须跟踪另一个事件,但没有标签和值:

dataLayer.push({
  'event':'gaEvent', 
  'gaEventCategory':'another-category', 
  'gaEventAction':'another-action',
});
如果我设置了一个类似“Event is gaEvent”的规则,并在该规则上触发如下所示的“Google Analytics”标记(此处使用HTML标记,而不是内置标记):


_push([''u trackEvent','{ga event category}}','{{ga event action}}','{{ga event label}',{{ga event value}}]);
第二个事件将与前一个事件的标签和值一起推送到
\u gaq

如何处理这样的案件

对于那些好奇的人来说,我需要能够在某些点上对同一事件触发不同的标记,这就是为什么我想要这个“动态”解决方案,但是数据层的持久性会破坏规则

编辑1:测试例行程序 下面是我测试这个的方法

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

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

我相信你的问题是在自定义HTML标记中使用_gaq.push,规则
{{event}}等于gaEvent

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

_push([''u trackEvent','{ga event category}}','{{ga event action}}','{{ga event label}',{{ga event value}}]);
因此,当您执行dataLayer.push时,规则将被触发,从而导致自定义HTML标记将_gaq.push跟踪器发送到GA。当您执行第二个dataLayer.push时,规则将再次触发,但感觉它既没有标签也没有值,它使用先前的标签值和dataLayer.push的值

我要做的是:

设置一个名为events的新宏-这是一个Google Analytics标记,轨迹类型为event。接下来,输入事件跟踪参数的宏,并将标记设置为当前用于gaEvent(
{event}}的规则等于gaEvent


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

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

dataLayer.push({
    'gaEvent':{
        'category': 'foo',
        'action': 'bar',
        'label': 'blah blah blah',
        'value': 1,
        'nonInteraction':false
    }
});
然后,您可以在GTM中设置相关宏以收集和使用相关字段,这些字段不会被带入任何未来事件,因为只使用推送到数据层的对象的最后一个值。

每个
数据层。push()
都是粒度、独立的,并使用匹配的触发规则触发标记。 如果希望第二个事件从第一个事件继承数据层变量,最好在应用程序中处理,而不是GTM


另一个选项是在第二次推送时使用不同的事件名称,并对数据层变量默认值使用宏。您可以将GA事件跟踪标记配置为侦听多个触发规则。这是一个any,因此任何一个都会触发
\u gaq.push()

嗨,布莱西,情况并非如此,下面是我如何测试它的。也许我做错了什么。我有GA调试插件在Chrome和GTM在调试模式的网站上。加载页面后,我在控制台中从描述中进行第一次推送。我看到GA调试输出,它使用所有4个值正确触发。然后,我从描述中执行第二个dataLayer.push,在GA调试输出中,我看到GA事件是使用正确的类别和操作触发的,但是使用了先前推送的标签和选项。您可以共享该站点吗?“我做了描述中的第一次推送”是点击吗?或者你是在加载页面时启动活动?嗨,对不起,有几天“远离互联网”。很遗憾,我不能分享这个网站。我的意思是我把代码放在控制台里。这与我单击按钮触发相同的push.ProTip相同:使用较短的数据层变量。您可以删除
gaEvent
前缀,使
gaEventCategory
只是
category
。如果页面上有50个数据层推送,则只需保存1.4kb的冗余字符。
dataLayer.push({
    'gaEvent':{
        'category': 'foo',
        'action': 'bar',
        'label': 'blah blah blah',
        'value': 1,
        'nonInteraction':false
    }
});