Javascript 由于懒散加载,连接数据层以进行印象跟踪

Javascript 由于懒散加载,连接数据层以进行印象跟踪,javascript,google-tag-manager,Javascript,Google Tag Manager,我想在元素可见性上实现印象跟踪。我在跟随西莫·阿哈瓦的指引 https://www.simoahava.com/analytics/true-view-impressions-google-tag-manager/ 现在我无法复制该示例,因为它需要将所有产品一次启动到数据层,但在我的情况下,我正在进行延迟加载,并且必须将产品批量推送到数据层。不幸的是,每次我们将某个元素推送到数据层时,它都只会在google tag manager上获取事件推送的最后一个值,因此产品很可能变得可见,但在数据层中

我想在元素可见性上实现印象跟踪。我在跟随西莫·阿哈瓦的指引

https://www.simoahava.com/analytics/true-view-impressions-google-tag-manager/
现在我无法复制该示例,因为它需要将所有产品一次启动到数据层,但在我的情况下,我正在进行延迟加载,并且必须将产品批量推送到数据层。不幸的是,每次我们将某个元素推送到数据层时,它都只会在google tag manager上获取事件推送的最后一个值,因此产品很可能变得可见,但在数据层中不再可用

这里有更详细的解释

步骤1:为了延迟加载,我们在数据层中进行了两次推送 1a。第一部分加载时的第一次推送

dataLayer=[];

dataLayer.push({
 event: 'eec.impressionView',
  "ecommerce": {
    "currencyCode": "USD",
    "impressions": [{
      "id": "9bdd2",
      "name": "Compton T-Shirt",
      "price": "44.00",
      "brand": "Compton",
      "category": "T-Shirts",
      "position": 0,
      "list": "shirts you may like"
    },
    {
      "id": "239b5",
      "name": "Pigzart T-Shirt",
      "price": "82.00",
      "brand": "Pigzart",
      "category": "T-Shirts",
      "position": 1,
      "list": "shirts you may like"
    }
    ],
  }
});
1b。延迟加载导致的第二次推送

dataLayer.push({
 event: 'eec.impressionView',
  "ecommerce": {
    "currencyCode": "USD",
    "impressions": [
    {
      "id": "7w9e0",
      "name": "Masons T-Shirt",
      "price": "31.00",
      "brand": "Masons",
      "category": "T-Shirts",
      "position": 2,
      "list": "shirts you may like"
    },
    {
      "id": "57b9d",
      "name": "Kiosk T-Shirt",
      "price": "55.00",
      "brand": "Kiosk",
      "category": "T-Shirts",
      "position": 3,
      "list": "shirts you may like"
    }
    ],
  }
});
2-现在让我们假设客户在第二个数据层推送产品“康普顿T恤”后有一个元素可见性触发器。它将无法知道这些信息是什么


所以我的问题来了,有没有一种方法可以将eec.impressionView事件连接到GTM端的单个事件中,或者有没有更好的方法来处理这种类型的问题,以便能够捕获您所遇到的印象被称为“递归合并”,因此,您推进到数据层的产品与内部数据模型中的现有产品合并,而不是附加到它

避免递归合并的最简单方法是在数据层推送中

而不是为您的后续印象进行完整的数据层推送

dataLayer.push({
事件:“eec.impressionView”,
“电子商务”:{
“货币代码”:“美元”,
“印象”:[
{
“id”:“7w9e0”,
“姓名”:“泥瓦匠T恤”,
“价格”:“31.00”,
“品牌”:“泥瓦匠”,
“类别”:“T恤”,
"立场":二,,
“列表”:“您可能喜欢的衬衫”
},
{
“id”:“57b9d”,
“姓名”:“Kiosk T恤”,
“价格”:“55.00”,
“品牌”:“信息亭”,
“类别”:“T恤”,
“立场”:3,
“列表”:“您可能喜欢的衬衫”
}
],
}
});
如果您可以将其用于后续的数据层推送,那么它是有效的

dataLayer.push(['ecommerce.impressions.push',
{
“id”:“7w9e0”,
“姓名”:“泥瓦匠T恤”,
“价格”:“31.00”,
“品牌”:“泥瓦匠”,
“类别”:“T恤”,
"立场":二,,
“列表”:“您可能喜欢的衬衫”
},
{
“id”:“57b9d”,
“姓名”:“Kiosk T恤”,
“价格”:“55.00”,
“品牌”:“信息亭”,
“类别”:“T恤”,
“立场”:3,
“列表”:“您可能喜欢的衬衫”
}]);
这将防止第二次推送覆盖现有值,因为您使用的是可见性触发器,所以不需要重复事件,数据模型中的其他所有内容都将相同


或者,您可以使用自定义HTML标记并在每个事件上触发该标记,以将印象存储在单独的JS对象中,并在增强的电子商务设置中引用该标记而不是数据层。

我正尝试使用此标记,但使用Google标记助手扩展,它不会显示使用此标记的进一步印象。您是否意识到这是GTA扩展的一个问题?我做的和OP和你做的完全一样@詹姆斯