在行銷資料追蹤的實務中,Meta Pixel(Facebook Pixel) 與 GA4 Data Layer 的整合,是建立跨平台一致數據的關鍵。本文將從實際開發角度出發,解釋如何在 GTM 中生成 event_id、為什麼這個欄位對於 dedup(去重複事件)至關重要,以及當前端與後端資料不一致時,Meta 會如何處理。
🧩 一、event_id 是什麼?為什麼這麼重要
在 Meta 的事件追蹤體系中,每一筆事件都由以下三個欄位唯一識別:
pixel_id + event_name + event_idMeta 透過這三個欄位判斷事件是否重複。當前端(Browser Pixel)與後端(Server CAPI)都上報相同事件時,只要 event_id 一致,Meta 就會認為這是同一筆事件並進行去重。
⚙️ 二、GTM 中如何產生 event_id
在 Google Tag Manager 中,我們可以透過自訂變數生成一個由 timestamp 與亂數組成的 event_id,例如:
return getBrowserId() + '_' + getPageLoadId() + getGtmUniqueEventId();這段邏輯透過:
getTimestampMillis()取得時間戳generateRandom()產生隨機數- 組合出唯一識別碼
此 ID 會在同一頁載入期間保持一致,確保事件能夠跨前端與後端對應。
🧠 三、Server 端該怎麼產生相同的 event_id
Server 端可從前端傳遞而來的 event_id 使用,例如:
- 前端結帳完成時,將 event_id 寫入 GA4 dataLayer 或帶入 API payload。
- 後端接收到 webhook 或付款完成通知後,從該資料中取出相同的 event_id,並隨 CAPI 事件一併上報。
這樣,Meta 就能識別兩者屬於同一事件,避免重複計算。
💰 四、那 event_id 要不要直接用訂單編號?
理論上可以,但要注意:
- 若
order_id永遠唯一且不會重覆使用(即一筆訂單不會修改或重送),那麼可以直接用。 - 但若後端存在 webhook retry、訂單更新或重送機制,Meta 可能會將同一筆訂單誤認為多次購買。
因此建議:
✅ 使用
order_id + 隨機碼或order_id + timestamp組成 event_id。
🧨 五、為什麼同一筆 order_id 會造成混淆
假設:
- 使用者付款 → 前端送出一次
Purchase - 後端 webhook retry → 又送一次同樣的 order_id
從商務角度來看,這兩筆是同一筆交易;
但在 Meta 看起來,它只看到「兩筆不同事件」,除非 event_id 一樣。
因此:
Meta 只能透過
event_id辨識「重送事件」,而不是依order_id。
⚖️ 六、如果 event_id 相同但金額不同,Meta 會怎麼處理?
這是實務上最常見的陷阱之一。
當兩筆事件的 event_id 相同,但 value(金額)不同時:
| 狀況 | 結果 |
|---|---|
| event_id 相同,value 不同 | ✅ Meta 只保留第一筆事件 |
| 哪筆會被保留? | 通常是最先抵達 Meta 的那筆(常為前端事件) |
| 第二筆會怎樣? | ❌ 被標記為「Deduplicated」,完全不計入報表 |
👉 Meta 不會合併或比對金額,只會單純丟棄重複事件。
🧩 七、前端/後端重送流程視覺化
┌──────────────────────────────────────┐│ 使用者完成付款 → GA4 觸發 purchase │└──────────────────────────────────────┘ │ ▼ 前端 (Browser Pixel) event_name: Purchase event_id: ORD98765_XYZ123 value: 1999 │ ▼ Meta 收到事件 #1 ✅
▲ │ Server 端 (CAPI webhook retry) event_name: Purchase event_id: ORD98765_XYZ123 ← 相同 ID value: 1999 │ ▼ Meta 收到事件 #2 → ⚙️ Dedup → 只保留第一筆,第二筆捨棄若第二筆 event_id 改成 ORD98765_XYZ124:
Meta 就會當成「第二筆新購買」➡️ 導致重複統計。
✅ 八、最佳實務建議
| 角色 | 欄位 | 用途 | 注意事項 |
|---|---|---|---|
| Browser Pixel | event_id | dedup 唯一識別 | 與 server 一致 |
| Server CAPI | event_id | dedup 唯一識別 | 不可重新生成 |
| Order System | order_id | 訂單唯一 | 不作 dedup |
| GA4 | transaction_id | 對帳用 | 可等於 order_id |
✅ 一筆訂單 = 一個 event_id
重送、重發都要用同一個 ID。
🧭 九、實作建議流程
- 前端結帳 → 產生 event_id 並寫入 dataLayer
- 將 event_id 帶入 GA4
purchase事件 - Server 端在 webhook 或 CAPI 事件中使用同一 event_id
- 確認 Meta Events Manager Test Events 中,Browser 與 Server 事件的 event_id 完全一致
- 驗證 dedup 成功(CAPI 事件會顯示
deduplicated狀態)
🧩 十、總結
event_id是 Meta 去重的唯一依據order_id只是業務邏輯,不參與 dedup- 若 event_id 不同,Meta 會當成新事件
- 若相同但內容不同,Meta 會只保留第一筆
- 最佳實務:前後端共用 event_id,一筆訂單一個 ID
這樣設計能確保:
- 廣告轉換不重複計算
- CAPI 與 Pixel 一致化
- 後續資料分析與 ROAS 更準確
參考資源
回報錯字、失效連結,或告訴我你想看的延伸主題。