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和你做的完全一样@詹姆斯