Google Analytics でルーティング情報を使いたい
(※ 代わりにいい方法があったら知りたいです)
#GoogleAnalytics で「このページでこれが起こった」とか「このページからこのページに移動した」とかを集計するときに困るのが、/items/1 と /items/2 が(考えてみれば当然だが)違うページ扱いになることだ。 一覧を正規表現でまとめて表示みたいな方向で頑張るケースもあるが、それにしては GA のフィルタリング機能は貧弱すぎて、いつもかなり辛い思いをしている( GA の管理画面を捨てて GA のイベントを BigQuery などで絞るほうがマシというケースが多い )
ところで、GA のページビューには URL やパス名の他にページタイトルというパラメータも送ることができる。いつもこれを送る際に document.title を送ってしまう(実際、省略したときはデフォルトで document.title が送られるらしい)のだが、ページのタイトル文字列でソートやフィルタをしたいケースは冷静に考えるとない。分析上死にカラムでは?と感じることがある。
code:javascript
ga('send', {
hitType: 'pageview',
page: location.pathname,
title: document.title
})
「タイトル」という語は暗に document.title を意図しているように見えるが、代わりにページの識別名をここの値として( title を識別名と解釈して )送ってはどうか。たとえば次のような。
code:javascript
ga('send', {
hitType: 'pageview',
page: location.pathname,
title: 'items_controller#show'
})
ルーティングっぽさを強調するために Controller と書いてしまったが、SPA ならクライアントサイドルーターで名前付きルーティングを行いそこから取るのが良いだろう。以下は universal-router の例。
code:javascript
const router = new UniversalRouter([
...
{
name: 'items_show',
path: '/items/:id',
async action () {
...
}
}
], {
// action の実行結果の代わりに route オブジェクトを返すようにいじっておく
resolveRoute() { ... }
})
// onChangeRoute
const { name } = await router.resolve(nextLocation.pathname)
ga('send', {
hitType: 'pageview',
page: location.pathname,
title: name // items_show
})
個人的に GA にはこことここが同じページなことぐらい設定書くから理解してくれよ!と思うことが多いので、標準でこの用途を念頭に置いたパラメータを用意してほしいと思っている。ついでに items_index から items_show への遷移数がこのくらい、とかも当たり前に取れるようであってほしい。
一応「行動フロー」という機能はあるが、これも id 違いの URL を別扱いしてしまう以上、冒頭の不便さがそのまま残っている( 見たいのは /items から /items/1 ではなく、/items から /items/:id なのだ )。コンテンツグループという機能についても調べたが、個数制限が妙にキツく、本当にこれでできるのか?と思っている。
どうもこの辺りが現状簡単ではないっぽいので、先のような悪用を考えることになる。それとも私が知らないだけで簡単な方法はあるのだろうか。あるいは ↑ の方法は悪用ではなく普通の方法だったりするのか?