Google Analytics 4でIPアドレスとタイムスタンプを計測してレポートで見る方法

Google Analytics 4(以下,GA4)で,phpファイルを使ってIPアドレスとタイムスタンプ(アクセス時間)を計測(取得)する方法を紹介します.実装に使うのはGoogleタグ「Google tag (gtag.js)」です.なお,Google Analyticsなどのタグは,2022年の夏にグローバルサイトタグから,Googleタグに変更になりました.詳しくは下記の公式ヘルプを参考してください.

Google タグについて

グローバル サイトタグ(gtag.js)は Google タグになりました。今回の変更により、新規に gtag.js を設定する場合、および gtag.js がすでに設定されている場合のどちらでも、コードを追加することなく、利便性の向上、データ品質の改善、新しい機能の導入に役立つ新機能が利用できるようになります。

1.はじめに

本サイトでは,これまでGoogle Analyticsにおけるユニバーサルアナリティクス(以下,UA)とよばれるもので,IPアドレスなどを取得する方法をいくつか紹介してきました.

Google Analyticsで取得したIPアドレスのデータを見てみる

Googleは,UAは2023年7月で計測(サービス)を終了し,新しいGoogle AnalyticsであるGA4のみをサービスとして提供することを発表しています.

Googleの提供する無料のアクセス解析を今後も使う場合は,GA4を使う必要があります.ですが,GA4はUAとはかなり異なる仕様で,イベントと呼ばれる単位が計測の中心になっています.GA4の詳しい情報は,Googleの公式サイトや,株式会社HAPPY ANALYTICSの代表・小川卓さんの「GA4Guide」などを参照してください.

この仕様変更で,これまでのUAで計測していたカスタマイズや設定方法そのままでは,GA4でIPアドレスやタイムスタンプ(アクセス時間)が計測出来なくなります.そこで本記事では,Google タグのGA4に対応したそれら計測のためのカスタマイズや設定方法,そして計測した結果を見る方法を紹介します.

追記:GA4のカスタムディメンションを使う場合の注意事項を「8.補足(重要)」に書きました.

 

2IPアドレス取得に関する注意点

方法を説明する前に,IPアドレスなどを取得する上での注意すべきことを簡単に書いておきたいと思います.

日本でも個人情報保護法などの改正で,Webサイトのアクセス解析なども含め取得した情報の管理を厳格かする方向になっています.現状の日本では,IPアドレスは個人情報とはされていませんが,海外では個人情報扱いにされていたりします.このような法律で有名なのは,ブラジルのLGPD,アメリカ合衆国カリフォルニア州のCCPA,EUのGDPRなどがあります.またGoogle Analyticsの使用自体が禁止された国もあります.

このような海外の法律は,日本で開設しているサイトだから関係ないと無視するのは危険な場合があります.例えば,EU圏内に住んでいる人向けに商売をしている(海外顧客向けの通販サイトがある)場合などは,EUはそのサイト(企業)にGDPRを適用することがありえます(詳細は調べてください).

ネットでは,拠点は日本のみだから日本の法律を守っていれば大丈夫ということではすまない状況があることを理解しておく必要があります.

 

3.データ取得用phpファイルの説明

IPアドレスとタイムスタンプ(アクセス時間)を計測するのに,phpファイルを用います.その計測用phpファイル「analytics_ip.php」は, IPアドレスとタイムスタンプを計測するためのファイルからダウンロードできます(ファイルはzipで圧縮しているのでダウンロードの後に展開してください).

このphpファイルのコードは,

<?php

$SET = hash( 'md5' ,time() . ip2long(ip_check()));
$DATE = date("Y/m/d H:i:s"). "." . substr(explode(".", (microtime(true) . ""))[1], 0, 3);
$SECURE = isset($_REQUEST["s"])?1:0;

function ip_check(){
return $_SERVER["REMOTE_ADDR"];
}

?>

var setAnalytics = {};

setAnalytics.getIP = function(){
return '<?php echo ip_check(); ?>';
}

setAnalytics.getTimeStamp = function(){
return '<?php echo $DATE; ?>';

となっていますので,上記のコードをコピーして,拡張子を「php」として名前を付けて保存して作成することも可能です.

このphpファイルをサイトのファイルのあるサーバーにアップして使うことになります.

上記のphpファイルで,「IPアドレス」と「タイムスタンプ」が計測ができます.「アクセス時間」でなく「タイムスタンプ」と言っているのは,計測内容からそのほうが適切だろうと思うからです.GA4では,「イベント」という単位で計測します.ページを閲覧したイベント,リンクをクリックしたイベントというふうになるので,それらイベントごとの時間をミリ秒まで計測したいとなると思います(上記のphpのコードでは,ミリ秒まで計測する仕様にしてあります).したがって,「タイムスタンプ」と言うのがふさわしいという考えです.

ただし,この記事で紹介するphpファイルを使ったタイムスタンプの方法は,当然そのphpファイルが読み込まれた時の時刻のみが計測されるので,ページビュー後にそのページ内で引き続き行った他のイベント(スクロールやクリックなど)のタイムスタンプはこの方法では計測されません(UAでこのphpファイルを使っても同じように計測されます).

ページビュー以外のイベントのタイムスタンプを計測したい場合は,Googleタグマネージャーを使わないとできないと思います.以下は,UAを使った場合ですが,ページビューと各イベントのタイムスタンプを計測して,そのデータを出力して作成したレポートの紹介記事です.

ExcelでGoogle Analyticsのデータを使いユーザーレポート(行動履歴レポート)を作ってみた

 

4.トラッキングコードのカスタマイズ

2022年10月時点で,Google Analytics用のトラッキングコードは以下のようなGoogleタグが提供されています.

<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-A1CDEFGH9"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-A1CDEFGH9');
</script>

上記コードの「G-A1CDEFGH9」の部分は測定IDです.このIDはそれぞれで異なるので,該当サイトで使っているIDに置き換えてください.

なお上記のコードは,

GAの管理ページ > データストリーム > 「ウエブサイト」の項目をクリック  > 「ウェブ ストリームの詳細」の「Googleタグ」の「タグ設定を行う」をクリック > 「Googleタグ」の「設定」の「Googleタグ」で「実装手順」をクリック > 「手動でインストール」

でたどり着けます.すごく手間がかかるようになりました(図1参照).

図1.GA4のWebサイト用トラッキングコード

 

IPアドレスとタイムスタンプを3節の計測用phpファイル「analytics_ip.php」を使って計測したい場合,上記のコードを以下のようにカスタマイズして,サイトの各ページのコードすべてに反映させてください.

<script type="text/javascript" src="analytics_ip.php?s=X"></script>

<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id= G-A1CDEFGH9"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());

gtag('config', 'G-A1CDEFGH9', {
'custom_map': {
'dimension1': 'get_ip_address',
'dimension2': 'get_time_stamp'
},
'get_ip_address': setAnalytics.getIP(),
'get_time_stamp': setAnalytics.getTimeStamp()
});
</script>

赤色のフォントの部分がカスタマイズした箇所となります.

まず「<!– Google tag (gtag.js) –>」の上に追加した

<script type="text/javascript" src="analytics_ip.php?s=X"></script>

が,3節で計測のために使うphpファイル「analytics_ip.php」を読み込むためのコードです.このコードは,必ずGoogleタグの上に配置してください.もし,phpファイル名を「analytics_ip.php」以外にした場合は該当箇所を適時変更してください.

この例は,サイトのhtmlファイルとphpファイル「analytics_ip.php」が同じディレクトリにあるときを想定した表記です.計測対象のhtmlファイルが複数のディレクトリに分かれていて上記のコードを使う場合は,htmlファイルのあるすべてのディレクトリにphpファイル「analytics_ip.php」を配置する必要があります.すべてのディレクトリ内のhtmlファイルで共通のphpファイル「analytics_ip.php」を使いたい場合や,WordPressなどのCMSで共通のphpファイル「analytics_ip.php」を使いたい場合は,上記の「src=”analytics_ip.php」の部分を相対パスから絶対パスなどに適時変更して,その該当ページが開かれたときに計測用phpファイルが読み込まれるようにしてください

相対パスと絶対パス

http://www.shoshinsha.com/hp/1hour/know/pass.html

当たり前のことですが,計測用phpファイルを用意していない(サーバーにアップしていない)のに「<script type=”text/javascript” src=”analytics_ip.php?s=X”></script>」だけを記述しても意味が無いです(IPアドレスなどは計測できません).

次に,

 'custom_map': {
'dimension1': 'get_ip_address',
'dimension2': 'get_time_stamp'
},
'get_ip_address': setAnalytics.getIP(),
'get_time_stamp': setAnalytics.getTimeStamp()

  の部分ですが,計測用phpファイルの「setAnalytics.getIP()」から得られたIPアドレスの情報を変数「get_ip_address」にいれて,「‘dimension1’: ‘get_ip_address’」でGA4のカスタムディメンション「dimension 1」として送っています.同様に,計測用phpファイルの「setAnalytics.getTimeStamp()」から得られたIPアドレスの情報を変数「get_time_stamp」にいれて,「‘dimension2’: ‘get_time_stamp’」でGA4のカスタムディメンション「dimension 2」として送っています.

get_ip_address」や「get_time_stamp」は,違う記号(名前)でもかまいませんが,これらはGA4のイベントパラメータとして使うので注意してください.詳しくは以下の公式ヘルプなどを参照してください.

[GA4] カスタム ディメンションとカスタム指標

 

5GA4のカスタムディメンションの設定

以上のトラッキングコードの変更で(問題がなければ)計測データが送られるようになりますが,データを受け取る側でそのデータを受信する設定をする必要があります.

GA4の画面で「設定 > カスタム定義」を開きます(図2参照).「カスタムディメンションを作成」のボタンをクリックして,「新しいカスタムディメンション」を開いて(図3参照),カスタムディメンションを設定します.

図2.GA4のカスタム定義のカスタムディメンション

 

図3.新しいカスタムディメンション

 

「ディメンション名(図4の赤色枠内参照)」はわかりやすい名前を入力し,「範囲(図4の緑色枠内参照)」は今回の計測では「イベント」を選択し,「イベントパラメータ(図4の紫色枠内参照)」を入力し保存します(イベントパラメータは状況によっては選択することも可能).イベントパラメータは上述したように,カスタマイズしたコードに使われている記号(名前)を用いることになります.これらは必須項目です.

図4.カスタムディメンションの項目を入力

 

この記事の場合では,

ディメンション名

範囲

説明

イベントパラメータ

IP_Address

イベント

dimension1

get_ip_address

Time_Stamp

イベント

dimension2

get_time_stamp

としました.「説明(図4の水色枠内参照)」の欄の記入は任意ですが,カスタマイズしたコードで「dimension」の何番を使ったかをわかりやすくするように,上記のような記入をしました(図5参照).

あとは,実際のデータが貯まるのを待ちます(GA4では,すくなくとも1日ぐらいは待たないとレポートに表示できるデータとして反映されません).

図5.新しく追加されたカスタムディメンション

 

6.探索レポートの作成

計測したIPアドレスやタイムスタンプをGA4で見るために,「探索」機能を使います.

GA4のデータ探索で,「空白」を選択します(図6参照).

図6.GA4のデータ探索

 

変数の「ディメンション」の欄(図7の赤色枠内参照)の「+」をクリックし,「ディメンションの選択」で「カスタム」から「IP_Address」と「Time_Stamp」にチェックを入れて「インポート」をクリックします(図8参照).

図7.ディメンションと指標の欄

 

図8.ディメンションの選択

 

変数の「指標」の欄(図7の緑色枠内参照)の「+」をクリックし,「指標の選択」の「セッション」にチェックを入れて「インポート」をクリックします(図9参照).

図9.指標の選択

 

タブの設定の「行」に「IP_Address」と「Time_Stamp」を追加(図10の赤色枠内参照)し,「値」に「セッション」を追加する(図10の緑色枠内参照)と図11や図12のようなレポート(テーブル)が表示されます.

図10.行と値に追加

 

図11.探索レポートの完成

 

図12.IPアドレスとタイムスタンプとセッションのテーブル

 

この例では,ディメンションに「IP_Address」と「Time_Stamp」を並べたので,同じIPアドレスからのアクセスでイベントが計測されるごとにタイムスタンプが並ぶような表示になっています.実際のレポート作成では,IPアドレスやタイムスタンプを他のディメンションや指標とうまく組み合わせて活用してください.

なお,IPアドレスやタイムスタンプが計測できていない場合などは,図12のように「(not set)」と表示されます.

 

7.おわりに

以上で,GA4でIPアドレスとタイムスタンプを取得する方法の紹介は終わりますが,前述したようにその取得データの取り扱いなどには注意をしましょう.

なお,カスタマイズやその取得したデータの取り扱いは自己責任でお願いします.

 

8.補足(重要)

GA4の公式ヘルプのカスタムディメンションの扱いに関して,次のような記述があることを知りました.

高基数ディメンションとは、1 日あたりの固有の値の数が 500 を超えるディメンションです。高基数ディメンションではレポートの行数が多くなるため、行数の上限に達する可能性が高くなります。上限を超えたデータはすべて「(other)」行に集約されます。

詳しくは下記の引用やリンク先の公式ヘルプを参照してください.

この記事で紹介したIPアドレスやタイムスタンプは「高基数ディメンション」になりえます.とくにタイムスタンプは,(アクセス規模や取り方にもよりますが)常に違う値となるので「1 日あたりの固有の値の数が 500」をすぐに超えそうです.

IPアドレスも1日のユーザー数が500人以上確実にあるようなサイトだと,「高基数ディメンション」になります.

注意してください.

 

https://support.google.com/analytics/answer/10075209?hl=ja#zippy=,%E3%81%93%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%AE%E5%86%85%E5%AE%B9

カスタム ディメンションとカスタム指標のベスト プラクティス

カスタム ディメンションやカスタム指標を作成する前に、アナリティクスでデフォルトで入力されるディメンションと指標を使用できないかご検討ください。

標準の Google アナリティクス 4 プロパティを使用している場合は、不要な高基数のカスタム ディメンションは作成しないでください。不要な高基数ディメンションを作成すると、レポートに悪影響が生じ、データが「(other)」行に集約される可能性があります。

高基数ディメンションが作成される原因となる例(許可されない例または避けるべき例)を以下に示します。

各ユーザーの一意の ID に対してカスタム ディメンションを使用している(代わりに User-ID 機能を使用してください)。

詳しくは、ユーザー ID をカスタム ディメンションとして登録せずにユーザー ID のユースケースに対応する方法をご確認ください。

カスタム ディメンションを使用して、セッションごとに一意の ID(セッション ID など)を送信している

カスタム ディメンションとしてタイムスタンプを送信している

最後に、事前定義済みディメンションのパラメータ(ページおよびスクリーンの各ディメンション、取引 ID など)にカスタム ディメンションを登録することはおすすめしません。登録しても基数には影響しませんが、カスタム ディメンションのいずれかの割り当てをすべて消費してしまう恐れがあります。GA4 でカスタム ディメンションを使用する前に、事前定義済みディメンションのオプションをよくご確認ください。

 

https://support.google.com/analytics/answer/12226705

基数

基数とは、ディメンションに割り当てられた固有の値の数を指します。

ディメンションによっては、固有の値の数が決まっているものがあります。たとえば、「デバイス」ディメンションの値は、最大でパソコン、タブレット、モバイルの 3 つです。この場合、「デバイス」の基数は 3 になります。

他のディメンション(「アイテム ID」、「ページ階層」、「ページ ロケーション」など)の場合は、さらに多くの固有の値が存在します。e コマースのウェブサイトやアプリでは、アイテムの数が数十万件に上ることがあります。また、ウェブサイトに数十万もの固有のページが存在することもあります。これらのディメンションは、高基数になることが予想されます。

高基数ディメンション

高基数ディメンションとは、1 日あたりの固有の値の数が 500 を超えるディメンションです。高基数ディメンションではレポートの行数が多くなるため、行数の上限に達する可能性が高くなります。上限を超えたデータはすべて「(other)」行に集約されます。

高基数ディメンションは、収集した情報がビジネスでどうしても必要な情報である場合にのみ使用してください。不必要な使用を避けることで、すぐに行数制限に達することを防ぐことができます。