ユーザーエージェントの情報を利用したリファラスパム対策

たしか2015年春ぐらいからだと思いますが,Google Analyticsの集客データのチャネル「Referral」や「Direct」などにおかしなアクセスが入り始めました.これはリファラスパムと呼ばれるもので,Google Analyticsの仕様を悪用して集客目的などでサイトへのアクセスとは無関係なウエブサイトからのアクセスです.この記事では,このリファラスパムをユーザーエージェントの情報をつかって除外する方法を紹介します.

 

1.リファラースパム

まず,リファラスパムですが,これは実際にはサイトを訪問することなく,Google Analyticsに無作為にデータを送りつけています.例えば日本語のサイトなのにロシアあたりからいきなり何十件というリファラーのセッションが増えたという場合は,たいていリファラスパムです.なお,そのようにリンク元のサイトにはむやみにアクセスしないほうがよいと思います(ウィルスなどが仕込まれているかもしれませんので).

例えば図1は集客レポートのチャネル「Referral」の中です.セッションが「109」ありますが,参照元「search.fenrir-inc.com」以外はすべてリファラスパムです(参照元「search.fenrir-inc.com」は,実際は検索だと思います.これはGoogle Analyticsのデフォルト設定では検索サイトとして登録されていないためにチャネル「Referral」に分類されていると思われます.記事「Google Analyticsで日本固有の検索エンジンを追加する」を参照してください).

 

図1.集客レポートのチャネル「Referral」の例

 

2.リファラースパムへの対策案

さてこのようなリファラスパムはアクセス解析には当然邪魔な存在で,アクセス数が少ないサイトだととくに大きな影響が出てしまいます.

対策としてはいろいろ紹介されています.例えば

<完全版>リファラースパムをたった1つのフィルタで撃退する方法

https://sem-technology.info/ja/google-analytics/referrer-spam-avoidance-new

でかなり早い段階からその対策を紹介されていました(ただGoogle Analyticsのコードのカスタマイズをしていると上記で紹介している方法でうまくいかない場合もあるようです).

今回は本サイトの記事「Google Analytics(analytics.js版)をカスタマイズしていろいろなデータを集計する(PHPファイル使用版)」などで紹介したユーザーエージェントの情報を取得している場合に出来る簡単な対策を紹介します.Google Analyticsのカスタムディメンションでユーザーエージェントを取得すると,図1のレポートでセカンダリディメンションの追加で,ユーザーエージェントを選択できます.図2は,図1のレポートでセカンダリディメンションでユーザーエージェントを選択した結果の表示となっています.

 

図2.セカンダリディメンションでユーザーエージェントを選択した結果の表示

 

リファラスパムのセッションは(通常は)ユーザーエージェントの情報がありません.その結果,図2のように参照元「search.fenrir-inc.com」以外のセッションは表示から消えます.リファラスパム対策として,この性質を使います.ユーザーエージェントの情報を見ると半角のカッコ記号「 ( 」が含まれていることがわかります.つまり,ユーザーエージェントの半角のカッコ記号「 ( 」だけが含まれているものだけを集計対象とすれば,ほとんどのリファラスパムを除外できます.

例えば,アドバンスセグメントで図3のように条件で「ユーザーエージェントが ( を含む」としたもの(ここでは「UAスパム対策条件」と名付けました)を作ります.セグメント「すべてのユーザー」と「UAスパム対策条件」をつかって,図1のレポートを表示させると,図4のようになります.このようなセグメントを利用してリファラスパムを除外できます.

 

図3.ユーザーエージェントの情報を使ったアドバンスセグメントの作成例

 

図4.すべてのユーザーと作成したセグメントを使った表示結果

 

さらに,リファラスパム自体をビューのフィルタ機能で除外することも出来ます.図5はその設定例です.フィルタパターンとして「 \( 」を使っています(図5の表記はバックスラッシュ記号に半角カッコですが,日本語表記環境だとバックスラッシュ記号が半角の\記号になります.したがって,この記事のテキストでは「 \( 」となっています).これによって,ユーザーエージェントの情報に半角のカッコ記号「 ( 」が含まれているアクセスだけこのビューでは集計するようになります.これは正規表現で特殊文字である半角のカッコ記号「 ( 」と指定しています.Google Analyticsの正規表現に関しては

正規表現(regex)について

https://support.google.com/analytics/answer/1034324?hl=ja

を参照してください.

 

図5.ユーザーエージェントの情報を使ったリファラスパム対策のビューフィルタ

 

3.注意点

注意としてフィルタをつかったデータ変更は,後になってそれを無くしたいと思っても戻せません.つまり,上記のようにフィルタで除外したデータ(つまり,この例ならばユーザーエージェントの情報に半角のカッコ記号「 ( 」が含まれていないアクセス)は集計されなくなるので,後でこのフィルタを削除しても除外していたデータは復活しません.またフィルタを設定する前のデータにも反映されないので,設定前のデータにはユーザーエージェントの情報に半角のカッコ記号「 ( 」が含まれていないアクセスデータはそのままです.ビューのフィルタに関しては公式へプルの

ビューフィルタについて

https://support.google.com/analytics/answer/1033162?hl=ja&ref_topic=1032939

などを参照してください.

実際にフィルタを適用したビューの図1と同じ時期の集計レポートのチャネル「Referral」は図6のようになっています・

 

図6

 

4.おわりに

以上でユーザーエージェントの情報を使ったリファラスパム対策方法の紹介は終わりですが,リファラスパムンの多くはGoogle AnalyticsのトラッキングIDが「UA-xxxxxxxx-1」のもの,つまり最後の番号が「1」のIDに送られてきまます(自分の環境で見たところこれまでの所その大半がトラッキングIDが「UA-xxxxxxxx-1」がターゲットーで,たまに「UA-xxxxxxxx-2」になどにも送られてきたりもしました).したがって,トラッキングIDが「UA-xxxxxxxx-3」や「UA-xxxxxxxx-4」などのように最後の番号が「3」以上になるように,新たにプロパティを作成してそちらで計測をするというリファラスパム対策もあります.ですが,これはなかなか難しいと思います.そこで現状の環境は残して,新しいトラッキングIDを追加する,つまり1つのサイトに複数のGoogle Analyticsのトラッキングコードを設置するということを考えても良いかもしれません(将来的には新しく追加した方に移行することも考えて).トラッキングコードのカスタマイズも含め複数のGoogle Analyticsのトラッキングコードを設置する方法は,記事「ひとつのページで複数のGoogle Analytics(analytics.js版)のトラッキングコードを使う方法(カスタムディメンションを用いた場合も対応)」などで紹介しました(ただしユニバーサルアナリティクスの場合です).