Google AnalyticsでIPやCookieを判別できるようにする「PHPAnalyticsIP」を作った

2014年12月5日に動かなかったプログラムを修正しました。
タイプミスによりうまく動かなかったものを修正しました。

2014年7月21日に設定を変更しました。
セッションごとにcookieが変更されてしまうものを修正しました。

Google Analyticsといえば、多分世界で一番使われている解析ツール。
最高に便利なのですが、これがあればもっといいのになあと思う機能の一つに生ログがあります。残念ながらAnalyticsには1人1人を追跡する機能がないです。大体のサイトでコンバージョンとなる、フォームから送られてくるデータと照らし合わせ、特定する場合に、カスタムセグメント地獄に陥りやすく手間になります。
Analyticsはグループ化したデータを見るのに最適ですが、1人1人のデータを見るのには工夫が必要となります。

IPとCookieをAnalyticsで見られるようにしよう

IPとCookieをAnalyticsで見られるようにするサイトとして、AnalyticsIPさんがあります。しかしながら、クロスドメインとなってしまうため、Safari(Win・Mac・iPhone・Ipad)と一部アンドロイド端末(多分)でIPでは判別できてもCookieで判別することが出来ません。
スマホが普及してますし、かつスマホの場合IPがコロコロ変わりやがるのでCookieが取得できないのはどうしたものか。。。というわけで作りました。

PHPAnalyticsIP

https://github.com/tanshio/phpAnalyticsIPzip

機能

オリジナルであるAnalyticsIPさんのメソッド名を拝借させていただきました。PHP版とJS版の2パターンあります。

setAnalytics.getIP()

→ex. XXX.XXX.XXX.XXX
IPアドレスを返します。
JS版では対応していません。

setAnalytics.getCookie()

→MD5 hash
ハッシュ化してユニーク化しているつもりのものを返します。
JS版ではランダムな文字列2つくっつけてユニーク化しているつもりです。

setAnalytics.getAccessTime()

→ex. 2014/05/28 12:04:42
ページを開いた時間を返します。

なんかバグとかあったらコメント下さい。


ファイル

色んなパターンに備えた結果ファイルが多いです。用途によってどれか一つをお使い下さい。

PHP版

  • analytics.php
  • analytics.min.php(minify)
  • analytics.tag.php(タグマネージャー用)
  • analytics.tag.min.php(タグマネージャー用minify)

オプション
PHP版では、なんでもいいのでパラメーターを渡すとセキュアなクッキーを発行します。

独自SSLを使用している場合のみ有効。フォームだけ共有SSLなどではCookieで特定することができなくなります。

JS版

JSではIPが取得できません。PHPを使えない、IPが取得できなくても良い場合や、アクセス時間がブラウザの時刻でもまあいいかという人はこちらをどうぞ。

  • analytics_cookie.js
  • analytics_cookie.min.js(minify)
  • analytics_cookie.tag.js(タグマネージャー用)
  • analytics_cookie.tag.min.js(タグマネージャー用minify)

設定

Analytics(ユニバーサルアナリティクス)の設定

Analyticsの設定からカスタムディメンションを選び、下記のように3つ追加します。インデックス番号が重要となります。

カスタムディメンション

3つとも名前だけ違うのみで設定は同じです。
カスタムディメンションの設定

Google Tag Managerの設定

Google Tag Managerを使用している場合、データレイヤー変数を3つ追加する、イベントの追加、カスタムディメンションの設定、ルールの変更をしなくてはなりません。難しい用語ばかりですが下記の通り設定すればうまくいくはずです。使用していない場合は飛ばして下さい。

データレイヤー変数の追加

Google Tag Managerでは何でもかんでもマクロというもので管理しています。このマクロに、データレイヤー変数を3つ追加します。

上記のような画面(なんでもいいのでマクロをクリックして、マクロをコピーするのが楽です)で上のような感じで

  • setIP
  • setCookie
  • setAccessTime

3つ作成して下さい。名前は固定です。

イベントの追加

先ほどのマクロの追加と同じように、マクロのタイプをカスタムイベントに設定してマクロ名をsetAnalytics_eventとして追加します。

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

Google Tag Managerのタグの設定メニューから、詳細設定→カスタムディメンションで設定します。
Analyticsで設定したカスタムディメンションのインデックス番号に合わせて、どれがIPでどれがCookie、どれがアクセス時間として設定するのか各自設定して下さい。

ルールの変更

Google Tag Managerではルールを設定することにより、どういった条件でタグを発火させるのかを設定することが出来ます。

ここではさきほど設定した、setAnalytics_eventというイベントが発動した瞬間にAnalyticsを呼び出す設定にしています。

以上でGoogle Tag Managerの設定は終わりです。


コードの埋め込み場所

ファイルをHTMLの指定した場所に埋め込んで下さい。

ユニバーサルアナリティクスの場合

Analyticsのタグの前において下さい。できればAnalyticsで発行されたタグをの前に置き、ファイルを直下に埋め込むとAnalyticsにデータが送信されます。

IPアドレスのインデックス番号が1Cookieが2アクセス時間が3の場合は下記のとおりです。

Google Tag Managerの場合

Google Tag Managerで発行されたタグの下に置いて下さい。公開設定を行っていればトラッキングされているはずです。

まとめ

うまくトラッキングされていればセカンダリディメンションに表示されます。あとはカスタムレポートなどで色々見ることが出来ます。

何が便利って、APIで絞ることにより1人1人のデータが簡単に取得できることです。

コンバージョンを集計するフォームにhiddenでCookieの値を入れることにより、上記のようにGmailに届いたらスプレッドシートに自動的に入力されているなんてことも可能です。フォームの値もスプレッドシートに入れることも頑張ればできます。これについては今後書くかも。

取得率は現在99.9%なので今流行のビッグデータとしても使えるかもしれませんね!!それではより良い解析ライフを〜\(^o^)/

Google AnalyticsでIPやCookieを判別できるようにする「PHPAnalyticsIP」を作った」への17件のフィードバック

  1. smz

    とても便利に使わせて頂いています。
    ありがとうございます!

    ところで、独自SSLでもcookieIDがコロコロというかページセッション毎に代わってしまう原因に心当たりはありますか?

    返信
  2. tanshio 投稿作成者

    >>smzさん

    コメントありがとうございます。
    独自SSLでcookieがコロコロ変わってしまうということですか。。。
    確認してみます!

    返信
  3. tanshio 投稿作成者

    >>smzさん

    先ほど設定を変更し、セッションごとにcookieが変更されてしまう件を修正しました。
    確認してみてください!
    このたびはありがとうございました。

    返信
  4. smz

    tanshioさま

    迅速な対応ありがとうございます。
    確認したところ確かに直っております。
    引き続き活用させて頂きますm(_ _)m

    返信
  5. takashi

    利用してみようとファイルをダウンロードさせて頂きました。
    しかしなぜか利用出来ず、アップしたファイルを直接アクセスしたところエラー文が表示されてしまいます。
    analytics.tag.php
    analytics.tag.min.php
    analytics.php
    analytics.min.php※
    試したのは上記ファイルで、analytics.min.php※のみIPや時間が表示されましたが他のはエラーでした。

    なにか対処法があれば追記していただけたら幸いです。

    返信
    1. tanshio 投稿作成者

      takashiさん
      こんにちは。ドメインが失効してしまい返信が遅れてしまい申し訳ないです。

      エラー文をコメント欄にペーストしていただけますでしょうか。
      宜しくお願い致します。

      返信
  6. takashi

    tanshioさま

    ご連絡ありがとうございます!
    各ファイルをアップし直接アクセスした結果下記のように表示されます。
    いくつかは伏せ字となります。

    ■analytics.tag.php
    Parse error: syntax error, unexpected ‘{‘ in /home/users/0/XXX/web/analytics/analytics.tag.php on line 7

    ■analytics.tag.min.php
    Parse error: syntax error, unexpected T_STRING in /home/users/0/XXX/web/analytics/analytics.tag.min.php on line 1

    ■analytics.php
    Parse error: syntax error, unexpected ‘{‘ in /home/users/0/XXX/web/analytics/analytics.php on line 7

    ■analytics.min.php
    var setAnalytics={getCookie:function(){return ‘AAAAA’},getIP:function(){return ‘BBB.BB.BB.BBB’},getAccessTime:function(){return ‘2014/12/02 01:19:49’}};

    アナリティクスのコードは貼っていない状態でのアクセス結果です。

    以前analytics.min.phpでは測定OKだったと思い利用させて頂いてたのですが、
    ある日連続した外部クリック(CPC広告)は初回のみしか計測されていない事に気がつき、タグマネージャーを利用してみようと思ったのが経緯です。

    返信
    1. tanshio 投稿作成者

      takashiさん

      エラー文の投稿有難うございます。
      おかげでどこがエラーかわかりました!些細なタイプミスだったようです。申し訳ございません。

      再度ダウンロードして頂けますと無事動くはずです。
      よろしくお願いいたします。

      返信
  7. taka

    現在PHP版を、GTMで利用させて頂いております。ありがとうございます。
    1つお聞きしたいことがございます。
    この設定を行ってから、アナリティクスでコンバージョンキーワードの取得ができなくなってしまったのですが、もしも心当たりがございましたらアドバイス頂けますと幸いです。

    返信
    1. tanshio 投稿作成者

      >>takaさん

      こちらで確認しましたところ、複数サイトでちゃんとキーワードの取得ができていることが確認できました。
      (コンバージョン・参照元ともにキーワードの確認ができています)
      タグマネージャーの設定の確認をお願いできますでしょうか。

      返信
  8. taka

    tanshioさま

    ご返信が遅くなり、大変失礼致しました。試行錯誤しておりましたが、私の初歩的なミスによるものでした。このような素晴らしい内容のを公開頂き、誠に感謝しております!ありがとうございます!

    返信
  9. M

    素晴らしいコードを公開してくださってありがとうございます。

    しかしながら、タグマネージャのタグの直後にPHPコードを置いたところ、以下の警告が出てしまいます。

    Warning: Cannot modify header information – headers already sent by…

    設置場所はタグマネージャの直後でよろしかったでしょうか?

    返信
  10. M

    ご返信誠にありがとうございます。

    今さらながらご返信を頂いたことに気付きまして、大変申し訳ございません。

    お陰様でエラーは出なくなったのですが、
    以下のとおり、コードの一部がそのまま表示されてしまいます。

    var setAnalytics = {}; setAnalytics.getCookie = function(){ return ‘***’; } setAnalytics.getIP = function(){ return ‘::1’; } setAnalytics.getAccessTime = function(){ return ‘2015/07/24 04:17:38’; } setAnalytics.data = { “setCookie” : setAnalytics.getCookie(), “setIP” : setAnalytics.getIP(), “setAccessTime” : setAnalytics.getAccessTime(), “event” : “setAnalytics_event” } dataLayer.push(setAnalytics.data);

    素人丸出しで大変恐縮なのですが、ご教示いただければ大変助かります。

    何卒宜しくお願い申し上げます。

    返信
    1. tanshio 投稿作成者

      >>Mさん
      そのファイルをJSファイルとして読み込んでいただくだけで終わりです!


      お試しください!

      返信
  11. M

    >>tanshioさん

    ありがとうございました。
    お陰様で計測できるようになりました。

    重ね重ね恐縮ですが、もう1点相談させてください。

    当方では、3サイトを運営しており、クロスドメイントラッキングを行っております。

    この3サイトで同一ユーザのcoocieを統合して解析したいのですが、どのようにすればよろしいでしょうか?

    返信
  12. カイザー

    今日は。現在wixにてHPを管理しいて、analytics使用しているのですが、この環境でもこのソフトを使用することは可能でしょうか?

    返信

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です