Google アナリティクスで 2 つの異なるヒットが同じユーザーに由来することを確認するには、そのユーザーに関連付けられた固有の ID を各ヒットと合わせて送信する必要があります。
analytics.js ライブラリでは、クライアント ID フィールド(ランダムに生成され、ブラウザの Cookie に保存される固有の ID)を使用して、ユーザーを確認しています。これによって、2 度目以降のサイトへの訪問を同じユーザーに関連付けることができます。
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 |
テキスト | _ga |
cookieDomain |
テキスト |
次の JavaScript 表現の結果:document.location.hostname
|
cookieExpires |
整数 | 63072000(2 年間(秒単位)) |
これらの値を変更するには、create コマンドで渡す fieldObject で別の値を指定します。次の例をご覧ください。
ga('create', 'UA-XXXXX-Y', {
'cookieName': 'gaCookie',
'cookieDomain': 'blog.example.co.uk',
'cookieExpires': 60 * 60 * 24 * 28 // Time in seconds.
});
最も一般的に設定されるフィールドは cookieDomain です。利便性を高めるため、次のように create コマンドではオプションの 3 つ目のパラメータとして cookieDomain フィールドを指定できます。
ga('create', 'UA-XXXXX-Y', 'blog.example.co.uk');
Cookie ドメインの自動設定
次の推奨 JavaScript トラッキング スニペットでは、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' に設定されます。
Cookie の有効期限
ヒットが Google アナリティクスに送信されるたびに、Cookie の有効期限はその時点の時刻と cookieExpires フィールドの値を足した値に更新されます。したがって、デフォルトの cookieExpires の時間である 2 年間を使用している状況で、ユーザーが毎月サイトを訪問する場合、Cookie が期限切れになることはありません。
cookieExpires を 0(ゼロ)秒に設定すると Cookie がセッション ベースになり、現在のブラウザ セッションが終了した時点で期限切れとなります。
Cookie からクライアント ID を取得する
Cookie の形式は将来変更される場合があるため、analytics.js で設定される Cookie に直接アクセスすることは避けてください。代わりに readyCallback を使用し、analytics.js が読み込まれるのを待ってから、トラッカーに保存された clientId 値を取得してください。
ga(function(tracker) {
var clientId = tracker.get('clientId');
});
Cookie を無効にする
セッションをまたいでクライアント ID を保持するため、Cookie 以外のストレージ方法(localStorage や Service 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 を実装する方法は次のとおりです。
- 個々のログイン済みユーザーを表す、個人を特定できない一意の永続的な文字列 ID を指定します。ほとんどの場合、この ID は認証システムから提供されます。
- 次のように、トラッカーに 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 アナリティクスでこれらのヒットに正しいユーザーを関連付けることができます。