【问题标题】:Can I do multiple dataLayer pushes for a single transaction in Google Tag Manager?我可以在 Google 跟踪代码管理器中为单个事务执行多个 dataLayer 推送吗?
【发布时间】:2021-09-02 15:37:11
【问题描述】:

我设置了用户完成购买时的跟踪。现在,我正在执行多个 dataLayer 推送——我推送订单总数,然后分别推送购物车中的每个产品:

dataLayer.push({
    'total': total
});

for(let i = 0; i < data.length; i++) {
    const product = data[i];

    dataLayer.push({
        'name': product.name,
        'price': product.price,
        'quantity': product.quantity,
        'sku': product.sku
    });
}

这可以接受吗?在某些示例中,我看到整个购买被推送为单次推送(即产品数组)。 GTM 在这两种情况下的行为是否相同?

【问题讨论】:

    标签: google-tag-manager google-datalayer


    【解决方案1】:

    您没有遵循语法。 https://developers.google.com/tag-manager/enhanced-ecommerce#purchases 产品旨在整齐地存储在非常特定的结构中。不仅仅是为了希望 GTM 能够神奇地处理缺乏严格结构的情况而被推入 DL。

    【讨论】:

      【解决方案2】:

      你的例子不起作用。

      只有当您将一个名为“事件”的键推送到数据层时,GTM 才会更新变量的内部状态。您的示例没有“事件”键,因此 GTM 甚至不会注意到您推送了某些内容,至少在稍后发生其他事件之前。

      即使您添加了一个事件,您的示例仍然无法按预期工作。

      由于您将带有键名称、价格等的产品数据推送到数据层的顶层,因此每次新推送都会覆盖它们(因为数据层中不能有重复的键)。

      您要做的是在循环中将产品添加到它们自己的数组中,然后将整个数组推送到数据层:

      var products = [];
      for(i = 0; i < data.length; i++) {
          const product = data[i];
          products.push({
              'name': product.name,
              'price': product.price,
              'quantity': product.quantity,
              'sku': product.sku
          });
      };
      
      dataLayer.push({
        "products":products,
        "event":"updateProductData"
      });
      

      如果您想将此用于 GA Enhances Ecommerce,最好遵循其他答案的建议,并根据 documentation 中的规范构建您的数据层。

      【讨论】:

      • 知道了。但是为什么documentation on the dataLayer 没有提到任何有关数据结构的内容,而电子商务文档却提到了呢?这就是令人困惑的地方。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      相关资源
      最近更新 更多