GA4でランディングページのドメインを取得する方法【GTMとセッションストレージの活用】
こんにちは。
GA4の「ランディング ページ」はページパスのみが記録されています。
例えば、「https://hogehoge.jp/path/」というURLなら、「/path/」の値が表示されます。
この仕様は、クロスドメインで計測している場合には非常に不便で、ドメインがちがうがパスが同じ場合には、合算されてしまいます。
嫌ですね。
これを解決する方法は、新しくカスタムディメンションを追加するしかありません(自分調べ)。
よく巷の記事で解説されているような「ホスト名」の使用や、イベント「session_start」のパラメータ「page_location」の使用は分析に使用するには不適切ですので、それも合わせて紹介します。
「設定方法だけ分かればOK」という方は、目次の「GA4でランディングページのドメインを取得する方法」からご覧ください。
よくあるミス①「ホスト名」を使う
GA4には「ホスト名」というドメイン名を格納しているディメンションがあります。
デフォルトでレポートには表示されていませんが、セカンダリディメンションや探索上で使用できます。
以下のような感じです。
一見するとドメインとランディングページのパスが並んでいて「お、イケてるじゃん」と思えるのですが、実はダメです。
この数値は、各ランディングページから閲覧開始して、ドメインを閲覧した数値が表示されています。
例えば、ランディングページが「/」で、ドメインが「shop.googlemerchandisestore.com」の値は、「/」から閲覧開始したのちに、ドメインが「shop.googlemerchandisestore.com」のページを閲覧した数値、というだけにすぎません。
ランディングページのドメインが、ホスト名に記載のドメインとは限らないのです。
この関係性は、ホスト名以外も同様で、ページタイトルにしても同様の事象が発生します。
よくあるミス②「session_start」の「page_location」を使う
もうひとつのミスは、セッション開始を意味するイベント「session_start」に紐づく、閲覧中のページURLを示すイベントパラメータ「page_location」を使用する方法です。
「page_location」はドメインやURLパラメータなど、URL全体を格納するパラメータなので、これなら正しく数値が見られそうです。
しかし、落とし穴があります。
イベント「session_start」に紐づく「page_location」を一覧で出したい場合には、イベント名で「session_start」のみに絞り込む必要があります。
「page_location」は基本的にすべてのイベントに紐づいているからです。
しかし、ここで問題が浮上します。
イベント名を「session_start」に絞るということは、他のイベント「page_view」や「first_visit」、その他個別に設定しているコンバージョンイベントは集計に含まれないことになります。
すると、その一覧で表示されたランディングページのURLごとレポートで使用できる表はセッションやユーザー数といった限られたものになります。
実際に探索レポートで見ると、以下のような感じでゼロが並びます。
ランディングページ別のコンバージョン数なども当然見たいので、このようなレポートは運用には耐えられないです。
※ただし、今回の方法でも新規ユーザー数は見られません。引き続き研究します。
というように、巷でいわれるようなことは基本的に誤っています。
GA4でランディングページのドメインを取得する方法
ここから、本題です。
実際にドメイン込みのランディングページを取得するためには、いくつかの作業が必要です。
必要なもの
Google タグマネージャー
実装の仕組み
とてもざっくり言うと、一番最初に閲覧したページのURLをセッションストレージに保存して、全イベントにそのURLを紐づける、という方法です。
セッションストレージとは、ウェブサイトを閲覧中に情報を保存して置ける場所で、文字通りセッション中のみデータが保存されます。
ブラウザを閉じるなど、セッションが終了すると情報は削除されます。
すべてのイベントに対して、ランディングページのURLをイベントパラメータとして紐づけることで、ページビューやコンバージョンなどにもランディングページのURLが紐づくため、基本的な指標にも対応できる、という仕組みです。
実装手順
実装手順は以下の通りです。
GA4トラッキングコードの発火タイミングを「ページビュー」にする
ランディングページのURLを取得するカスタムHTMLタグを作成
ランディングページのURLを取得するJavaScript変数を作成
イベントパラメータとしてGoogleタグの設定に追加する
カスタムディメンションを登録する
手順① GA4トラッキングコードの発火タイミングを「ページビュー」にする
まず、GTMで設定しているGA4のトラッキングコードのトリガーが「ページビュー」になっているか確認してください。
これは、この後設定するランディングページのURL取得用のタグよりも、GA4トラッキングコードが遅く発火するようにするためです。
GA4トラッキングコードのトリガーは「初期化」または「ページビュー」になっていますが、初期化だと早すぎてランディングページのURLが紐づけられない可能性があるので「ページビュー」にしてください。
手順② ランディングページのURLを取得する変数を作成
続いて、ランディングページのURLを取得する変数を作成します。
まずは、GTMのタグを追加します。
タグの種類はカスタムHTMLで、以下のソースコードを貼り付けてください。
<script>
// PV数とランディングページの変数を定義。PV数は未定義の場合「0」になる。
var pv_count_js = Number(sessionStorage.getItem("pv_count_session_storage"));
var landing_page_all_js = sessionStorage.getItem("landing_page_all_session_storage");
var landing_page_nonparam_js = sessionStorage.getItem("landing_page_nonparam_session_storage");
if ( pv_count_js === 0 ) {
// 0のときはセッションストレージに「1」として記録
sessionStorage.setItem("pv_count_session_storage", 1);
// js変数の更新
pv_count_js = 1
// URLの取得
landing_page_all_js = document.location.href;
landing_page_nonparam_js = document.location.origin + document.location.pathname;
// セッションストレージにLPのURLを記録
sessionStorage.setItem("landing_page_all_session_storage", landing_page_all_js);
sessionStorage.setItem("landing_page_nonparam_session_storage", landing_page_nonparam_js);
} else if ( pv_count_js >= 1 ) {
// 現在の値=直前のページビュー数を取得
pv_count_js = Number(sessionStorage.getItem("pv_count_session_storage"));
// ページビュー数を更新
pv_count_js = pv_count_js + 1
// セッションストレージを更新
sessionStorage.setItem("pv_count_session_storage", pv_count_js);
} else {
// 上記に該当しない場合は (not set)
pv_count_js = "(not set)"
}
</script>
トリガーは「初期化」です。
GAの計測対象ページすべてで計測できるように条件を設定してください。
以下、タグとトリガーの実際の画面です。
手順③ ランディングページのURLを取得するJavaScript変数を作成
続いて、ユーザー定義変数として、GTMのJavaScript変数を設定します。
手順②ではタグを通して、ブラウザ上にJavaScriptの変数が作られただけなので、ここからGTM上で取得できるようにするためです。
GTM サイドメニューから「変数」を選択して、ユーザー定義変数を新規で作成します。
今回作成するのは、URL全体を取得するものと、URLパラメータを除外したものの2種類です。
どちらも「JavaScript変数」で作成します。
ランディングページのURL全体を取得するものは、グローバルJavaScript変数「landing_page_all_js」を、URLパラメータを除外するものは「landing_page_nonparam_js」を入力して作成します。
以下、変数の実際の画面です。
GTMの変数名「Landing Page ALL」と「Landing Page Nonparam」にしていますが、分かりやすいものに変更してかまいません。
手順④ イベントパラメータとしてGoogleタグの設定に追加する
これで値の取得まではできたので、最後にGA4にイベントパラメータとして送信されるようにGoogleタグに設定を追加します。
GA4の計測を行っているGoogleタグの「設定」のセクションに今回作成した変数を設定します。
「構成パラメータ」には、GA4にイベントパラメータとして送信する名前を記入します。
アルファベット半角40文字以内であれば自由です。
値には、作成したGTMの変数を設定します。
例では「{{Landing Page ALL}}」と「{{Landing Page Nonparam}}」となります。
手順⑤ プレビューを確認
設定できたら値が正しく取得できているか確認しましょう。
GTMプレビューで「Initialaization」のイベントタイミングでの変数を見てみてください。
今回作成した変数に値が入っていればOKです。
問題なければ公開してください。
手順⑥ GA4管理画面でカスタムディメンションを登録
最後に忘れずにカスタムディメンションとして登録しておきましょう。
以上で、設定が完了です。
結果イメージ
探索レポートで実際の画面を確認してみると、、
以下のようにコンバージョンは紐づきましたが、新規ユーザー数はゼロですね。。
first_visit イベントには紐づけられないのか・・
デフォルトで計測されているイベントはコントロールができないのが歯がゆいところですが、致し方なしです。
ただし、コンバージョンには紐づけられたので、一覧でコンバージョン数とコンバージョン率は出せそうです。
注意点
カスタムディメンションとして登録した日より、前の日付のデータは閲覧できません。
GTM経由で設定しているため、アドブロックによる影響で取得できない場合があります。
今回の仕組みはセッションストレージを使用しています。セッションストレージの情報の有効期限は、GAのセッションデータと同じと推測していますが、完全に一致していない可能性があります。
Googleタグの構成に設定することで全イベントに紐づくようにはしているのですが、なぜかセッション内で必ず(not set)になるイベントがあるようです。レポート作成時には(not set)をフィルタで除外するなど調整が必要でした。(でも、デフォルトの「ランディング ページ」ディメンションもなぞにnot set 多いし、個人的にはあまり気にならないです。)
所感
GA4はイベント単位で計測するという仕組み上、ディメンションによっては数がゼロになったりするなど、ややこしいところがいくつかあります。
今回使用しているセッションストレージの仕組みを活用する重要性を痛感したところです。
この記事が気に入ったらサポートをしてみませんか?