Cookie とユーザーの識別

Google アナリティクスで 2 つの異なるヒットが同じユーザーに由来することを確認するには、そのユーザーに関連付けられた固有の ID を各ヒットと合わせて送信する必要があります。

analytics.js ライブラリでは、クライアント ID フィールド(ランダムに生成され、ブラウザの Cookie に保存される固有の ID)を使用して、ユーザーを確認しています。これによって、2 度目以降のサイトへの訪問を同じユーザーに関連付けることができます。

analytics.js は、デフォルトで _ga という名前の単一のファーストパーティ Cookie を使用してクライアント ID を保存します。この Cookie の名前、ドメイン、有効期限はすべてカスタマイズできます。analytics.js で作成されたその他の Cookie には、_gidAMP_TOKEN_gac_<property-id> が含まれます。これらの Cookie には、ユーザーについてランダムに生成されたその他の ID とキャンペーン情報が保存されます。

Cookie を使うと、analytics.js はブラウジング セッションをまたがってユニーク ユーザーを特定できます。ただし、ブラウザまたはデバイスをまたがって特定することはできません。サイトに独自の認証システムを導入している場合は、クライアント ID に加えて、User ID 機能を使うと、サイトへのアクセスに使用されるすべてのデバイスをまたがって、より正確にユーザーを特定できます。

このガイドでは、セッションをまたがるユーザー アクションをより正確に測定できるように、Cookie 設定をカスタマイズする方法と User ID フィールドを設定する方法を説明します。

次の表に、analytics.js で使用される Cookie のデフォルトのフィールド値を示します。

フィールド名 値の型 デフォルト値
cookieName テキスト _ga
cookieDomain テキスト 次の JavaScript 表現の結果:
document.location.hostname
cookieExpires 整数 63072000(2 年間(秒単位))
cookieUpdate ブール値 true
cookieFlags テキスト

これらの値を変更するには、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',
});

最も一般的に設定されるフィールドは cookieDomain です。利便性を高めるため、次のように create コマンドではオプションの 3 つ目のパラメータとして cookieDomain フィールドを指定できます。

ga('create', 'UA-XXXXX-Y', 'blog.example.co.uk');

次の推奨 Google アナリティクス タグでは、cookieDomain フィールドに文字列 'auto' を指定しています。

ga('create', 'UA-XXXXX-Y', 'auto');

cookieDomain として 'auto' を指定すると、Cookie ドメインの自動設定が有効になり、最適な Cookie ドメインが自動的に使用されます。

Cookie ドメインの自動設定では、_ga Cookie ができる限り上位のドメインに設定されます。たとえば、ウェブサイト アドレスが blog.example.co.uk の場合、Cookie ドメインは analytics.js によって .example.co.uk に設定されます。なお、サーバーがローカル環境(localhost など)で実行されていることを検出すると、cookieDomain は自動的に 'none' に設定されます。

ヒットが Google アナリティクスに送信されるたびに、Cookie の有効期限はその時点の時刻と cookieExpires フィールドの値を足した値に更新されます。したがって、デフォルトの cookieExpires の時間である 2 年間を使用している状況で、ユーザーが毎月サイトを訪問する場合、Cookie が期限切れになることはありません。

cookieExpires0(ゼロ)秒に設定すると Cookie がセッション ベースになり、現在のブラウザ セッションが終了した時点で期限切れとなります。

cookieUpdatetrue(デフォルト値)に設定されていると、ページが読み込まれるたびに Cookie が更新されます。つまり、サイトへの最新の訪問に基づいて Cookie の有効期限が更新されます。たとえば、Cookie の有効期限が 1 週間に設定されていて、ユーザーが 5 日ごとに同じブラウザを使用して訪問した場合、Cookie の有効期限は訪問ごとに更新されるため、有効期限が切れることはありません。

false に設定すると、Cookie はページの読み込みごとには更新されません。つまり、ユーザーが最初にサイトにアクセスしたときに基づいて Cookie の有効期限が決まります。

設定時に Cookie に追加のフラグを追加します。フラグはセミコロンで区切る必要があります。

Cookie の形式は将来変更される場合があるため、analytics.js で設定される Cookie に直接アクセスすることは避けてください。代わりに readyCallback を使用し、analytics.js が読み込まれるのを待ってから、トラッカーに保存された clientId 値を取得してください。

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

Cookie を無効にする

セッションをまたいでクライアント ID を保持するため、Cookie 以外のストレージ方法(localStorageService Worker など)を使用する場合、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 タグを変更して、Cookie の代わりに localStorage を使用してクライアント ID を保存する方法を示しています。

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. 次のように、トラッカーに User ID を設定します。
ga('create', 'UA-XXXXX-Y', 'auto', {
  userId: USER_ID
});
ga('send', 'pageview');

ページ読み込み後の認証を処理する

最初のページ読み込み後にユーザーのログインを処理するシングルページ アプリケーションまたは他の動的ウェブサイトを作成する場合、トラッカーに User ID 値を設定するプロセスは作成時には発生しません。

このような場合、set コマンドを使用すると、User ID 値が通知された時点でトラッカーに User ID 値を設定できます。

// 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 フィールドが設定される前に送信されたヒットには User ID 値が含まれません。ただし、セッション統合と呼ばれるプロセスを使用すれば、データ処理の際に Google アナリティクスでこれらのヒットに正しいユーザーを関連付けることができます。