Cookie 和使用者身分識別

為了讓 Google Analytics (分析) 判斷兩筆不同的命中屬於同一位使用者,每次命中都必須傳送與該使用者相關聯的專屬 ID。

analytics.js 程式庫會透過「用戶端 ID」欄位完成這項操作,這是儲存在瀏覽器 Cookie 中的隨機產生不重複字串,因此相同網站的後續造訪可以連結至同一使用者。

根據預設,analytics.js 會使用名為 _ga 的第一方 Cookie 儲存用戶端 ID,但您可以自訂 Cookie 的名稱、網域和到期時間。analytics.js 建立的其他 Cookie 包括 _gidAMP_TOKEN_gac_<property-id>。這些 Cookie 會儲存其他隨機產生的使用者 ID 和廣告活動資訊。

使用 Cookie 可讓 analytics.js 辨識所有瀏覽工作階段中的不重複使用者,但無法在不同瀏覽器或裝置上識別不重複使用者。如果網站有自己的驗證系統,您可以使用 User ID 功能以及用戶端 ID,藉此更準確地識別使用者透過各種裝置存取您網站的使用者。

本指南說明如何自訂 Cookie 設定,以及如何設定 User-ID 欄位,更準確地評估各工作階段的使用者活動。

下表列出 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');

建議的 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'

每次 Google Analytics (分析) 收到命中資料時,Cookie 到期時間就會更新為目前時間加上 cookieExpires 欄位的值。也就是說,如果您使用兩年的預設時間是 cookieExpires,且使用者每個月都造訪您的網站,則相關 Cookie 永遠不會過期。

如果將 cookieExpires 時間設為 0 (零) 秒,Cookie 會變為以工作階段為基礎的 Cookie,並在目前的瀏覽器工作階段結束時失效:

cookieUpdate 設為 true (預設值) 時,analytics.js 會在每次載入網頁時更新 Cookie。而 Cookie 到期時間也會隨之更新,根據最近一次造訪網站的時間進行設定。舉例來說,如果將 Cookie 到期時間設為一週,而使用者每五天就使用同一個瀏覽器造訪網站,則 Cookie 到期時間會在每次造訪時更新,因此永遠不會過期。

如果設為 false,系統就不會在每次載入網頁時更新 Cookie,這會根據使用者首次造訪網站的時間,決定 Cookie 到期時間。

設定時可將其他標記附加到 Cookie。標記必須以半形分號分隔。

您不應直接存取 Cookie analytics.js 組合,因為 Cookie 格式日後可能會變更。開發人員應改用 readyCallback 來等待 analytics.js 載入完成,然後再將 clientId 值儲存在追蹤程式上。

ga(function(tracker) {
  var clientId = tracker.get('clientId');
});

停用 Cookie

在某些情況下,您可能會想使用自己的儲存機制 (例如 localStorageService 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 的步驟如下:

  1. 請提供專屬、永久且非個人識別資訊的字串 ID,代表每位已登入使用者。這組 ID 通常是由驗證系統提供。
  2. 在追蹤程式上設定使用者 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 (分析) 可以在處理時將這些命中與正確的使用者建立關聯。