2016-10-03 91 views
0

我是GTM的新手,但在嘗試提交2個增強的數據圖層中的電子商務事件時遇到問題。當我查看Google Analytics(分析)時,只有最後一個事件似乎正在發送。Google跟蹤代碼管理器多個增強型電子商務事件

我遇到http://www.simoahava.com/analytics/ecommerce-tips-google-tag-manager/其中,就在總結之前,似乎總結一下我說的話就只提交最後一個。

dataLayer.push({ 
     'event': 'addToCart', 
     'ecommerce': { 
      'currencyCode': 'GBP', 
      'add': { 
       'products': dataLayerProducts 
      } 
     } 
    }); 
    dataLayer.push({ 
     'event': 'checkout', 
     'ecommerce': { 
      'checkout': { 
       'actionField': {'step': 1}, 
       'products': dataLayerProducts 
      } 
     } 
    }); 

只有結賬會在Google Analytics中註冊。我試過的東西像下面這樣:

dataLayer = [{ 
     'event': 'checkout', 
     'event': 'addToCart', 
     'ecommerce': { 
      'add': { 
       'products': dataLayerProducts 
      }, 
      'checkout': { 
       'actionField': {'step': 1}, 
       'products': dataLayerProducts 
      } 
     } 
    }]; 

dataLayer = [{ 
     'event': 'addToCart', 
     'ecommerce': { 
      'add': { 
       'products': dataLayerProducts 
      }, 
     } 
    }, { 
     'event': 'checkout', 
     'ecommerce': { 
      'checkout': { 
       'actionField': {'step': 1}, 
       'products': dataLayerProducts 
      } 
     } 
    }]; 

但我沒有運氣做這樣無論是。如果這是不可能的,任何有用的解決方法將不勝感激。

使用新代碼更新: 仍然只發送上一個事件(簽出)。代碼在開始<body>標記後立即出現。

<script> 
dataLayer = []; 
dataLayerProducts = []; 
dataLayerProducts.push({ 
    'name': 'Product Name', 
    'id': 'SKU', 
    'price': '29.95', 
    'brand': 'Brand', 
    'category': 'Some/Category', 
    'quantity': 1 
}); 
dataLayer.push({ 
    'event': 'addToCart', 
    'ecommerce': { 
     'add': { 
      'products': dataLayerProducts 
     }, 
    } 
}); 
dataLayer.push({ 
    'event': 'checkout', 
    'ecommerce': { 
     'checkout': { 
      'actionField': {'step': 1}, 
      'products': dataLayerProducts 
     } 
    } 
}); 
</script> 
<!-- Google Tag Manager --> 
// Code 
<!-- End Google Tag Manager --> 

回答

0

要觸發代碼觸發,你需要有一個事件,該事件是否是無論是從先前的推或當前的一個,所以這就是爲什麼它總是與推送event沿着一個很好的做法要發送到GA的數據點。 Simo的例子很好地說明了這一點。但是由於dataLayer也存在鍵:值對,它總是會使用它看到的最新事件。如果您同時推送多個event,則推入的最後一個覆蓋先前的那個。這就是爲什麼在一個dataLayer.push中不能有多個事件,並期望所有關聯的標籤都能觸發。

你需要做什麼遵循Simo的例子,並將每個數據集/對象連同它自己的event一起推送到dataLayer中。推送到dataLayer(dataLayer.push),而不是像您的示例中那樣聲明它們,可以讓內置偵聽器獲取這些特定的數據點。

編輯:修改OP的代碼爲例:

dataLayer.push({ 
    'event': 'addToCart', 
    'ecommerce': { 
     'add': { 
     'products': // dataLayerProducts, one object per product 
     }, 
    } 
}); 
dataLayer.push({ 
    'event': 'checkout', 
    'ecommerce': { 
     'checkout': { 
     'actionField': {'step': 1}, 
     'products': // dataLayerProducts, one object per product 
     } 
    } 
}); 
+0

你可以用代碼示例修改,以幫助我理解?因爲我如何閱讀它,當你說我需要用自己的事件推送每個數據集時,我認爲這就是我在問題的第一個代碼塊中所做的。 – Nathan

+0

在您的第一個代碼塊中,通過聲明第二個代碼覆蓋第一個事件。請記住正常的JS規則是適用的,所以如果你給一個變量賦值,然後再賦值另一個,那麼最後一個堅持。 – nyuen

+0

所以我採用了您的示例代碼,並使用完整的代碼編輯了我的問題。但是,只有結帳事件似乎正在推動。分析顯示沒有加入購物車的會話,但帶有結賬的會話顯示正確。 – Nathan

相關問題