2013-07-18 45 views
2

我現在使用Google跟蹤代碼管理器好幾周了。最近我有一個特殊的要求,我沒有找到答案。幾個容器可能共享同一個數據層嗎?在兩個容器的Js代碼中,我試圖給與datalayer相同的名稱:結果相當令人驚訝......每個容器中的所有標記都會執行兩次。GTM - 一個用於多個容器的數據層

具體來說,我嘗試發送兩個標籤中的事件在兩個不同的容器中。我想避免在我的onclick上有最大數量的無數次呼叫(因此有了一個單一的數據層的想法)

回答

0

這可能是顯而易見的(而且我還沒有測試過),但是您是否嘗試過你的dataLayer的副本?如果你只是在你的數據層變量下面添加一個賦值

dataLayer2 = dataLayer 

並配置你第二個容器到用戶dataLayer2?這肯定會是一個帶有動態推送變量的PITA,但是在頁面加載時呈現的所有內容都應該有效。

+0

GTM加載異步後,dataLayer中的push方法被覆蓋,因此未來的推送會立即執行,而不是一次又一次地循環,因此您的建議可能無法正常工作。 –

3

可以爲多個容器使用相同的dataLayer。也可以通過第一個容器包含第二個容器(作爲標籤)。

但是,對於頁面上包含的每個容器,「所有頁面」規則將觸發一次。所以如果你有3個容器,每一個在「所有頁面」上觸發的標籤將會被觸發3次。 (對於「gtm.js」等其他事件也是如此......)

我們發現了一個簡單的解決方案。只是包括每一個頁面上的「PAGE_LOADED」事件,並相應地改變了「所有頁面」規則:從頁面上使用的集裝箱數量

<script> 
var dataLayer = []; 
</script> 
<!-- Google Tag Manager --> 
<!-- End Google Tag Manager --> 
<script> 
dataLayer.push({"event": "page_loaded"}); 
</script> 

的PAGE_LOADED事件只觸發一次,獨立。

0

迄今爲止,似乎對我們有用的一種方法是像Eike所說的那樣重命名第二個容器的數據層變量。 GTM允許您更改初始化時所解釋這裏的變量名:https://developers.google.com/tag-manager/devguide#renaming

要跟蹤這兩個容器事件,你將不得不手動推到每個:

var data = {some:'data'}; 

dataLayer.push(data); 
otherDataLayer.push(data); 

你可以有不同的觸發器每個容器用於選擇性地將火情跟蹤到事件到GA或其他。

相關問題