GTM 脚本后 dataLayer.push 不起作用

2024-02-20

我想使用 Google 跟踪代码管理器实施增强型电子商务,并且希望为标签 Universal Analytics 推送一些数据。

我总是在 GTM 脚本之前创建 dataLayer,但现在我需要使用以下命令发送更多数据dataLayer.push

而且这不起作用,datalaLayer.push仅当它发生在 GTM 脚本启动之前时才有效。

例子。这有效:

   <script>
    <head>
     dataLayer = [{   
                 
            'google_tag_params': {
               'ecomm_pagetype': 'category',
               'ecomm_category': '{{ $resource->seo->h1 }}',
             }
         }];
    
    dataLayer.push({
              'ecommerce': {
                'currencyCode': 'EUR',    
                'impressions': [
                     {
                        'id':       '12312',
                        'price':    24,
                        'category': 'wfwefwerwerwer',
                        'position': 2,
                        'name':     'wfwefwerwerwer',  
                        'brand':   'My Brand',
                        'list':    'Product List',
    
                    }
                ]
              }
            });
    
    (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    })(window,document,'script','dataLayer','GTM-XXXXXX');
    
    </script>
    </head>

但如果我在GTM脚本不起作用后使用dataLayer.push,则不会发送数据,也不会报告错误。

这对我不起作用:

<head>
    <script>
         dataLayer = [{   
                     
                'google_tag_params': {
                   'ecomm_pagetype': 'category',
                   'ecomm_category': '{{ $resource->seo->h1 }}',
                 }
             }];
        
        
        (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
        new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
        j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
        'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
        })(window,document,'script','dataLayer','GTM-XXXXXX');

    </script>
</head>

<body>

    //something content html here

    <footer></footer>

    <script>
        dataLayer.push({
          'ecommerce': {
            'currencyCode': 'EUR',    
            'impressions': [
                 {
                    'id':       '12312',
                    'price':    24,
                    'category': 'wfwefwerwerwer',
                    'position': 2,
                    'name':     'wfwefwerwerwer',  
                    'brand':   'My Brand',
                    'list':    'Product List',

                }
            ]
          }
        });
    </script>
</body>

您没有遵循最佳实践,因此会遇到问题,迟早。

  • 总是使用.push而不是初始化:您的第一个调用是数组初始化(dataLayer = [])。这意味着如果dataLayer已经存在,它将被完全覆盖,包括.pushGTM 定制的方法,用于接收推送事件。现在它工作正常,因为您在初始化后调用 GTM。但这是一个坏习惯。有一天,您将 GTM 移到初始化之上,或者在 GTM 之后添加类似的初始化调用,它就会崩溃。

您的电话应该是:

window.dataLayer = window.dataLayer || [];  
dataLayer.push({...});
  • 始终设置event财产: the eventGTM 使用属性来定义触发器并了解数据何时可用。您可以连续拥有 2 个.push来电,第一个带有event,而第二个没有,第一个的数据将在第二个中可用(只要该推送不覆盖它),但这又是坏习惯和玩火。

例如:

dataLayer.push({
  'event': 'ecommerce', // naming is up to you, should match your GTM triggers 
  'ecommerce': {
  ...

在你的具体情况下,自从eventkey 丢失,只要 GTM 在推送后加载,它就可以工作,因为当 GTM 启动时数据已经存在。push呼叫移至 GTM 之后,因为没有event属性,GTM 无法知道数据何时可用。所以你应该:

  • Add the event关键(总是!)
  • 配置匹配的触发器event

以下是有关这些主题的更多阅读内容:

  • https://www.simoahava.com/gtm-tips/datalayer-declaration-vs-push/ https://www.simoahava.com/gtm-tips/datalayer-declaration-vs-push/
  • https://www.simoahava.com/gtm-tips/add-the-event-key-to-datalayer-pushes/ https://www.simoahava.com/gtm-tips/add-the-event-key-to-datalayer-pushes/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GTM 脚本后 dataLayer.push 不起作用 的相关文章

随机推荐

  • 返回很大范围内的非重复随机值

    我想要一个函数 它可以从一组 n 个整数 0 到 n 1 中生成 k 个伪随机值 而不重复任何先前的结果 k小于或等于n O n 内存不可接受由于尺寸较大n以及我需要重新洗牌的频率 这些是我到目前为止考虑过的方法 Array 通常 如果我想
  • 如何在.NET 2.0 ListView 中全选/全选?

    在不使用的情况下选择列表视图中的所有项目或不选择任何项目的好方法是什么 foreach ListViewItem item in listView1 Items item Selected true or foreach ListViewI
  • 在 Visual Studio 2017 中的类图中创建聚合和组合

    我正在考虑在 Visual Studio 中创建类图 我注意到工具箱似乎只允许类之间的关联关系 是否可以在类图中创建更强的关系 即聚合和组合关系 另外 是否可以从代码自动创建类图 好问题 首先 Visual Studio VS 类设计器不是
  • boost::process 异步 IO 示例不起作用?

    以下程序 include
  • 如何在 Eclipse 调试视角中识别线程?

    我正在开发一个具有一些线程的 Java 应用程序 我在控制台中打印 threadId 例如 17 18 19 等 但是当我打开调试透视图时 我有这个 调试 窗口 最左上角的窗口 它显示当前线程 但它们使用 Thread 2 thread 3
  • 强化学习+优化:如何做得更好?

    我正在学习如何使用强化学习进行优化 我选择的问题是最大匹配 https en wikipedia org wiki Maximum cardinality matching在二分图中 因为我可以轻松计算出真正的最优值 回想一下 图中的匹配是
  • 从页面基类查找页面中的控件

    希望你周五过得愉快 好吧 这是我的问题 我的所有 ASPX 页面都继承自名为 BasePage 的基类 BasePage 继承自 System Web UI Page 现在 如何从我的页面库访问 设置我的 aspx 页面中的控件 我试过这个
  • 匹配完全限定类名的正则表达式

    在文本中匹配完全限定的 Java 类名的最佳方式是什么 例子 java lang Reflect java util ArrayList org hibernate Hibernate Java 完全限定类名 假设为 N 具有以下结构 N
  • DDD:用户聚合根与其他聚合中几乎所有实体之间的一对多关系

    我有以下 DDD 场景 分为以下聚合 User 各位朋友 用户协会 文件 供用户上传 画廊 文件分组 消息 用户通信 群组 用户可以创建并且其他成员可以加入 GroupMessages 发送给组中所有成员的消息 群组论坛 群组成员可以讨论各
  • 将额外参数添加到 $cordovaFileTransfer.upload

    我在用 cordovaFileTransfer upload 将图片从设备上传到我的服务器 在文档中它说它排除了这些参数 server filePath options 我需要传递一些额外的自定义参数 比如user id 例如 有谁知道是否
  • 从水晶报表中的路径加载动态图像

    我想在我的报告中显示图像 我将图像路径保存在我的 sqlserver 数据库中 现在我想从路径加载图像 我搜索整个互联网并尝试所有指导 我首先将图像插入到我的报告中 然后之后我去 gt Format Editor gt picture gt
  • Linux 中的独立 Python 应用程序

    如何在 Linux 中分发独立的 Python 应用程序 我想我可以理所当然地认为任何现代发行版中都存在最新的 Python 解释器 问题在于处理那些不属于标准库的库 即wxPython scipy python cryptographic
  • 内联定义函数与非内联函数有什么区别?

    我正在读这本书计算机程序的结构和实现 http mitpress mit edu sicp full text book book Z H 4 html在其中一章中 有一些代码用于计算数字的阶乘 define factorial n fac
  • 如何处理“表达式在检查错误后已更改”的特殊情况

    关于这个特定错误 有很多值得阅读的内容 以及一些适用于它所解决的特定实现的解决方案 我不知道它如何适用于我的 我正在根据 FormGroup 是否有效来更改材质扩展面板的背景颜色 我在某些 FormGroup 上有一些复选框表单控件 可以切
  • 如何在 Alexa 中使用带有意图确认的意图链?

    我正在尝试混合对话管理和意图链 我已禁用自动委派 但我被困在 当用户填写所有槽值时 我使用意图确认并提示他数据是否正确 如果用户说 否 我想出于同样的目的重新启动对话管理 但我得到的错误是 指令 Dialog Delegate 只能在对话框
  • Google Cloud Functions Java 11(测试版)运行时 - 性能问题

    我使用 Java 11 测试版 运行时创建了一个新的 Cloud Function 来处理静态站点的 HTML 表单提交 这是一个简单的 3 字段表单 姓名 电子邮件 消息 不涉及文件上传 该函数主要做两件事 使用 BitBucket 创建
  • Foreach 循环中的 PHP 引用对象

    假设我有这些课程 class Foo public data public function addObject obj this gt data objects obj class Bar public data public funct
  • “Docker On Windows”是否启动Linux虚拟机?

    我知道旧的 Docker Toolbox 使用 VirtualBox 为 Docker 运行一个最小的 Linux 虚拟机boot2docker http boot2docker io 这是一个最小的轻量级Linux操作系统 现在 随着新W
  • C++函数体中的常量变量

    我相信我已经理解了 但我只是想确认 如果我有两个功能 function A const Vector3D vectorA 1 0f function B float var const Vector3D vectorB 1 0f var 在
  • GTM 脚本后 dataLayer.push 不起作用

    我想使用 Google 跟踪代码管理器实施增强型电子商务 并且希望为标签 Universal Analytics 推送一些数据 我总是在 GTM 脚本之前创建 dataLayer 但现在我需要使用以下命令发送更多数据dataLayer pu