Web解析ツールといえば、GoogleアナリティクスとAdobeアナリティクスの2強と言われており、特に無料版サービスの存在から多くのサイトでGoogleアナリティクスが用いられています。
しかしながら、Web解析ツールは他にも多数存在します。ここでは、オープンソースとして開発されているWeb解析ツールについて取り上げてみたいと思います。また、そのオープンソースの解析ツールのソースコードで用いられているテクニックを見ていきましょう。
オープンソースWeb解析ツールのメリット
もちろん、Web解析の立場から見ると、GoogleアナリティクスやAdobeアナリティクスに勝る部分は少ないのですが、オープンソースの良いところは、ソースコードが公開されており、自由に中身を見ることやソースコードを改変して利用することができる点にあります。
特にGoogleアナリティクスを用いていると、「ここのこういう仕様をどうにかしたい」と思うことが出てきます。そういった時に、オープンソースのWeb解析ツールであれば、(ソースコードを改変できる技術が必要ですが)対応できてしまいます。
また、ソースコードを自由に見ることができるので、ソースコード中の細かなテクニックを盗み見ることができることも大きなメリットと言えます。
オープンソースWeb解析ツールの例
matomo
いくつかのオープンソースのWeb解析ツールをみてきた中で「matomo」は、最も使い勝手の良いオープンソース製品と言えます。インターフェースもわかりやすく、また機能面でもGoogleアナリティクスをかなり意識しているのか、Googleアナリティクスでできることの多くはmatomoでも利用可能となっています。
特に、Google広告とのインテグレーション(広告の指標をmatomoで見る)についても実装済みという点は素晴らしいと言えます。さらに、独立系のオープンソースということもあり、Google広告とのインテグレーションだけでなく、BingやFacebook広告とのインテグレーションや、Bing Search ConsoleとのインテグレーションなどGoogle製品以外の製品とのインテグレーションについても実装されているのには驚きです。
もし、GoogleアナリティクスやAdobeアナリティクスからオープンソース製のWeb解析ツールを乗り換えたいと思った時に、真っ先に選択肢に出てくるツールでしょう(そのような乗り換えニーズ自体が少ないでしょうが)。
GoatCounter
GoatCounter は、Cookieを使ったユーザー特定を行うことなくアクセス解析を行うツールです。Googleアナリティクスでは、様々な情報をトラッキングしているため、より詳細なアクセス解析を行うことができます。それに対し、GoatCounterでは、ユーザー自身のプライバシーを十分に配慮して、必要最小限のトラッキングに留めていることが特徴です。
UIや機能面で見ると、Googleアナリティクスに劣りますが、ヨーロッパにおけるGDPRやアメリカ・カリフォルニア州におけるCCPAなどを考えると、この程度の機能で十分、という見方もあるのかもしれません。
オープンソースから学んだこと
ボットの計測除外
Googleアナリティクスにも、ボットトラフィックの除外機能があります。このボットトラフィックの除外機能は、IAB(Interactive Advertising Bureau; ネット広告の業界団体)が提供する「International Spiders and Bots List」に基づいて、ユーザーエージェント基準で除外されます。しかしながら、「International Spiders and Bots List」は非常に高価な有料ライセンスを必要とするため、Googleアナリティクス以外の計測ツールの場面で利用したい、と思っても思い通りにはできません。
「GoatCounter」では、Githubのソースコード(zgoat/goatcounter/public/count.js)では、「PhantomJS」「Nightmare」「WebDriver」「Selenium」などのヘッドレスブラウザ特有のグローバル変数を条件に使うことで、ボット判定を行っているようです。
具体的には、
// See if this looks like a bot; there is some additional filtering on the
// backend, but these properties can't be fetched from there.
var is_bot = function() {
// Headless browsers are probably a bot.
var w = window, d = document
if (w.callPhantom || w._phantom || w.phantom)
return 150
if (w.__nightmare)
return 151
if (d.__selenium_unwrapped || d.__webdriver_evaluate || d.__driver_evaluate)
return 152
if (navigator.webdriver)
return 153
return 0
}
のようなソースコードが使われています。
ヘッドレスブラウザをプログラムから操作しているのであれば、ユーザーエージェントを変更することは簡単にできるため、分類漏れが発生します。上記のソースコードのように、ヘッドレスブラウザ特有のグローバル変数を使うことで、そのような分類漏れを最小限にすることができそうです。
ボットの流入が多いWebサイトを運営している場合、Googleタグマネージャーを使って、上記のようなカスタムJavaScript変数を作成し、ボット判定を行った上で様々なタグを実行するようにすると良いでしょう。
URL、リファラーの正規化
matomo analyticsのソースコードの中には、以下のようなソースコードが存在します(改行やスペース数などを調整)。
/*
* Fix-up URL when page rendered from search engine cache or translated page
*/
function urlFixup(hostName, href, referrer) {
if (!hostName) {
hostName = '';
}
if (!href) {
href = '';
}
if (hostName === 'translate.googleusercontent.com') { // Google
if (referrer === '') {
referrer = href;
}
href = getUrlParameter(href, 'u');
hostName = getHostName(href);
} else if (hostName === 'cc.bingj.com' || // Bing
hostName === 'webcache.googleusercontent.com' || // Google
hostName.slice(0, 5) === '74.6.') { // Yahoo (via Inktomi 74.6.0.0/16)
href = documentAlias.links[0].href;
hostName = getHostName(href);
}
return [hostName, href, referrer];
}
このソースコードでは、検索エンジンのキャッシュとして表示されたり、自動翻訳ページとして表示された時のURLやリファラーを補正する処理を行っています。例えば、Googleの自動翻訳ページとして表示された時で、リファラーが存在しない場合は、自身のページ(自動翻訳のURL)をリファラーに設定したり、BingやGoogleそしてYahooなどのキャッシュとして表示された時は、現在のページURLをキャッシュURLではなく、本来のページのURLを取り出すようになっています。
まとめ
今回紹介した以外にも、オープンソースのWeb解析ツールのソースコードから学ぶことができる部分は多々あるでしょう。特に、今回紹介した1つ目のボットの識別については目から鱗と言えるでしょう。もし、自身のサイトが多くのデータを提供しているようなケースで、サードパーティーの開発者によるボットアクセスを多数受けていると考えられる場合、Googleタグマネージャーなどで上記のロジックを変数として実装し、Googleアナリティクスなどに送信すると良いでしょう。