有問題可以在文章底部留言

GTM資料層(Data Layer)完整解析

Google Tag Manager Haran 4年前 (2023-01-16) 6060次瀏覽 0條留言

更新時間:2026年6月5日

在GTM中,Data Layer是整個標籤管理系統的核心概念。

無論是追蹤網頁事件、電商交易、表單提交、按鈕點擊、或整合 Google Ads、Facebook Pixel、Adobe Analytics等第三方工具,幾乎都會使用Data Layer來傳遞資料。

可以說,只要開始使用GTM進行事件追蹤,就一定會接觸到Data Layer。

本文將介紹Data Layer的運作原理、基本語法、dataLayer.push() 的使用方式,以及如何在GTM中讀取資料,並分享實務上最常見的錯誤與除錯方法。

Data Layer是什麼?

Data Layer(資料層)本質上是一個JavaScript 陣列(Array),用來在網站與GTM之間傳遞結構化資料。

陣列中的每一筆資料通常都是JavaScript 物件(Object),可以包含事件名稱、商品資訊、交易資訊、使用者資訊等內容。

簡單來說,Data Layer就是網站與GTM之間的資料橋樑,負責將網站資料可靠地傳遞給GTM,再由GTM將資料送往GA4、Google Ads、Facebook Pixel 或其他分析工具。

為什麼需要Data Layer?

如果沒有Data Layer,GTM往往需要直接從網頁畫面(DOM)擷取資料。

GTM資料層(Data Layer)完整解析

網站上的資料可能因為 JavaScript、AJAX 或 SPA(單頁式網站)尚未完成載入,而導致:

  • GTM抓不到資料
  • 抓到舊資料
  • 每次取得的資料不一致
  • GA4或其他工具收到錯誤資訊

 

使用Data Layer後

GTM資料層(Data Layer)完整解析

網頁主動將資訊推送到資料層,GTM便能可靠讀取,提高資料準確性。

因此,Google 官方與業界最佳實務都建議優先使用Data Layer傳遞資料,而不是直接讀取網頁元素。

Data Layer的運作流程

整個流程可以分成四個步驟:

  • 初始化資料層:GTM 容器載入時,會先檢查是否存在 dataLayer 陣列,若不存在則建立。
  • 網站推送資料:當發生按鈕點擊、表單送出、加入購物車、完成購買等事件時,網站透過 dataLayer.push() 將資料推送到 Data Layer。
  • GTM讀取資料:GTM持續監聽Data Layer,當收到新的事件或資料時,會依據觸發條件與資料層變數讀取資料。
  • 標籤送出資料:GTM將資料送往 GA4、Google Ads、Facebook Pixel、Adobe Analytics 等第三方工具。

 

Data Layer基本語法

初始化Data Layer

通常網站會先建立 Data Layer:

window.dataLayer = window.dataLayer || [];

這行程式碼代表:

  • 如果Data Layer不存在,就建立新的陣列。
  • 如果已存在,就沿用原本資料,不會覆蓋內容。

 

使用dataLayer.push() 推送資料

例如:

window.dataLayer.push({
  'event': 'refund',
  'ecommerce': 'yui',
  'transactionId': 'T12345'
});
  • dataLayer.push():將資料推送到 Data Layer。
  • event:事件名稱,GTM 通常利用它作為觸發條件。
  • ecommerce、transaction_id :資料層變數,用於傳輸具體資訊。

 

Data Layer的巢狀結構

資料層是JavaScript物件,因此可以包含巢狀結構,例如:

window.dataLayer.push({
  'event': 'refund',
  'ecommerce':{
     'transactionId': 'T12345'
}});
  • event:事件名稱
  • ecommerce:一個資料層變數物件,可以嵌套多個變數。
  • transaction_id、:嵌套在ecommerce中的資料層變數,代表交易資訊。

大型電商網站通常會把所有商品、交易與使用者資訊放在巢狀結構中,方便管理與維護。

如何在GTM取得Data Layer資料?

接下來看如何在GTM中獲取數據層裡的自訂事件和資料層變數

建立自訂事件

在GTM中點擊「觸發條件」——「新增」——「請選擇觸發條件類型以開始設定…」——「自訂事件」,命名為“refund”,然後做如下設定:

GTM資料層(Data Layer)完整解析

事件名稱裡填event的值refund。

 

建立資料層變數

在GTM中點擊「變數」——「新增」——「請選擇變數類型以開始設定…」——「資料層變數」,命名為“dlv-ecommerce”,然後做如下設定:

GTM資料層(Data Layer)完整解析

dlv表示Data Layer Variables,建議是資料層變數都採用dlv-XXXXX的結構,便於區分。

資料層變數名稱就是資料層變數ecommerce。

  • 如果是嵌套的,那麼填ecommerce.transaction_id。
  • 如果裡面有數組,那麼用數值表示第幾個的值,如ecommerce.items.0.discount裡的0就表示是數組裡第一個。

 

dataLayer與dataLayer.push() 有什麼不同?

很多初學者最容易混淆這兩者。

dataLayer dataLayer.push()
建立資料層 推送新的資料到資料層
通常只初始化一次 可執行多次
不會主動通知 GTM 會通知 GTM 有新的事件與資料
不會觸發 Custom Event 可觸發 Custom Event

簡單來說:

  • dataLayer 是資料容器。
  • dataLayer.push() 是把新資料送進容器,同時通知GTM進行處理。

 

常見錯誤

推送資料時沒有event

例如:

dataLayer.push({
  transaction_id: "12345"
});

雖然資料已經推送成功,但如果GTM是依靠自訂事件作為觸發條件,因為沒有 event,標籤(Tag)就不會執行。

建議每次推送重要資料時,都加入明確的事件名稱

 

資料層變數名稱設定錯誤

如果資料層為:

ecommerce: {
  transaction_id: "T12345"
}

卻將變數名稱設定為transaction_id,GTM 將無法取得資料。

正確寫法應為ecommerce.transaction_id。

 

Data Layer 一定要使用嗎?

不一定。

GTM也能透過DOM、CSS Selector 或 JavaScript Variable 擷取資料,但官方與業界最佳實務仍建議使用 Data Layer,因為資料更穩定、維護成本也較低。

 

Data Layer是否只能搭配GA4使用?

不是。除了GA4,Data Layer也能搭配Google Ads、Facebook Pixel、Adobe Analytics、Microsoft Clarity等各種第三方追蹤工具使用,是GTM最通用的資料傳遞方式。

 

如果錯誤使用dataLayer會導致資訊沒有發送出去,GA4報告中会沒有數據:

GTM資料層(Data Layer)完整解析


如果您在操作上仍有任何疑問,歡迎留言交流,或加入:Google Analytics 4交流社團發問
Like (0)
發佈我的留言
取消留言
表情 贴图 加粗 删除线 居中 斜体

Hi,*为發佈留言必須填寫。

  • 顯示名稱*
  • 電子郵件地址*
  • 個人網站網址