更新時間: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)擷取資料。
網站上的資料可能因為 JavaScript、AJAX 或 SPA(單頁式網站)尚未完成載入,而導致:
- GTM抓不到資料
- 抓到舊資料
- 每次取得的資料不一致
- GA4或其他工具收到錯誤資訊
使用Data Layer後
網頁主動將資訊推送到資料層,GTM便能可靠讀取,提高資料準確性。
因此,Google 官方與業界最佳實務都建議優先使用Data Layer傳遞資料,而不是直接讀取網頁元素。
Data Layer的運作流程
整個流程可以分成四個步驟:
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”,然後做如下設定:
事件名稱裡填event的值refund。
建立資料層變數
在GTM中點擊「變數」——「新增」——「請選擇變數類型以開始設定…」——「資料層變數」,命名為“dlv-ecommerce”,然後做如下設定:
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報告中会沒有數據:




