プラグインによる計測コードの拡張と「Power Analytics」の紹介


**Google Analytics Advent Calendar 2015**の6日目の記事です。みなさん、Googleアナリティクスの「プラグイン」機能をご存知ですか？

制作会社などで、サイト制作・運用を行なっていると、同じようなGoogleアナリティクスのイベントトラッキングを複数のサイトで実装している、といった状況になっていることと思います。そんな時、Googleアナリティクスのトラッキングコードの中で共通化できる処理を抜き出して実装、そして各サイトのトラッキングコードで簡単に呼び出すために使う機能が**プラグイン**機能です。

現在、[「Googleアナリティクス プラグイン」でGoogle検索する](https://www.google.com/search?q=Google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9+%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3&oq=Google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9+%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3&aqs=chrome..69i57.151j0j7&sourceid=chrome&es_sm=91&ie=UTF-8)と、ヒットする記事のほとんどが、WordPressのGoogleアナリティクス・プラグインの情報となっていますが、このプラグインとはまた別物です。

## プラグインを使うとどんなことができるの？
例えば、「外部サイトへのリンクをクリックする」イベントを計測するために、下記のようなコードを多数のサイトに埋め込んでいるとします。

```html
<script>
;(function ($) {
  var google_analytics_event_initialize = function () {
    $('a').filter(function () {
      return this.hostname && this.hostname !== location.hostname;
    }).on('click', function () {
      ga('send', 'event', '外部サイトへのリンク', 'Click', $(this).attr('href'));
    });
  };
  $(google_analytics_event_initialize);
})(jQuery);
</script>
```

制作会社であれば、このようなコードをテンプレートとして予め準備しておき、いろいろなサイトで使いまわしているかもしれません。

この処理を、プラグインとして実装しプラグインコードをどこか共通のサーバーから配信するようにできれば、各サイトに設置するトラッキングコードは、

```html
<script>
  ga('require', 'pluginName');
  ga('pluginName:event');
</script>
<script type="text/javascript" async src="プラグインファイルのURL"></script>
```

のように、単純化することができます。

ここで、気づいた方もいるかもしれませんが、実は

- GoogleアナリティクスのEコマーストラッキング
- 拡張リンクアトリビューション
- クロスドメイントラッキング
- ディスプレイ広告関連の機能

といった機能は、すべてGoogleアナリティクスの「プラグイン」として実装されており、Google社が公式に提供しているプラグインとなります。

## プラグインの作り方
Googleで検索しても、WordPressのプラグイン情報ばかり出てくるため、探すのは難しいですが、公式のドキュメントがあるのでそちらを参考にするのが良いと思います。

[ウェブ向けアナリティクス（analytics.js） - プラグインを作成する](https://developers.google.com/analytics/devguides/collection/analyticsjs/writing-plugins)

こちらのページを参考に、上記のイベントトラッキングをプラグインの形で実装してみます。

まず最初に、プラグインのコンストラクタを作成します。ここでは、トラッカーオブジェクトが渡されるので、後で使えるようにthisの中にセットしておきます。イベントトラッキングのコードの実態をここの中に入れることもできますが、今回は別の関数として定義することにします。

```js
function EventTracking (tracker) {
  this.tracker = tracker;
}
```

次に、外部リンクへのクリックを検知して、Googleアナリティクスにイベントとして送信する処理をプラグインで実装します。先ほど作成した、EventTrackingのprototypeとして実装します。

```js
EventTracking.prototype.outbound = function () {
  $('a').filter(function () {
    return this.hostname && this.hostname !== location.hostname;
  }).on('click', function () {
    this.tracker.send('event', '外部サイトへのリンク', 'Click', $(this).attr('href'));
  });
};
```

最後に、上記のプラグインをGoogleアナリティクスのプラグインとして登録します。

```js
function providePlugin(pluginName, pluginConstructor) {
  var ga = window[window['GoogleAnalyticsObject'] || 'ga'];
  if (typeof ga == 'function') {
    ga('provide', pluginName, pluginConstructor);
  }
}
providePlugin('EventTracking', EventTracking);
```

上記を1つのJavaScriptとして作成することで、プラグインの実装が完了します。あとは、プラグインを利用したいサイトにおいて、

```html
<script>
  ga('require', 'EventTracking');
  ga('EventTracking:outbound');
</script>
<script type="text/javascript" async src="プラグインファイルのURL"></script>
```

とすることで、プラグインを利用することができます。

また上記のプラグインに新しい機能「電話番号リンクのクリック」を追加したくなれば、プラグインファイルを

```js
EventTracking.prototype.tel = function () {
  $('a').filter(function () {
    return $(this).attr('href').indexOf('tel:') == 0;
  }).on('click', function () {
    this.tracker.send('event', '電話番号リンク', 'Click', $(this).attr('href'));
  });
};
```

のように編集し、プラグイン・メソッド「tel」を実装し、利用する側では、

```
ga('EventTracking:tel');
```

を追加するだけで済みます。

## プラグイン機能を利用するメリット
上記のようなプラグインの場合、プラグインを利用するメリットが少なく、**使い道がない**と感じてしまう人もいるかと思います。ですが、プラグイン機能を利用する最大のメリットは、**プラグイン機能が普及すれば、他のユーザーが実装した有用な機能をプラグインを通して簡単に利用出来る**点にあります。例えば、クリックイベントであれば比較的実装がやりやすいと思いますが、スクロールイベントだと実装難易度が少し上がります。さらにカスタムディメンションにIPアドレスを設定したい、という要望だと、JavaScriptのみでは実現できず、サーバー側との連携が必要になり、静的サイトでは実装に手間がかかったりします。

また、Googleアナリティクスを利用した外部サービスでタグに手を入れる必要があるものについても、プラグイン形式での提供が理想的かと思います。

## プラグイン「Power Analytics」の紹介
参考までに、[自分が作ったプラグインである「Power Analytics」](https://sem-technology.info/google-analytics/power-analytics-plugins)について紹介します。このプラグインは、その名の通り、Google Analyticsの計測をパワーアップさせるためのものです。現時点で提供している機能は、

- カスタムディメンションの強化
- リファラースパムの除外リストの提供
- 参照元情報の書き換え
- メディア情報の書き換え

になります。またこれらを機能単位でサイトごとにON/OFFを切り替えることができるようなプラグインになっています。

### カスタムディメンションの強化
カスタムディメンションに、ユーザーを一意に識別するためのクライアントIDや、セッションを一意に識別するためのセッションID、その他タイムスタンプやIPアドレス、ユーザーエージェントなどを手軽に設定することができます。

### リファラースパムの除外リストの提供
規模の大きくないサイトでアクセス解析を行うときに最も脅威となるのが、リファラースパムの存在です。よくあるリファラースパムの対策としては、ビューフィルタを都度メンテナンスしましょう、というものですが、一般的なサイト運用者や解析担当者はそんなことやってられません。ましてや、制作会社やサイトコンサルをやっている会社では担当しているサイトが膨大になり、現実的ではありません。

そんな時こそ、プラグインの出番です。プラグインのリスト1つをメンテナンスすれば、そのプラグインを使うみんながその恩恵を授かれます。

このプラグインで提供するリファラースパム除外リストは、[＜完全版＞リファラースパムをたった1つのフィルタで撃退する方法](https://sem-technology.info/google-analytics/referrer-spam-avoidance-new)の対策をとった上でも計測されてしまうリファラースパムが対象です。なので、上記記事を読んでいただき、必要な設定について確認した上で、このプラグインを使ってもらうのがベストです。

### 参照元情報の書き換え
ここからはちょっとした小技になります。通常の計測をしていると、Facebookからの流入は広告か否かや、モバイルか否かに寄って、

- m.facebook.com
- l.facebook.com
- lm.facebook.com

のように参照元がばらけてしまいます。また、Twitterからの流入は「t.co」と短縮された参照元が入ってしまい、パッと見た時に分かりにくいです。

そこで、Power Analyticsの参照元情報の書き換え機能で、Facebookからの流入は全て「facebook.com」にまとめたり、「t.co」となったTwitter流入は「twitter.com」と分かりやすい形に書き換えます。


### メディア情報の書き換え
リファラー情報を元に、Webメールからのトラフィックやソーシャルメディアからのトラフィック、RSSリーダーからのトラフィックなどに対して、メディアデータを適切に設定する機能です。

カスタムキャンペーンを割り振っていない場合、Referrerになってしまうトラフィックである

- Webメール経由のトラフィック
- ソーシャルメディア経由のトラフィック
- RSSリーダー経由のトラフィック

を適切に分類し、メディア情報を書き換えます。

### プラグイン「Power Analytics」の配信
このプラグインは、Pythonで実装しており、Google App Engineによって配信しています。

また、Pythonコード内で、GoogleアナリティクスのMeasurement Protocolを用いてリクエスト数を計測しています。リクエスト数は11月の1か月間で、1,162,436件となり、多くのサイトにおいて使われているのかと思います。

### プラグイン「Power Analytics」の詳細情報
詳細は、[SEM Technology - Googleアナリティクスのプラグイン「Power Analytics」の紹介](https://sem-technology.info/google-analytics/power-analytics-plugins)にて公開しています。Power Analyticsの詳しい情報を知りたい方はこのサイトをご覧ください。