更新時間:2026年6月1號
在Google Tag Manager(GTM)中取得GA4的Client ID時,許多人第一個想到的方法通常是:
- 讀取第一方Cookie(_ga)
- 使用自訂JavaScript(Custom JavaScript Variable)
- 使用window.gaGlobal.vid
然而,這些方法都存在一定風險,在某些情況下可能無法正確取得Client ID,進而導致資料出現 (not set)、資料遺失或歸因錯誤等問題,因此並不建議作為正式環境的實作方案。
另外,也有部分開發人員會想到使用Universal Analytics(UA)時代常見的customTask方法。
但需要注意的是,GA4並不支援customTask,因此這種做法已不適用於GA4。
那麼,在GA4中該如何正確且準確地取得Client ID呢?
答案取決於你的GA4是如何部署的:
| GA4 安裝方式 | 取得Client ID的方法 |
|---|---|
| 網站原始碼硬編碼(gtag.js) | 使用 gtag(‘get’) 使用 |
| 使用GTM 部署GA4 | 使用Analytics存儲空間變數 |
| 使用GTM部署GA4 | 使用 readAnalyticsStorage API |
方法一:使用 gtag(‘get’)
如果你的網站是透過原始碼直接安裝 GA4,也就是使用 gtag.js 部署,那麼可以透過 Google tag API 直接取得 Client ID。
範例:
gtag('get', 'YOUR_MEASUREMENT_ID', 'client_id', (client_id) => {
// do something with client_id
})
注意事項:gtag(‘get’) 本質上是呼叫 Google tag API,因此必須先成功載入 gtag.js。
這種方法適用於:網站直接安裝 GA4,使用gtag.js部署
但如果你是透過GTM安裝GA4,通常不建議直接在GTM中依賴此方法,因為執行時機與載入順序可能造成Client ID無法穩定取得。
方法二:使用Analytics存儲空間(最推薦)
對於使用GTM部署GA4的網站而言,目前最推薦的方法是使用Analytics存儲空間(Analytics Storage) 內建變數。
這是GTM官方提供的功能,可以直接讀取GA4所儲存的資訊,不需要解析Cookie,不依賴Cookie,格式不受 _ga Cookie結構變動影響 ,支援Consent Mode取得結果最穩定,因此對於大部分 GTM 使用者來說,這是目前最佳實務(Best Practice)。
可取得的資料包括:
- Client ID
- Session ID
- Session Number
在GA4裡點擊「變數」——「新增」——「請選擇變數類型以開始設定…」——「Analytics存儲空間」,命名為“Client ID”,做如下設定:
方法三:使用readAnalyticsStorage API
如果你需要在GTM中進行更進階的客製化開發,可以使用GTM提供的readAnalyticsStorage API。
由於此 API 無法直接在一般變數中使用,因此需要建立,需要透過自訂變數範本去使用,你需要建立一個自訂變數範本,在裡面使用readAnalyticsStorage API去取得Client ID/Session ID,已經有人分享了程式,如:https://github.com/luratic/ga4_get_client_id_and_session_info。
結論
在GA4環境中取得Client ID時,應優先使用Google官方提供的方式,而非自行解析Cookie或使用非公開 API。
建議優先順序如下:
- Analytics存儲空間(GTM 最推薦)
- readAnalyticsStorage API(進階開發)
- gtag(‘get’)(硬編碼部署)
應避免:
- 直接解析 _ga Cookie
- 使用window.gaGlobal.vid
- 使用UA時代的 customTask
這樣不但能提高資料準確性,也能降低未來Google更新導致追蹤失效的風險。
延伸閱讀: