為了讓 Google Analytics (分析) 判斷兩個不同的命中屬於同一位使用者,每次命中都必須傳送與該使用者相關聯的不重複 ID。
analytics.js 程式庫會透過「Client ID」欄位完成這項操作。這是隨機產生的唯一字串,儲存在瀏覽器 Cookie 中,因此同一個網站的後續造訪也可與同一個使用者建立關聯。
根據預設,analytics.js 會使用名為 _ga
的單一第一方 Cookie 儲存用戶端 ID,但您可以自訂 Cookie 的名稱、網域和到期時間。analytics.js 建立的其他 Cookie 包括 _gid
、AMP_TOKEN
和 _gac_<property-id>
。這些 Cookie 會儲存其他隨機產生的 ID 和使用者廣告活動資訊。
使用 Cookie 可讓 analytics.js 識別不同的瀏覽工作階段中的不重複使用者,但分析不同瀏覽器或裝置就無法識別不重複使用者。如果網站有自己的驗證系統,則除了用戶端 ID 之外,您也可以使用 User ID 功能,更精確地在他們用來存取網站的所有裝置上識別使用者。
本指南說明如何自訂 Cookie 設定,以及如何設定 User-ID 欄位,以便更準確地評估各工作階段的使用者活動。
進行 Cookie 欄位設定
下表列出 analytics.js 使用的預設 Cookie 欄位值:
欄位名稱 | 值類型 | 預設值 |
---|---|---|
cookieName |
text | _ga |
cookieDomain |
text |
下列 JavaScript 運算式的結果:document.location.hostname
|
cookieExpires |
整數 | 63072000 (兩年,以秒為單位) |
cookieUpdate |
boolean |
true
|
cookieFlags |
text |
|
如要修改上述任一值,您可以在傳遞 create
指令的 fieldObject
中指定。舉例來說:
ga('create', 'UA-XXXXX-Y', {
'cookieName': 'gaCookie',
'cookieDomain': 'blog.example.co.uk',
'cookieExpires': 60 * 60 * 24 * 28 // Time in seconds.
'cookieUpdate': 'false',
'cookieFlags': 'SameSite=None; Secure',
});
最常見的 Cookie 欄位是 cookieDomain
,例如 create
指令接受 cookieDomain
欄位做為可選的第三個參數,以方便起見:
ga('create', 'UA-XXXXX-Y', 'blog.example.co.uk');
自動 Cookie 網域設定
建議的 Google Analytics (分析) 代碼會為 cookieDomain
欄位設定 'auto'
字串:
ga('create', 'UA-XXXXX-Y', 'auto');
將 'auto'
指定為 cookieDomain
會啟用自動 Cookie 網域設定,指示 analytics.js 自動判斷最合適的 Cookie 網域。
自動 Cookie 網域設定會在可用的最高層級網域設定 _ga
Cookie。例如,若您的網站位址是 blog.example.co.uk
,analytics.js 會將 Cookie 網域設為 .example.co.uk
。此外,如果 analytics.js 偵測到您在本機執行伺服器 (例如 localhost
),系統會自動將 cookieDomain
設為 'none'
。
Cookie 到期
每次 Google Analytics (分析) 收到命中資料時,Cookie 到期時間就會更新為目前時間加上 cookieExpires
欄位的值。也就是說,如果您使用兩年的預設 cookieExpires
時間,且使用者每個月都造訪您的網站,則他們的 Cookie 永遠不會過期。
如果您將 cookieExpires
時間設為 0
(零) 秒,Cookie 就會轉換為以工作階段為基礎的 Cookie,並在目前的瀏覽器工作階段結束時到期:
Cookie 更新
如果將 cookieUpdate
設為 true
(預設值),analytics.js 會在每次載入網頁時更新 Cookie。而 Cookie 到期時間也會隨之更新,根據最近一次造訪網站的時間進行設定。舉例來說,如果將 Cookie 到期時間設為一週,而使用者每五天使用同一個瀏覽器造訪網站,則 Cookie 到期時間會在每次造訪時更新,因此永遠不會過期。
如果設為 false
,系統就不會在每次載入網頁時更新 Cookie,而是會根據使用者首次造訪網站的時間,決定 Cookie 到期時間。
Cookie 標記
設定時可將其他標記附加到 Cookie。標記必須以半形分號分隔。
從 Cookie 取得用戶端 ID
請勿直接存取 Cookie analytics.js 組合,因為 Cookie 格式日後可能會改變。開發人員應改用 readyCallback
等待 analytics.js 載入,然後再取得儲存在追蹤程式中的 clientId
值。
ga(function(tracker) { var clientId = tracker.get('clientId'); });
停用 Cookie
在某些情況下,您可能想要使用自己的儲存機制 (例如 localStorage
或 Service Worker) 在不使用 Cookie 的情況下,在多個工作階段中保留用戶端 ID。您可以將 storage
欄位設為 'none'
,藉此停用 analytics.js 設定 Cookie。
ga('create', 'UA-XXXXX-Y', { 'storage': 'none' });
如果您自行儲存 clientId
欄位,請務必在建立追蹤程式時設定 cliendId
欄位。
ga('create', 'UA-XXXXX-Y', { 'storage': 'none', 'clientId': '76c24efd-ec42-492a-92df-c62cfd4540a3' });
如要停用 _gac_<property-id>
Cookie,請在 create
指令中將 storeGac
欄位設為 false
:
ga('create', 'UA-XXXXX-Y', {
storeGac: false,
});
使用 localStorage 儲存用戶端 ID
以下程式碼範例說明如何修改 JavaScript 標記,以使用 localStorage
儲存用戶端 ID,而不是 Cookie:
var GA_LOCAL_STORAGE_KEY = 'ga:clientId';
if (window.localStorage) {
ga('create', 'UA-XXXXX-Y', {
'storage': 'none',
'clientId': localStorage.getItem(GA_LOCAL_STORAGE_KEY)
});
ga(function(tracker) {
localStorage.setItem(GA_LOCAL_STORAGE_KEY, tracker.get('clientId'));
});
}
else {
ga('create', 'UA-XXXXX-Y', 'auto');
}
ga('send', 'pageview');
User-ID
User ID 是一種用來代表使用者的不重複、永久性不重複 ID 字串,且其中不含個人識別資訊,可讓您分析不同裝置上的工作階段群組。如要瞭解導入 User ID 的好處,請參閱「使用 User ID 功能的好處」。
如要透過 analytics.js 導入 User ID,請按照下列步驟操作:
- 請提供不重複且持續且不含個人識別資訊的字串 ID,用來代表每位登入使用者。這個 ID 通常是由驗證系統提供。
- 在追蹤程式上設定 User ID:
ga('create', 'UA-XXXXX-Y', 'auto', { userId: USER_ID }); ga('send', 'pageview');
處理頁面載入後的驗證作業
在建構單一頁面應用程式或其他動態網站,這類網站會在初次載入網頁後處理使用者登入作業,因此無法在建立追蹤器時設定追蹤器上使用者 ID 值。
在這種情況下,您可以使用 set
指令在得知追蹤工具上設定值。
// Creates the tracker and sends a pageview as normal // since the `userId` value is not yet known. ga('create', 'UA-XXXXX-Y', 'auto'); ga('send', 'pageview'); // At a later time, once the `userId` value is known, // sets the value on the tracker. ga('set', 'userId', USER_ID); // Setting the userId doesn't send data to Google Analytics. // You must also use a pageview or event to send the data. ga('send', 'event', 'authentication', 'user-id available');
使用這個方法時,在設定 userId
欄位之前傳送的命中不會包含使用者 ID 值。不過,透過稱為工作階段統合的程序,Google Analytics (分析) 就能在處理期間,將這些命中與正確的使用者建立關聯。