為了讓 Google Analytics (分析) 判斷兩筆不同的命中屬於同一位使用者,每次命中都必須傳送與該使用者相關聯的專屬 ID。
analytics.js 程式庫會透過「用戶端 ID」欄位完成這項操作,這是儲存在瀏覽器 Cookie 中的隨機產生不重複字串,因此相同網站的後續造訪可以連結至同一使用者。
根據預設,analytics.js 會使用名為 _ga
的第一方 Cookie 儲存用戶端 ID,但您可以自訂 Cookie 的名稱、網域和到期時間。analytics.js 建立的其他 Cookie 包括 _gid
、AMP_TOKEN
和 _gac_<property-id>
。這些 Cookie 會儲存其他隨機產生的使用者 ID 和廣告活動資訊。
使用 Cookie 可讓 analytics.js 辨識所有瀏覽工作階段中的不重複使用者,但無法在不同瀏覽器或裝置上識別不重複使用者。如果網站有自己的驗證系統,您可以使用 User ID 功能以及用戶端 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),保留跨工作階段的用戶端 ID,而不使用 Cookie。如要停用 analytics.js 設定 Cookie,請將 storage
欄位設為 'none'
。
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 通常是由驗證系統提供。
- 在追蹤程式上設定使用者 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 (分析) 可以在處理時將這些命中與正確的使用者建立關聯。