Looker StudioでGA4の不要パラメータを除去したクリーンURLを作成する2つの方法

Twitterを眺めていたらなにやら面白そうなネタが

(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の計算フィールドには変数のようなものはなくループ処理などもできない。できることは単純な文字列操作のみ。ということで、スマートさを投げ出し、指定した文字列を正規表現で切り取りひたすら連結するという脳筋処理を作った。結果、すごく頭の悪そうなコードが爆誕した。。

その代わりと言ってはなんだけど、当初想定していた複数の計算フィールドを組み合わせるという部分をひとつの計算フィールドにまとめ、スマートさを演出。。。ちょっと無理やり感ある?

そんなこんなをスタバの抹茶ティーラテ(全部ミルク、抹茶パウダー多め、シロップなし)を飲みながら試行錯誤している間にネ申によるソリューションが生まれてました。。

なんかもう、自分の出る幕ないね?、、、と思いつつ、途中まで作ったので仕上げて、ちょっと手直しして上記のものを投げ出さず作りました。途中で投げ出さないで、えらい!

スプマロさんのアプローチは自分とは正反対の指定したパラメータを除外するブラックリスト式。一方、わたしのアプローチは指定したパラメータのみを残すホワイリスト式。

どちらがよいか、はサイトによるのかな?

多くのサイトでは計測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)=([^&]*&?)","")
    )
  ,"(\\?$)|(&$)","")
)

ブラックリスト式のほうがコードの見た目、スマートですね。。。好き。


この記事が気に入ったらサポートをしてみませんか?