GA4/Looker StudioでURLから不要パラメータを除外する2つの方法
GA4の不要なパラメータが混じるURLをLooker Studioで綺麗に加工して集計するための計算フィールドの作り方
Twitterを眺めていたらなにやら面白そうなネタが
GA4 × Looker Studioでは「ページ ロケーション」にutmやgclidなどの不要なパラメータが付いてしまうので、それらを削除したディメンションを作る時、最もスマートな方法って何だろう🤔
— 渋谷 泰一郎🔥🐓 | Taiichirou Shibuya (@t_shibuya) July 6, 2023
前提として、Looker Studio側での対応。
※Google系以外の本当に不要なものは計測時にGTMで削除して送る、を除く。
(UAにはあった)パラメータ除外設定ができないGA4では誰もが頭を悩ます問題。計測の手前の部分で不要パラメータをそもそも取得しないように手当する、というのが簡単な対処法だが、既に計測されてしまったデータに対しては、実装ではどうすることもできない。また、削除対象となるクエリパラメータを選べる方が、自由度が高く好ましい方法だと言えなくもない。うん、その場合GA4のレポート上ではどうしようもできないけど、、、
まずは結論から。こんな計算フィールを作ってみた。
不要パラメータ除外URL(ホワイトリスト式)
IF(
REGEXP_EXTRACT(ページ ロケーション, "\\?(.+)") IS NULL,
ページ ロケーション,
REGEXP_REPLACE(
CONCAT(
REGEXP_EXTRACT(ページ ロケーション, "^([^?]+)"),
"?",
REGEXP_REPLACE(
CONCAT(
IFNULL(REGEXP_EXTRACT(REGEXP_EXTRACT(ページ ロケーション, "\\?(.+)"),"((^|&)p=([^&]*))"),"")
,
IFNULL(REGEXP_EXTRACT(REGEXP_EXTRACT(ページ ロケーション, "\\?(.+)"),"((^|&)cat=([^&]*))"),"")
,
IFNULL(REGEXP_EXTRACT(REGEXP_EXTRACT(ページ ロケーション, "\\?(.+)"),"((^|&)tag=([^&]*))"),"")
,
IFNULL(REGEXP_EXTRACT(REGEXP_EXTRACT(ページ ロケーション, "\\?(.+)"),"((^|&)s=([^&]*))"),"")
)
,"^&","")
)
,".*(\\?)$","")
)上記ツイートを見て0.7秒後に思いついたのは、クエリパラメータ部分を抜き取り、必要なパラメータのみを残し(それ以外は削除し)、パラメータなしのURLに結合/CONCATする、という方法。この時点では計算フィールドを3つ作るイメージでいた。
実際に手を動かしてみると、結構悩ましい。普段JavaScriptでやるような配列やオブジェクトを使った処理ができない。Looker Studioの計算フィールドには変数のようなものはなくループ処理などもできない。できることは単純な文字列操作のみ。ということで、スマートさを投げ出し、指定した文字列を正規表現で切り取りひたすら連結するという脳筋処理を作った。結果、すごく頭の悪そうなコードが爆誕した。。
その代わりと言ってはなんだけど、当初想定していた複数の計算フィールドを組み合わせるという部分をひとつの計算フィールドにまとめ、スマートさを演出。。。ちょっと無理やり感ある?
そんなこんなをスタバの抹茶ティーラテ(全部ミルク、抹茶パウダー多め、シロップなし)を飲みながら試行錯誤している間にネ申によるソリューションが生まれてました。。
興味本位で試してみました。計算フィールドを3つ、つくることになりますが、こんなイメージですかね? pic.twitter.com/ECaVpllvAP
— スプマロ (@649Ga4) July 6, 2023
なんかもう、自分の出る幕ないね?、、、と思いつつ、途中まで作ったので仕上げて、ちょっと手直しして上記のものを投げ出さず作りました。途中で投げ出さないで、えらい!
スプマロさんのアプローチは自分とは正反対の指定したパラメータを除外するブラックリスト式。一方、わたしのアプローチは指定したパラメータのみを残すホワイリスト式。
どちらがよいか、はサイトによるのかな?
多くのサイトでは計測URLに残したいクエリパラメータが限られている(サイト内検索時の「q=」など)ので、ホワイトリスト式の方がいい気がしますが(ポジショントーク感ある)、サイトが巨大でいろんなパターンがある場合は主要なトラッキングパラメータを一括して指定して除外するブラックリスト式の方が向いているかもしれない。
ちなみに、スプロマさんの作成したものを完コピしつつ、先に紹介した単体計算フィールドに加工したブラックリスト式の計算フィールドはこちら。3つ計算フィールド作るのは面倒、かつ管理しづらいからね。
不要パラメータ除外URL(ブラックリスト式)
IF(
REGEXP_EXTRACT(ページ ロケーション, "\\?(.+)") IS NULL,
ページ ロケーション,
REGEXP_REPLACE(
CONCAT(
REGEXP_EXTRACT(ページ ロケーション, "^([^?]+)"),
"?",
REGEXP_REPLACE(
REGEXP_EXTRACT(ページ ロケーション, "\\?(.+)")
,"(utm_source|utm_medium|utm_campaign|utm_content|fbclid)=([^&]*&?)","")
)
,"(\\?$)|(&$)","")
)ブラックリスト式のほうがコードの見た目、スマートですね。。。好き。