Google AnalyticsのMeasurement ProtocolでJavaScript無効なユーザーをトラッキング

これまでanalyticsdではJavaScriptの無効のユーザー、メールの開封率、サーバーイベント、POSシステムなどは通常のトラッキングタグでは計測できなかった。
しかし、新たに追加されたMeasurement Protocolを使うことで、直接イベントをトラッキングができる。

Measurement Protocolはanalytics.jsなどの上位に位置する低レベルのプロトコルであり、
直接analyticsのAPIを実行できるため自由度が高い。

developers.google.com/analytics/devguides/platformより

ちなみにga.jsはMeasurement Protocolを介してないが、ga.jsを使っているTracking IDでも問題なく利用できる。


ウェブアプリケーションのnoscriptのユーザー(crawlerやbot)のアクセスをトラッキングする場合、
JavaScriptが無効であるため通常のTrackingタグは利用できない。
そこで、Measurement Protocolを使い計測する。

Measurement Protocolに渡すべきパラメーターはMeasurement Protocol のパラメータ リファレンスを参考にする。

いずれのイベントでも必須になるパラメーターは

パラメーター 内容
v バージョン
t ヒットタイプ (pageview, screenview, event, transaction, item, social, exception, timing)
tid トラッキングID (UA-XXXX-Y)
cid クライアントID

あとはイベントに応じて組み合わせることになる。

実際にパラメーターが正しいかチェックするためにHit Builderが提供されているので、試してみると分かりやすい。

実際にanalytics上でどのように解析されるかを見る場合は、Hit Builderでリクエストして、
analyticsのリアルタイム解析で結果をみると効率的だった。

noscriptユーザーに対して次のようなパラメーターを設定する。

パラメーター 内容
v 1
tid トラッキングID (UA-XXXX-Y)
cid クライアントID
t event
ec イベント カテゴリ
ea イベント アクション
el イベントラベル

上記のパラメーターでPOSTまたはGETできればよいトラッキングできるので、

1
2
3
4
5
6
7
8
9
10
POST /collect HTTP/1.1
Host: www.google-analytics.com

v=1
&tid=UA-XXXXX-Y
&cid=xxxxxxxxxx
&t=event
&ec=JavaScript_Disabled
&ea=pageview
&el=UserAgent+ページパス

または

1
2
GET /collect?v=1&t=event&tid=UA-XXXXX-Y-1&cid=xxxxxxxxxx&ea=pageview&ec=JS_Disabled&ea=pageview&el=UserAgent+ページパス HTTP/1.1
Host: http://www.google-analytics.com

が実行できれば良い。
実際にHit Builderで試してみると、次のようになる。


例えばPHPのアプリケーションでこれを用いる場合、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
function getCid() {
$cookie = $_COOKIE['_ga'];
if(is_null($cookie)) {
$cid = createCid();
} else {
$cookieArray = split('[\.]', $cookie, 4);
$cid = '';

if(!$cookieArray[2] && !$cookieArray[3]) { $cid = $cookieArray[2] . '.' . $cookieArray[3]; }
}

return $cid;
}

function createCid() {
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand( 0, 0xffff ),
mt_rand( 0, 0xffff ),
mt_rand( 0, 0xffff ),
mt_rand( 0, 0x0fff ) | 0x4000,
mt_rand( 0, 0x3fff ) | 0x8000,
mt_rand( 0, 0xffff ),
mt_rand( 0, 0xffff ),
mt_rand( 0, 0xffff )
);
}

function trackingUrl($data) {
$result = 'https://www.google-analytics.com/collect';
$result .= '?payload_data&';
$result .= http_build_query($data);
return $result;
}

// send pageview
$pageview_data = array(
'v' => 1,
'tid' => 'UA-XXXXXXX-X', // tracking id
'cid' => getCid(), // client id
't' => 'pageview', // event type
'dh' => $_SERVER['SERVER_NAME'], // Hostname
'dp' => $_SERVER['REQUEST_URI'], // Page
'dt' => 'Page Title' // Title
);

// send custom event
$event_data = array(
'v' => 1,
'tid' => 'UA-XXXXXXX-X', // tracking id
'cid' => getCid(), // client id
't' => 'event', // event type
'ec' => 'JavaScript_Disabled', //Category
'ea' => 'pageview', //Action
'el' => $_SERVER['HTTP_USER_AGENT'] //Label
);

cidはUUID(バージョン4)なのでphpではuniqidを参考にした。

あとは上記をHTMLに組み込んでやるだけ。
仕組みは簡単でnoscriptタグ内でimgタグなどで出力してMeasurement Protocolに対してGETを実行するだけでよい。
(ajaxでGETやPOSTするという方法もある)

1
2
3
4
<noscript class="javascript-disabled-tracking">
<img src="<?php echo trackingUrl($pageview_data); ?>" width="0" height="0" style="display: none;" alt="">
<img src="<?php echo trackingUrl($event_data); ?>" width="0" height="0" style="display: none;" alt="">
</noscript>

analyticsは独自にログ解析用のサービスを構築・運用することに比べると低コストでログ解析基盤が手に入る。
限度はあるけど、無料ながらも高機能なのでそこそこの規模でも問題なく利用できる。
それに加えて、Measurement Protocolのように直接APIを実行できる機能となると、
ネットに接続できれば画面のないようなものでもイベントをトラッキングできるので、ますますanalyticsの価値が高まりそうだ。

参考にしたページ

PHP uniqid
Google アナリティクスの使用方法を学習する
Measurement Protocol の概要
Measurement Protocol のパラメータ リファレンス

Comments