• GTM课程
  • 博客
  • 服务
  • 资源资源
    • YouTube频道
    • 电子书和指南
    • GTM食谱
    • 查看所有资源
    • GTM社区
  • 关于
    • 关于
    • 联系
  • GTM课程
  • 博客
  • 服务
  • 资源资源
    • YouTube频道
    • 电子书和指南
    • GTM食谱
    • 查看所有资源
    • GTM社区
  • 关于
    • 关于
    • 联系

2020年4月13日

快速指南:带有示例的dataLayer.push

更新时间:2020年4月13日。

该快速指南是在Google跟踪代码管理器初学者/中级用户提出多个问题后诞生的: 什么时候应该使用dataLayer.push(),什么时候应该使用数据层声明(dataLayer = [{}])? 

根本引起这个问题的原因是Google跟踪代码管理器’的官方文档在某些方面有些误导。继续阅读,我’ll show you where.

 

 

dataLayer.push?

那么,dataLayer.push首先是什么?它’s一种使人能够添加/更新存储在数据层中的数据的代码,例如:

<script>
window.dataLayer = 窗口.dataLayer || [];
window.dataLayer.push({
 'event': 'new_subscriber',
 'formLocation': 'footer'
 });
</script>

但是这是什么意思?好吧,让’可以快速了解什么是数据层。附言如果(在阅读此博客文章之后)该主题仍然令人困惑,请考虑注册我的 面向初学者的Google跟踪代码管理器课程 在这里我更详细地解释了什么dataLayer.push。

 

什么是数据层?

数据层是Google跟踪代码管理器的主要概念之一,可确保最大的灵活性,可移植性和易于实施性。没有它,GTM将无法正常工作。这是使标签管理正常运行的原因。这是释放Google跟踪代码管理器潜力的关键。

I’我的另一本指南中已经介绍了数据层 完整的数据层指南,但为节省您的时间,请在这里’s the TL;DR version.

简而言之,数据层就像存储某些信息的存储桶。它是网站的中心位置(虚拟层),您,开发人员或第三方工具可以在其中临时存储数据(关于用户,页面内容等)。 Google跟踪代码管理器从那里读取该信息,在标记/触发器/变量中使用该信息,或进一步发送给其他工具(您命名为Google Analytics(分析),Google Adwords,Facebook)。

数据层

将Google跟踪代码管理器容器的JavaScript代码段放入您的 网站的源代码,即会自动创建数据层。 您无需添加任何其他内容。 但是,如果您需要更多自定义数据,例如 用户身份, 产品价格,订单总额等等(并在Google跟踪代码管理器中使用),则需要其他配置。然后’在dataLayer.push扮演角色的位置。

 

在数据层中存储/更新数据

有两种方法可以将数据推送到数据层。实际上,只有一个 你应该使用,但出于知识的考虑,我将同时提及:

  1. 通过添加数据层代码段 以上 Google跟踪代码管理器容器代码段( dataLayer = [] )。 GTM官方文档中也提到了这种方法。
  2. 或通过推送数据 dataLayer.push method.

你问有什么区别?

 

数据层声明(不建议)

这种将数据插入数据层的方法 如果您想在页面加载时立即添加任何数据,可以使用,例如, 用户身份。因此,您可以利用 用户身份 可变的 所有页面 触发。

在这种情况下,您的开发人员应添加一个数据层代码段 以上 (这很重要!)具有实际用户ID的GTM跟踪容器。将此信息添加到数据层后,您就可以在Google跟踪代码管理器中开始使用它了。这里’s a code example:

<script>
 dataLayer = [{
 'userID': '123456'  
 }];
</script>
<!-- Google Tag Manager --> 
// this 是 where your Google Tag Manager container snippet 应该 be placed
<!-- End Google Tag Manager -->

尽管官方的Google跟踪代码管理器文档中提到了此方法, 你不应该使用它。为什么?

如果开发人员放置此代码段 下面 Google跟踪代码管理器容器,它将破坏一切。后果之一是 损坏的所有页面触发器。此外,Google跟踪代码管理器将无法跟踪各种网站互动,例如点击,表单提交等。

甚至谷歌’的文档在这里不一致。例如,在 标准电子商务(适用于GTM)文档 他们提供了另一种方法来放置数据’s dataLayer.push (将在下一段中说明)。

Simo Ahava也建议 使用 仅dataLayer.push, 永不 dataLayer = []。 

为什么?因为通过使用语法 dataLayer = [],您将dataLayer变量重置为新的Array(读取:清除了存储桶),从而覆盖了之前的所有内容(例如,跟踪工作所需的Google Tag Manager的自定义设置)。由于您覆盖了 dataLayer,则无法再与Google跟踪代码管理器一起正常使用,并且典型的症状是GTM的触发器也不再起作用。

数据层-电子商务

 

dataLayer.push(推荐)

如何将数据放入数据层的第二种方法 是 dataLayer.push, 绝对推荐,应该是您的唯一选择。无论您将其放置在什么位置(Google跟踪代码管理器容器的下方或上方), dataLayer.push 将正常工作。这里有一些例子:

  1. 您有新闻稿注册表单(无法使用默认的GTM表单侦听器轻松跟踪),因此您决定在新订阅者成功在您的网站上输入其电子邮件后,要求网站开发人员触发数据层事件:
    <script>
    window.dataLayer = 窗口.dataLayer || [];
      窗口.dataLayer.push({'event': 'new_subscriber'});
    </script>

    如果您愿意,可以向开发人员询问其他信息(例如 表格位置 (因为您可能在同一页面上使用多个表单)。

    <script>
    window.dataLayer = 窗口.dataLayer || [];
    window.dataLayer.push({
     'formLocation': 'footer',
     'event': 'new_subscriber'
    });
    </script>
  2. 访客将产品添加到他/她的购物车时,数据层事件(包含产品’的信息)可能会被解雇。

还有一件事。如果您将此博客文章中的代码段与开发人员的官方Google跟踪代码管理器文档中说明的代码段进行比较,则可以’我会注意到我的代码示例也有“window” prefix (instead of dataLayer.push,  我用 窗口.dataLayer.push)。在使用Google跟踪代码管理器一段时间后,看到其他专业人员在讲话,我’ve注意到,他们建议再做一件事(作为经验法则):添加前缀 窗口 到 dataLayer.push。 结果,最终的dataLayer.push代码片段可能如下所示:

<script>
window.dataLayer.push({
 'formLocation': 'footer',
 'event': 'new_subscriber'
 });
</script>

顺便说一句 dataLayer 名称区分大小写。这意味着只有字母L必须为大写:

  • DataLayer.push将不起作用(因为D是大写)
  • 数据层也将不起作用(尽管L应该是大写的,所有字母都是小写的)。

更多dataLayer.push示例

前面提到的dataLayer.push示例非常基础,但如果需要,您也可以将数据作为对象或数组推送。一个很好的例子是 标准电子商务 交易代码:

<script>
window.dataLayer = 窗口.dataLayer || [];
dataLayer.push({
 'transactionProducts': [{
 'sku': 'DD44',
 'name': 'T-Shirt',
 'category': 'Apparel',
 'price': 11.99,
 'quantity': 1
 },{
 'sku': 'AA1243544',
 'name': 'Socks',
 'category': 'Apparel',
 'price': 9.99,
 'quantity': 2
 }]
});
</script>

这里发生的是一个 dataLayer.push 我们还推了一个数组(交易产品)包含两个对象。每个对象都包含相同的键集(sku,名称,类别,价格,数量),但它们的值不同。然后’这是合乎逻辑的,因为两种不同的产品通常会具有不同的特征。

增强型电子商务数据层推送还使用了更困难的数据结构:

<script>
window.dataLayer.push({
 'ecommerce': {
  'promoView': {
   'promotions': [
    {
     'id': 'JUNE_PROMO13', // ID or 名称 是 required.
     'name': 'June Sale',
     'creative': 'banner1',
     'position': 'slot1'
    },
    {
     'id': 'FREE_SHIP13',
     'name': 'Free Shipping Promo',
     'creative': 'skyscraper1',
     'position': 'slot2'
   }]
  }
 }
});
</script>

有了这个 dataLayer.push,我们添加了一个 电子商务 包含的对象 促销 包含的对象 促销活动 数组,其中包含页面上显示的两个促销的两个对象。每个促销都有4个键, ID,名称,广告素材,位置。

 

好,现在呢?

将数据/事件推送到数据层后,’是时候开始与他们合作了:

  • 您要使用数据层事件作为触发器吗?用 自定义事件触发器.
  • 您是否想访问一些数据(例如 用户身份)并将其插入Universal Analytics代码中?创建一个 数据层变量 对于要从​​数据层访问的每个数据点。

 

dataLayer.push:最后的话

DataLayer.push 是您/开发人员/第三方插件将一些有用的数据传递到数据层的一种方式。从那里你可以“play with it”在Google跟踪代码管理器中,并在您的跟踪代码管理中使用它。

DataLayer.push应该是您添加数据的唯一方法。即使Google跟踪代码管理器的官方文档仍然使用常规数据层声明来提及/推荐(dataLayer = [{}]),您不应该那么做。请记住,请始终推送到dataLayer。

 

 

朱利叶斯·费多罗维奇乌斯
在 Google跟踪代码管理器提示
55条评论
朱利叶斯·美联储
  • 2018年4月6日
  • 回复

If you're placing the 窗口.dataLayer.push code 以上 the GTM container, then you 应该 add 窗口.dataLayer = 窗口.dataLayer || [].

在其他情况下,它是可选的。实际上,请随时删除window.dataLayer = 窗口.dataLayer ||。 []如果您愿意,可以从其他地方。如果您需要在GTM容器代码段执行此操作之前定义dataLayer,请务必先定义该数据图层, 页面预览 事件。

麦可
  • 2018年5月16日
  • 回复

朱利叶斯,请问一个问题。这够了吗?

dataLayer.push({“ event”:“ newsletter_unsubscribe”})

因为我没有在Google Analytics(分析)中看到此事件> Behaviour >实施后的事件。通话已完成,我可以确认,但该事件不可见。

    布鲁诺
    • 2018年5月16日
    • 回复

    你好

    如果我可以帮助您,我想当您在GTM上推送“ newsletter_unsubscribe”事件时,您是在GTM而非GA上创建事件。这意味着您现在可以在GTM上识别它并将其用作触发器。您可以根据自定义事件“ newsletter_unsubscribe”(不带引号)创建触发器。然后,您可以在GTM上创建Google Analytics(分析)事件代码,并在其中使用上面的触发器。

    我希望这是有道理的=)

      麦可
      • 2018年5月17日
      • 回复

      这也是我的假设。我刚刚在GTM中创建了一个触发器和标签,将它们关联在一起,并希望现在开始在GA中看到该事件。

      谢谢布鲁诺!

史蒂夫
  • 2018年6月20日
  • 回复

如果在GTM加载之前将事件推送到dataLayer,则GTM加载后会发生什么事情?假设我为“所有页面”设置了GA,并且为该特定事件设置了另一个GA ...是在事件触发之前所有页面始终“运行”还是因为在GTM加载之前推送事件会立即发生?

标签排序使标签看起来像被“再次”触发或添加到您添加的标签之外。如果我将GA设置为在所有页面上每个事件触发一次,然后在另一个代码上选择GA作为设置代码(之前触发)...好像GA会触发两次,或者如果已经触发一次,对吗?标记排序优先级不是针对标记的吗?

    朱利叶斯·美联储(Fedorovicius)
    • 2018年6月20日
    • 回复

    嘿,如果您在GTM代码段之前推送事件+数据,则该事件将在Pageview事件之前发生。

    至于第二个问题,代码可能会触发一次,也可能会触发两次。这取决于。

    假设有2个标签:
    -事件标签
    -其他标签。

    如果:
    -在所有页面上触发“其他标签”
    -并且您还将“事件”标签设置为其设置标签
    -并且还将事件代码设置为在所有页面上触发,然后事件代码将仅触发一次,因为一切都在“ Pageview”事件的范围内发生。

    如果您将事件代码设置为在DOM Ready上触发,那么事件代码将在每页触发两次:
    -在所有页面上
    -并且在DOM就绪

阿里
  • 2018年9月26日
  • 回复

嗨,朱利叶斯,您能帮我为我的Opencart电子商务商店设置数据层吗?

    朱利叶斯·费多罗维奇乌斯
    • 2018年9月26日
    • 回复

    嗨,我建议您阅读以下指南,以更好地了解如何实施电子商务跟踪:
    - Standard Ecommerce tracking //www.toddblog.net/post/ecommerce-tracking-with-google-tag-manager/
    - Enhanced Ecommerce tracking //www.simoahava.com/analytics/enhanced-ecommerce-guide-for-google-tag-manager/

阿南德
  • 2019年1月15日
  • 回复

朱利叶斯大家好,我是数据层的新手,我喜欢阅读和探索您网站上的更多内容。我真的很想跟踪用户ID以及数据层中的用户位置,以按照您提到的有关userid的示例编写代码:默认情况下,您设置ID为12345,但实际上,我应如何跟踪数组中的用户ID及其位置。

帮助我吗?

    朱利叶斯·费多罗维奇乌斯
    • 一月20 2019
    • 回复

    Hey, sorry, but I didn't quite get the question. Could you rephrase it? As for the User ID, I have just published another guide that you might find helpful //www.toddblog.net/post/google-analytics-user-id-with-google-tag-manager/

帕维尔
  • 2019年1月17日
  • 回复

如果您要预加载一些数据,即在某人与我们的网站第一次联系之前先加载一些数据,该怎么办? (第一辑)

最好是已经用预加载的dataLayer加载页面或正常加载页面并执行推送?

    朱利叶斯·费多罗维奇乌斯
    • 2019年1月17日
    • 回复

    这取决于您希望数据的准确性。越早将一些数据点预加载到dataLayer中(甚至在第一个pv上),效果越好。

    如果您以后再推送一些数据,则该数据将不会在“页面查看”事件中显示,因此某些标签将无法访问它,例如Google Analytics(分析),您将错过它(当然,这取决于范围)

埃琳娜
  • 一月30 2019
  • 回复

So you're saying I have to declare this 窗口.dataLayer = 窗口.dataLayer || []; even when I push an event right?

窗口.dataLayer.push({
'event':'Button clicked'
});

    朱利叶斯·费多罗维奇乌斯
    • 一月30 2019
    • 回复

    只需添加一次此代码就足够了,但是“以防万一”我在每个dataLayer.push之前将其触发。该代码并不繁琐,也不会产生负面影响。

巴丹
  • 2019年3月7日
  • 回复

你好朱利叶斯,

感谢您分享所有精彩的帖子。这些对于像我这样的人了解很有帮助。我们正在执行一项任务,以跟踪我们网站上的用户登录和帐户创建;但是,我们通过集中式帐户/子域来处理登录和帐户创建过程。即,如果我尝试从登录页面登录->它进入了子域->认证后,用户返回到登录页面。
寻找您的建议,在多域情况下使用数据层跟踪登录的最佳方法是什么。

谢谢!

    朱利叶斯·费多罗维奇乌斯
    • 2019年3月11日
    • 回复

    在主域及其子域中跟踪访问者不是“多域跟踪”。它仍在同一域中发生。只需将“ cookieDomain:自动”保留在您的GA设置变量中,就可以了。

      巴丹
      • 2019年3月11日
      • 回复

      谢谢朱利叶斯

大卫·马丁
  • 2019年3月26日
  • 回复

你好
我们使用Oracle 在 finity作为分析工具。我已将Oracle 在 finity标记添加到GTM,并且数据已正确发送到标准变量工具。

我们需要添加自定义变量。我在GTM中添加了自定义HTML标记,以触发按钮单击,该按钮在用户做出特定选择后被单击。开发人员向站点添加了代码以将数据(用户选择)推送到dataLayer。

当我测试时,GTM具有当前的dataLayer值,但是在标记触发(dcs call)时发送的内容始终是先前的数据(先前的用户选择)。
按钮上的触发标签单击错误的解决方案吗?
这是代码:
// Oracle 在 finity UDO测试

dataLayer.push({'o_filteraction':'AdvancedSearch'});
dataLayer.push({'o_filtertype':checkTypes.join(';')});
dataLayer.push({'o_filterfeature':checkFeatures.join(';')});
dataLayer.push({'o_filtercategory':checkCategory.join(';')});
dataLayer.push({'o_filteraccommodation':checkAccommodation.join(';')});;
dataLayer.push({'o_filterlocation':checkLocation.join(';')});
dataLayer.push({'o_filterdates':checkDates.join(';')});
dataLayer.push({'o_filterprice':checkPrice.join(';')});

    朱利叶斯·费多罗维奇乌斯
    • 2019年3月27日
    • 回复

    嗨,如果您想使用代码中数据层的最新数据,则dataLayer.push代码需要具有“事件”键)。

    例如。
    dataLayer.push({
    'event':'some_event_name',//对于您在评论中列出的所有推送,这可能是相同的
    'o_filteraction':'AdvancedSearch'
    });

    然后创建一个自定义事件触发器,该触发器将在“ some_event_name”上激活。这样,您将在标签中获取最新数据。
    阅读更多 about the custom event trigger - //www.toddblog.net/post/google-tag-manager-custom-event-trigger/

      大卫·马丁
      • 2019年3月28日
      • 回复

      抱歉,您的建议完全有效!!!我有语法错误。非常感谢您的帮助!!!

安德烈
  • 2019年4月16日
  • 回复

嘿,朱利奥,好吗?我有一些用于标准GA事件的自定义变量。例如:

窗口.dataLayer.push ({
'event':'dataevent',
'mycategory':“组”,
'myaction':“ Clik”,
'mylabel':“按钮x”
});

现在,在一次推送中,我需要一次发送多个事件。
那是我应该做的吗?

窗口.dataLayer.push({
'event':'dataevent',
'mycategory':{[“ Grupo”]},//这是所有字符串唯一的字符串
'myaction':{[“单击一个,单击两个”]},//这些更改
'mylabel':{[“按钮x,按钮y”]} //这些更改
});

感谢您的帮助

    朱利叶斯·费多罗维奇乌斯
    • 2019年5月17日
    • 回复

    您最好发送单独的事件,而不是一次发送所有事件。这意味着也要分离dataLayer.push。类别,操作和标签仅接受字符串,而不接受数组或对象。

迪山谷
  • 2019年5月17日
  • 回复

我如何配置它也可以在正常模式下运行

朱利叶斯·费多罗维奇乌斯
  • 2019年5月17日
  • 回复

它仅使用一个标签还是多个标签发生?分享链接以预览和调试模式,并告诉我如何重现dataLayer.push。

朱利叶斯·费多罗维奇乌斯
  • 2019年5月19日
  • 回复

当然

列昂
  • 2019年7月26日
  • 回复

你好朱利叶斯,

我目前正在尝试将数据推送到Squarespace提交HTML中。由于该事件是gtm.submit,并且formID未知(从Google跟踪代码管理器中,可以看到变量标签)。我添加了以下代码来推送formID。因此可以将其添加到Google跟踪代码管理器中以跟踪表单。

<script>
console.log('这很着火');
dataLayer.push({
'event':'formSubmission',
'formType':'contactUs',
'formPosition':'contactPage',
'formID':'contact001'
})
</script>

我不知道为什么它不能将数据推入。我该怎么办?

谢谢你的帮助

    朱利叶斯·费多罗维奇乌斯
    • 2019年7月26日
    • 回复

    您是否在控制台中看到console.log?如果是,那么这里有一些修复:
    -dataLayer.push之后缺少分号。
    -另外,我在开始处添加了一行额外的行来启动dataLayer(因为此时可能仍不是GTM创建的)。

    这是代码:

    <script>
    console.log('这很着火');
    窗口.dataLayer = 窗口.dataLayer || [];
    dataLayer.push({
    'event':'formSubmission',
    'formType':'contactUs',
    'formPosition':'contactPage',
    'formID':'contact001'
    });
    </script>

    如果您在控制台中看不到console.log,则也许Squarespace不允许自定义js?我不知道它的局限性。

      列昂
      • 2019年7月26日
      • 回复

      感谢您的答复,我在控制台中看不到console.log。也许我应该删除它?

      原因是当我选择单击1个提交按钮时它起作用。但是下拉菜单需要一个formID,但我找不到它。这就是为什么我使用JS脚本进行加载的原因。

      据我所知,squarespace允许自定义js。这就是为什么我如此怀疑它为什么不能被解雇的原因。

      谢谢你的帮助 :)

        朱利叶斯·费多罗维奇乌斯
        • 2019年7月26日
        • 回复

        如果看不到console.log,则表示未激活整个代码(包括dataLayer.push)。我会联系squarespace suport,也许他们会给您一些提示(因为这看起来像是squarespace特有的东西)。

          列昂
          • 2019年7月27日

          你好朱利叶斯,

          我刚刚重试了代码,它可以工作。

          非常感谢你的帮助。

          百万感谢,
          里昂

          列昂
          • 2019年7月28日

          再问一个问题。

          假设我有一个包含3个选项的下拉菜单。

          因为我没有formID,所以我使用代码为表单提供了ID。在开发人员工具上,控制台。我可以看到代码被解雇了。

          问题是:

          当我在DataLayer中找到下拉菜单列表时,数据为空。

          可以说是8次点击:

          它显示:[7] [“” gtm.element“”]。value

          它没有gtm.element“我需要跟踪的数字”。值。

          这是否还需要使用一些代码来注入?

          谢谢

詹姆斯·科斯坦辛
  • 2019年8月24日
  • 回复

对于基于订阅的会员跟踪(例如,我想跟踪每月产生5美元的会员。)触发器仅从客户端触发一次。有没有办法从服务器(从回调到支付网关)触发触发器?

    朱利叶斯·费多罗维奇乌斯
    • 2019年8月27日
    • 回复

    如果要在用户未登录时从后端发送数据,则GTM不会为您提供帮助。开发人员必须通过称为Measurement协议的数据直接将数据发送到GA。

汤玛士
  • 2019年8月28日
  • 回复

嗨朱利叶斯和其他人。

我工作的网站有一个搜索字段,客户需要搜索查询列表,因为开发人员会执行ajax调用,所以我们无法跟踪搜索。

我尝试了以下-

<script>window.dataLayer = 窗口.dataLayer || [];window.dataLayer.push({'searchQuery': 'value'});</script>

并创建了一个事件,每当单击earch按钮时,都会将searchQuery的值发送到GA,但是由于变量将为null,因此我无法正确跟踪搜索。

现在,如何延迟标签并等待searchQuery变量获取搜索值,然后将其发送给GA?

提前致谢,
汤玛士

    朱利叶斯·费多罗维奇乌斯
    • 2019年8月28日
    • 回复

    您可以使用以下代码:

    <script>window.dataLayer = 窗口.dataLayer ||[];
    窗口.dataLayer.push({
    'searchQuery':'value',
    'event':'searchComplete'
    });</script>

    然后创建一个自定义事件触发器,该触发器将在“ searchComplete”事件上激活,然后才触发代码。

塞尔久
  • 2019年9月10日
  • 回复

你好朱利叶斯,
是否可以在其他门户网站(website2)中通过website1在数据层变量集中使用信息?

任务:用户在website1中执行操作,结果我们在变量中设置了一个值(“ true”)。我们需要在执行一些代码之前(通过GTM标签)在website2中读取该值。

我们不能为此使用cookie,因为您显然(不允许)访问其他网站中设置的cookie。

非常感谢

    朱利叶斯·费多罗维奇乌斯
    • 2019年9月19日
    • 回复

    您可以尝试通过URL传递变量。当访问者从website1转到website2时,URL应该用变量的值修饰。

基督教
  • 2019年9月26日
  • 回复

嘿朱利叶斯
很棒的文章,但我也有一个问题:
如何将父类推入数据层?

导航课
ul班
李班
一类

在gtm.linkclick事件中,我得到了一个类,但是我也需要nav类,以区分不同的导航。

任何想法?

    朱利叶斯·费多罗维奇乌斯
    • 2019年9月29日
    • 回复

    Hey, use this //www.simoahava.com/analytics/capturing-the-correct-element-in-google-tag-manager/

约瑟夫
  • 2019年10月29日
  • 回复

感谢文章朱利叶斯。

如果我想通过URL传递变量该怎么办。例如,对于特定的URL,我想显示产品列表(与文章相关)。数据将来自数据库,Google表格等。

任何建议将不胜感激。

    朱利叶斯·费多罗维奇乌斯
    • 2019年10月29日
    • 回复

    为此,您可以在GTM中使用URL变量,如果您知道如何编码,则Custom Javascript变量也很有用。

Swapna
  • 2020年2月4日
  • 回复

你好朱利叶斯,

需要一点帮助。我创建了一个自定义事件。标签具有一个变量,该变量捕获搜索(部分搜索而不是内部站点搜索)短语。使用DLV类型创建变量以捕获值。

活动也进行得很顺利。在预览模式下,标签下的标签值为未定义。但是,在“数据层”选项卡下,我可以看到该值传递给DLV变量。但是,这些数据并未推送到分析中。这是放置在网站上的代码

窗口.dataLayer = 窗口.dataLayer || [];
窗口.dataLayer.push
({
'event':'想法搜索'
‘dlv_ideas_search_term’:‘值’
})

请协助。

问候,
Swapna

    朱利叶斯
    • 2020年2月14日
    • 回复

    这意味着您的数据层变量不正确。检查语法错误。

    库珀
    • 2020年2月14日
    • 回复

    Swapna,我遇到了同样的问题。我们必须将触发器更改为“加载窗口”而不是“页面视图”,因为PV触发得太早了,无法实际捕获数据。

    一旦我们更改为WL,数据便开始进入Google Analytics(分析)。

    祝好运!

      朱利叶斯
      • 2020年2月14日
      • 回复

      这将是dataLayer.push发生得很晚的工作。如果dataLayer.push在GTM容器上方(在代码中),则“所有页面”触发器将正常工作。

贾拉克·沙(Jhalak Shah)
  • 2020年3月16日
  • 回复

关于推送功能,我有一个问题。如果我想在任何gtm.start或加载或错误之前推送自定义事件。我该如何实现?

    朱利叶斯
    • 2020年3月16日
    • 回复

    将您的代码放在GTM容器上方。

      贾拉克·沙(Jhalak Shah)
      • 2020年3月17日
      • 回复

      非常感谢你的回复

戴夫
  • 2020年5月4日
  • 回复

这是没有道理的。

“尽管官方的Google跟踪代码管理器文档中提到了这种方法,但是您不应该使用它。为什么?”

您从未真正解释过此声明,只是对GA网站上的内容不屑一顾。
请解释为什么这不好?特别是因为这(您和GA官方网站上的代码段)将位于页面级

    朱利叶斯
    • 2020年5月4日
    • 回复

    在后面引用的文字中,将逐字地进行解释。

安奇
  • 2020年5月21日
  • 回复

dataLayer.push({“ event”:“ newsletter_unsubscribe”})

我们可以在没有报价的情况下使用上面的一个吗

dataLayer.push({event:newsletter_unsubscribe})

    朱利叶斯
    • 2020年5月21日
    • 回复

    否。除非newsletter_unsubscribe引用该函数中的某个变量。

尼兰詹·普拉贾帕蒂(Niranjan Prajapati)
  • 2020年10月15日
  • 回复

你好朱利叶斯,

我已经阅读了您的许多教程,但陷入了一种常见情况。我具有要使用dataLayer推送的以下数据结构:
{
事件:“ loginSuccess”,
类别:“登录”,
动作:“ loginSuccess”,
noninteraction:false,//可选
loginType:“ Google”,
用户身份:dataObj.user_id
userEmail:dataObj.user_email。
}

我已经在GTM中创建了变量,并且在创建loginSuccess事件标记以将数据发送到GA时,我无法弄清楚如何发送所有其他变量,因为大多数示例都显示了一个也在“标签”中传递的变量GA在GTM中的映射。

我需要发送所有变量并在GA中进行跟踪,这是一个示例,其中许多事件包含4-5个数据变量。

我很困惑,无法解决这个小问题。

提前致谢。

    朱利叶斯·费多罗维奇乌斯
    • 2020年10月19日
    • 回复

    您需要为每个数据点创建数据层变量。然后由您决定如何发送它们。它可以是事件操作,类别,标签,自定义维度等。

科林
  • 2020年11月30日
  • 回复

嘿朱利叶斯,

感谢您在这里以及在您的课程(我们已经完成)中提供的大量信息。我们有一个传统的实现,会及时更新,在该实现中,我们会在GTM加载脚本的紧上方设置dataLayer变量。

在调试或检查GTM和dataLayer时,将保留这些值。但是,GTM永远不会看到DOM Ready或Window Loaded事件。

这些事件不会出现在新的调试器/预览中,并且不会触发在这些事件上触发的代码。

在子域的ASP.NET网站上会发生此问题。我们的主域上的相同代码(没有dataLayer init)在所有事件触发时均按预期工作。

你见过这样的东西吗?您将如何找到问题?

预先感谢您的见解!

发表评论 取消回复

您的电子邮件地址不会被公开。 必需的地方已做标记 *

 

嗨,我是Julius Fedorovicius 并且在这里可以帮助您学习Google跟踪代码管理器和Google Analytics(分析)(但主要是GTM)。在这个激动人心的旅程中,与其他100 000多个每月访问量和14000多个新闻通讯订阅者一起加入。 阅读更多
基本资源


热门文章
  • -GTM表格追踪:7种有效方法
  • -dataLayer.push:指南
  • -GTM与Google Analytics(分析)
  • -GTM可以做的99件事
  • -常见的GTM错误
  • -数据层:终极指南
  • -适用于GTM的60多种自定义JavaScript
分析狂热
  • Google跟踪代码管理器课程
  • Google跟踪代码管理器食谱
  • Google跟踪代码管理器资源
  • Google跟踪代码管理器社区
  • 登录课程
关注Analytics Mania
  • 订阅新闻通讯
  • RSS订阅
最近的帖子
  • Google Analytics(分析)4中的增强测量:指南
  • 使用Google跟踪代码管理器跟踪联系表7
  • 在GTM中缺少DOM准备就绪和窗口加载事件?
分析狂热- Google Tag Manager and Google Analytics 博客 | 隐私政策
管理Cookie设置
  • <bdo id="oR3Wu0J"><sub id="hgfO8t4" class="hHADYby"><dir class="exkEGzC"></dir></sub></bdo>

  • <mark id="W3n8GCi" class="Wb2KTgS"></mark>

    <pre id="LQEyUs3" class="LVFYRe6"><fieldset class="KWrHaRJ"><output class="uOqP3jO"></output></fieldset></pre>

      • <ins class="fgxiLYC"><label id="gngjlWD"></label></ins>


      • <pre class="dw3kIqh"><code class="F1u9vyC"></code></pre>