JavaScript
GoogleAnalytics

GoogleAnalyticsで検索キーワードごとに集計できるようにした

あらすじ

GoogleAnalytics(以下GA)のサイト内検索機能でキーワードをいい感じに集計したい。
Googleのヘルプどおり設定をしてみたが思っていた感じじゃない部分があって試行錯誤した話。

※注意事項

一般的な検索条件としては A OR B のようにワードの組み合わせの分析をすると思いますが、
本件では A の数と B の数をそれぞれ集計したいみたいなお題です。

GAのサイト内検索の概要

  1. 管理>ビューの設定でサイト内検索をONにする
  2. キーワードに相当するパラメータ名(q とか word とか)を入力する
    • ※カンマ区切りで5個まで
  3. 行動>サイト内検索でワードごとのアクセスログが見れる

※ 集計には少し時間がかかるようです

試行錯誤したところ

PHPの配列のパラメータは hoge[] のようにする

keyword_ids[]=1 のようなやつはパラメータ名に keyword_ids[]を追加したら取得できるようになりました。

Ajaxで検索している場合はJSでトラッキング情報を送る必要があった

HTMLのForm等でGETリクエストする場合はいいのですが、JS等でAPIを叩いて動的に表示を変更する場合はトラッキングタグが送信されません。

下記のように関数でURLを送信する必要があります。

ga('send', 'pageview', '/search?q=宇宙 天体観測');

複数ワードがつながってしまう

JSでトラッキング情報を送ることで集計はされました。

ですが今回は、宇宙 天体観測 と検索されたとき、通常は 宇宙 天体観測 となってほしいですが、そのままだと 宇宙 天体観測 が1項目として計測されてしまいます。

カンマ区切りとかいろいろ試しましたが、複数の項目として送信するには同名のパラメーターを複数つけて送ると良いようです。

ga('send', 'pageview', '/search?q=宇宙&q=天体観測');

まとめ

これでそれぞれのワードごとの集計ができるようになりました。
Formベースの検索じゃない場合はAPIやURLの仕様との兼ね合いがうまく擦り合わないことが多いのではないかと思うので、この部分については基本的にJSでトラッキング情報を送信する前提で、それようのパラメータで完結するほうが棲み分けができるように思いました。

例)
パラメータ名設定: keywords
リクエストURL: https://example.org/search?q=宇宙 天体観測
GAに送信する値 : ga('send', 'pageview', '/search?keywords=宇宙&keywords=天体観測');

初回アクセス時にサーバーサイドで表示しているのであれば、表示時にJSで送信してあげるイメージです。