跳到主要內容
Cypher's Practical Coding
正在準備工作環境...

電商追蹤實作

你已經知道什麼是事件、什麼是 Data Layer。現在我們要把它們組合起來,完成電商追蹤中最重要的一件事:讓 GA4 知道「誰買了什麼、花了多少錢」

這就是 purchase 事件。

purchase 事件的完整資料結構

一筆完整的 purchase 事件需要這些資料:

欄位層級說明範例
event最外層事件名稱"purchase"
transaction_idecommerce訂單編號(唯一)"T20240301-001"
valueecommerce訂單總金額2680
currencyecommerce幣別"TWD"
taxecommerce稅金0
shippingecommerce運費60
couponecommerce優惠券代碼"SUMMER20"
itemsecommerce商品陣列[{...}, {...}]

組裝一筆完整的 purchase 事件

我們用一個實際的電商訂單來組裝:

訂單情境: 客戶買了 2 件經典白T恤(590 元/件)和 1 雙運動鞋(1,500 元),使用優惠券 SUMMER20 折 200 元,運費 60 元。

為什麼要先 push { ecommerce: null }

養成好習慣:每次 push 電商事件之前,先 push { ecommerce: null } 清除前一筆資料。

計算訂單金額

value 是客戶「實際付款金額」,通常的計算方式:

value = Σ(price × quantity) - discount + shipping

GTM 的電商代碼設定(後台操作)

寫好 dataLayer.push 之後,你還需要在 GTM 後台設定對應的代碼和觸發條件:

步驟一:建立觸發條件

  1. GTM 後台 → 觸發條件 → 新增
  2. 類型選「自訂事件」
  3. 事件名稱填 purchase
  4. 儲存

步驟二:建立 GA4 事件代碼

  1. GTM 後台 → 代碼 → 新增
  2. 代碼類型選「Google Analytics:GA4 事件」
  3. 評估 ID 填入你的 GA4 Measurement ID(格式:G-XXXXXXX
  4. 事件名稱填 purchase
  5. 勾選「傳送電子商務資料」→ 資料來源選「Data Layer」
  6. 觸發條件選剛才建的 purchase 觸發條件
  7. 儲存

步驟三:設定所有電商事件的對照

dataLayer eventGTM 觸發條件GTM 代碼
view_item自訂事件 = view_itemGA4 事件:view_item
add_to_cart自訂事件 = add_to_cartGA4 事件:add_to_cart
begin_checkout自訂事件 = begin_checkoutGA4 事件:begin_checkout
purchase自訂事件 = purchaseGA4 事件:purchase

注意:每個電商事件的 GA4 代碼都要勾選「傳送電子商務資料」→ 來源選「Data Layer」。

完整的使用者旅程

把所有事件串在一起,模擬一個完整的購物流程:

本課重點

  • purchase 事件是電商追蹤的核心,讓 GA4 知道營收來自哪裡
  • transaction_id 必須唯一,用來避免重複計算
  • value 是實付金額,記得帶 currency
  • 每次 push 電商事件前,先 push { ecommerce: null } 清除殘留資料
  • GTM 後台需要對每個電商事件建立觸發條件和 GA4 事件代碼

下一課我們來學怎麼驗證追蹤碼是否正確運作——除錯與驗證。

AI 協作:學了這個,跟 AI 怎麼配合?

電商追蹤的程式碼格式固定,非常適合讓 AI 幫你批量生成。你負責提供商品資料結構和訂單邏輯,AI 幫你組裝 dataLayer.push。

你的人類優勢:

  • 你知道公司的訂單資料有哪些欄位可用
  • 你能確認折扣、運費的計算邏輯是否正確

可以這樣跟 AI 說:

我的電商訂單有這些欄位:order_id, total_amount, discount, shipping_fee, items(含 sku, name, price, qty)。請幫我寫一個函數,把這些資料轉換成 GA4 purchase 事件的 dataLayer.push 格式。

練習題

互動示範

DEMO 1可以修改程式碼試玩
DEMO 2可以修改程式碼試玩
DEMO 3可以修改程式碼試玩
DEMO 4可以修改程式碼試玩

挑戰任務

Task 1

請組裝一筆 purchase 事件的 dataLayer.push,transaction_id 為 "T-999",value 為 1200,currency 為 "TWD",items 中有一件 item_name 為 "帽子"、price 為 1200、quantity 為 1。最後印出 transaction_id。

Task 2

請宣告 items = [{price: 300, quantity: 2}, {price: 500, quantity: 1}],用 for 迴圈計算所有商品的小計總和,再加上 shipping = 60,用 console.log 印出最終的 value。

BackNext Lesson →