🍪

Google AnalyticsのCookieについての覚書

2022/01/20に公開

Google Analytics(のgtag.js)のCookieの設定をいじる機会があったのですが、色々と学んだことがあったためメモしておきます。

なぜGoogle AnalyticsはCookieを使うのか

公式ドキュメントに明確に書かれています。

Google アナリティクス4 では、gtag.jsは、以下の目的でファーストパーティCookieを使用します。

  • ユニーク ユーザーを区別する
  • ユーザーのセッションを区別する

Cookieに保存しておいた値をトラッキング時にGoogleのサーバーに送ることで、GAは「このアクセスとこのアクセスは同じユーザーによるものだなー」と判断できるといったイメージです。

GAによりセットされたCookieを削除すると、次回サイトに訪問したときには新規ユーザーとしてみなされることになります。

なぜファーストパーティCookieなのか

https://example.comというサイトにGAを導入した場合(デフォルトでは)GAのCookieのdomain属性はexample.comとなります。つまり、ファーストパーティCookieです。

このため、GAのCookieはhttps://example.com/*への各リクエストの際に送られることになります。サーバー側でGAのCookieを扱うことはないと思いますが、ファーストパーティCookieなので一緒についていってしまうというわけです。

しかし、サードパーティCookieはブロックされてしまったり、期限が短かったりするためファーストパーティCookieとせざるを得ないのだと思います。

GAのCookieをサブドメインには送らないようにする

デフォルトではGAのCookieはサブドメインへのリクエスト時にも送られることになります。

gtag.jsでは、Cookieドメインの自動設定がデフォルトで有効になっています。有効にすると、できる限り上位のドメインにCookieが設定されます。
Cookie ドメインの設定 - gtag.js

example.comへのリクエスト時に送られてしまうのは仕方がないとして、せめてサブドメインは除外したいというケースもあると思います。例えば、静的ファイルを配信するstatic.example.comに余計なCookieを送りたくないというような感じです。

gtag.jsでこの設定を行うにはconfigコマンドでcookie_domainプロパティを'none'に設定すれば良さそうです。

cookie_domainは自動的に'none'に設定されます。この場合は、ドキュメントの場所の完全なドメインを使ってCookieが設定されます。
Cookie ドメインの設定 - gtag.js

gtag('config', 'トラッキングID', {
  'cookie_domain': 'none'
})

cookie_domainの値を'none'にするとサブドメインにCookieが送られなくなる理由は、Cookieにdomain属性を設定しなかったときと同じ理屈だと思います。

Set-Cookieの際のDomain属性は、指定しない方が安全です。その理由は以下の通りです。

  • Domain属性を指定しないCookieは、Cookieを発行したホストのみに送信される
  • Domain属性を指定したCookieは、指定のホストおよびそのサブドメインのホストに送信される

CookieのDomain属性は*指定しない*が一番安全 - 徳丸浩の日記

GAのCookieの有効期限を短くする

デフォルトではGAのユーザーを区別するためのCookie(_ga)の有効期限は2年間です(参考)。

gtag.jsでこの期間を短くするにはconfigコマンドでcookie_expiresプロパティを指定します。例えば7日間にするには以下のような書き方になります。

gtag('config', 'トラッキングID', {
  'cookie_expires': 7 * 24 * 60 * 60  // 7日間
});

ここでcookie_expiresの値を0とすると、Cookieの有効期限はSessionとなります。

Session Cookieがブラウザを閉じても消えないことがあるので注意

ブラウザの設定によっては、ブラウザを閉じてもSession Cookieが消えないことがあります。

https://stackoverflow.com/questions/10617954/chrome-doesnt-delete-session-cookies

例えばChromeでは[起動時]の設定で[前回開いていたページを開く]にチェックが入っていると、Chromeを起動し直してもSession Cookieが残ってしまいます。

つまり、gtagの設定ではcookie_expires: 86400とするよりもcookie_expires: 0としたときの方がCookieが長く残る可能性があるので注意が必要です。


他にGAのCookie周りで何か気づいたことがあったら追記します。

Discussion