クロスドメイン計測:予約システムや決済ページへ移るサイト

公開 更新 書いた人 大林 諒

Googleアナリティクス4(GA4)は、ドメインが変わると同じ人を別の人として数えます。自社のサイトから外部の予約システムや決済ページへ移るサイトでは、そこで流れが切れ、予約や入会の手柄が「自分のサイトからの参照」や「決済会社からの参照」に付きます。この記事では、GA4の「ドメインの設定」で2つのドメインを1本につなぐクロスドメイン計測と、戻ってきた人の流入元が上書きされないようにする「除外する参照のリスト」を、サンプル料理教室のサイトと予約システムを例に設定します。読み終わると、広告やInstagramから来た人が予約システムで入会の手続きを終えるまでを、1人・1セッションとして数えられる状態になります。GA4のプロパティとGoogleタグマネージャー(GTM)のコンテナが、すでに sample-cooking.example に入っていることを前提にします。

この記事の内容
  1. 先に決めること
  2. クロスドメインが要るケースと要らないケース
  3. 作るものの一覧
  4. 手順
  5. 応用
  6. できないことと、その代わり
  7. よく詰まるところ
  8. 次にやること

先に決めること

クロスドメイン計測は、管理画面で数行入れれば終わる設定です。ただ、相手のサービスにタグを入れられるかどうかで、そもそも組めるかが決まります。設定の前に次の5つを決めておきます。

1つ目は、予約システムの中で何を数えたいかです。サンプル料理教室では、体験レッスンの申込は自社サイトのフォームで完結し、体験のあとに入会する人が予約システム reserve.example で月謝の初回決済と最初の予約をします。数えたいのは「入会した人が最初にどこから来たか」で、既存の生徒の毎週の予約の回数までは追いません。予約ページへ移ったところまで分かれば足りる会社なら、クリックを数えるだけで済みます。

2つ目は、予約システムにGA4のタグを入れられるかです。クロスドメイン計測は、移動先のページにも同じGA4のタグが入っていないと動きません。入れられないサービスでは組めないので、代わりの手(後半の「できないことと、その代わり」)に回ります。ここは予約システムの会社が決めることなので、最初に確かめます。

3つ目は、入れるタグの種類です。予約システムに測定IDを入れる欄があるなら、自社サイトと同じ測定ID G-XXXXXXXXXX を入れます。GTMのコンテナIDを入れる欄があるなら、自社サイトと同じコンテナ GTM-XXXXXXX を入れると、予約完了のイベントもこちらで作れます。別の測定IDを入れると、プロパティが分かれて1本につながりません。

4つ目は、決済の画面がどこにあるかです。予約システムのカード決済が、決済代行会社の画面(この記事では pay.example.com とします)を通ってから reserve.example に戻ってくる作りだと、戻った時点で流入元が pay.example.com に書き換わります。決済代行の画面にはタグを入れられないので、こちらは「除外する参照のリスト」で直します。

5つ目は、切り替えた日を残す場所です。入れた日からセッション数と「参照」が減り、広告の成果が増えて見えます。データポータル(Looker Studio)の月次レポートの注記欄に「2026年11月1日からクロスドメイン計測を開始」と1行書いておきます。

クロスドメインが要るケースと要らないケース

GA4は、訪問した人をブラウザのCookieに入れた番号で見分けます。Cookieはドメインごとに別なので、sample-cooking.example で付けた番号は reserve.example からは読めません。移った先では新しい人・新しいセッションになり、参照元は sample-cooking.example になります。これを1本にするのがクロスドメイン計測です。

一方、サブドメインには要りません。GA4のタグは、Cookieをできるだけ上の階層のドメインに書きます。blog.sample-cooking.example で付けたCookieは sample-cooking.example に置かれ、www.sample-cooking.example からも読めます。Cookieのドメインを自分で書き換えていない限り、サブドメインどうしの行き来は最初から同じ人として数えられます。

移動のしかたクロスドメイン計測代わりにやること
sample-cooking.example と blog.sample-cooking.example要らない何もしない
sample-cooking.example と www.sample-cooking.example要らない何もしない
sample-cooking.example から reserve.example(同じ測定IDのタグを入れられる)要る「ドメインの設定」に両方を登録する
sample-cooking.example から reserve.example(タグを入れられない)組めない予約ボタンのクリックを数え、予約の数は予約システムの管理画面で見る
reserve.example から決済代行 pay.example.com へ行き、戻ってくる要らない(組めない)「除外する参照のリスト」に pay.example.com を入れる
Instagram、LINEの友だち追加リンクへ出ていく要らない拡張計測の離脱クリックか、GTMのクリック計測で数える
予約システムがサイトの中に埋め込まれている(iframe)このままでは効かない埋め込みをやめてリンクで移す(後述)
別の教室のサイトで、別のプロパティを使っている要らないプロパティを分けたまま見る

_gl パラメータの役割

ドメインをまたいでCookieを読むことはできないので、GA4はリンクのURLに番号を載せて渡します。それが _gl というパラメータです。ドメインの設定に reserve.example を登録すると、sample-cooking.example 上の reserve.example へのリンクを押した瞬間に、移動先のURLの後ろに ?_gl=1~abcde5~ のような文字列が付きます。中身は移動元のGA4のCookieの値です。移動先の reserve.example に入っている同じGA4のタグがそれを読み、同じ番号のCookieを reserve.example 側に書きます。これで、両方のドメインで同じ人・同じセッションになります。

_gl には2分の有効期限があります。そのためタグは、ページを開いた時点ではなく、リンクを押した時点で付けます。_gl 付きのURLをコピーしてLINEで送っても、2分を過ぎれば番号は引き継がれません。別の人のCookieが混ざらないための作りです。

つないだあとに reserve.example から sample-cooking.example へ戻るリンクにも _gl が付きます。現在のページに _gl が付いていて、参照元がドメインの設定に入っているドメインなら、GA4は自分のサイトの中の移動として扱い、新しい参照元として数えません。

作るものの一覧

サンプル料理教室で最終的に入れる設定です。

場所設定値
reserve.example の管理画面GTMのコンテナIDGTM-XXXXXXX(自社サイトと同じコンテナ)
GTMGoogleタグ(両方のドメインで配信)タグID G-XXXXXXXXXX
GA4「ドメインの設定」条件1含む sample-cooking.example
GA4「ドメインの設定」条件2含む reserve.example
GA4「除外する参照のリスト」条件1参照ドメインが次を含む pay.example.com
GTM予約完了のイベントreserve_complete(キーイベントにする)
GTM予約ボタンのクリックreserve_click(パラメータ link_location)

予約ボタンのクリックを別に作るのは、ドメインの設定に入れたドメインへのリンクでは、拡張計測の離脱クリック(click イベント)が出なくなるからです。離脱クリックで「予約ページへ進んだ人」を見ていた会社は、切り替えた日から数字が0になります。

手順

予約システムにタグを入れられるか確かめる

外部の予約システム・決済・フォームサービスに自社のGA4タグを入れられるかは、サービスごとに違います。次の順で確かめます。

  1. 予約システムの管理画面で、「外部連携」「アクセス解析」「タグ」「トラッキング」といった名前の設定画面を探す。
  2. 見つかったら、入れられるものが「GA4の測定ID」「GTMのコンテナID」「HTMLを自由に書ける欄」のどれかを書き留める。
  3. 予約システムの会社のヘルプで「Googleアナリティクス」「GA4」「タグマネージャー」を検索し、入れたタグが予約完了のページまで出るかを確かめる。
  4. 予約ページをブラウザで開き、右クリックの「ページのソースを表示」で googletagmanager.com を検索して、今どんなタグが入っているかを見る。予約システムの会社が自社用のGA4を入れていることがあるので、そのIDが自分のものかを見分ける。
  5. 分からないところは予約システムの会社に聞く。
予約システムの管理画面で、GTMのコンテナIDを入れる欄を開いた状態
予約システムの管理画面で、GTMのコンテナIDを入れる欄を開いた状態

5で聞くことは、次の4つにまとめておくと1往復で済みます。

  • 自社のGA4の測定ID、またはGTMのコンテナIDを予約ページに入れられるか
  • そのタグは予約完了のページ(決済の後の画面)まで出るか
  • 予約完了のページは独自のURLを持っているか(例: /complete/)。URLが変わらず画面だけ切り替わる作りか
  • 自社サイトからのリンクに付く ?_gl= のようなパラメータを、リダイレクトで消さずに受けられるか

返ってくる答えは、だいたい次の5通りです。

予約システムの作りクロスドメイン計測やること
GTMのコンテナIDを入れられる組める同じコンテナを入れ、予約完了のイベントもGTMで作る
GA4の測定IDだけ入れられる組める同じ測定IDを入れる。予約完了は予約システムが送るイベントで数えるか、ページの表示で数える
HTMLを自由に書ける組めるGTMのスニペットを貼る
何も入れられない組めない予約ボタンのクリックを数え、予約数は管理画面で見る
予約完了の後に指定のURLへ戻せる組めなくても完了は数えられる自社サイトに完了ページを作り、そこで数える(応用で後述)

サンプル料理教室の予約システムは、GTMのコンテナIDを入れる欄がある想定で進めます。

予約システムにGTMを入れる

自社サイトと同じコンテナを入れると、トリガーとタグを1か所で管理できます。予約システムの中だけで動かしたいタグは、ホスト名で分けます。

  1. 予約システムの管理画面で、GTMのコンテナIDの欄に GTM-XXXXXXX を入れて保存する。
  2. GTMの「変数」→「組み込み変数」→「設定」で「Page Hostname」にチェックを入れる。
  3. GTMで、今あるGoogleタグ(タグID G-XXXXXXXXXX)のトリガーが「Initialization – All Pages」になっていることを確かめる。これで reserve.example でも同じGoogleタグが動く。
  4. 自社サイトだけで動かしたいタグ(体験申込の generate_lead、電話ボタンのタップなど)を開き、トリガーの条件に「Page Hostname」「含む」「sample-cooking.example」を足す。
  5. Meta ピクセルなど、予約システムで動かす理由のない広告タグも同じように自社サイトだけにする。
GTMで、Googleタグのトリガーが「Initialization - All Pages」になっている状態
GTMで、Googleタグのトリガーが「Initialization – All Pages」になっている状態

4と5を忘れると、関係ないイベントが予約システムで出ます。同じコンテナを2つのドメインで使うときは、全部のタグで「どちらのドメインで動くか」を決めておきます。

予約システムが測定IDしか入れられないときは、その欄に G-XXXXXXXXXX を入れて終わりです。次のドメインの設定はGA4の管理画面に置かれるので、同じ測定IDのタグなら入れ方に関係なく効きます。

GA4の「ドメインの設定」に2つのドメインを登録する

設定には、GA4のアカウントの編集者以上の権限が要ります。

  1. GA4の左下の「管理」を開く。
  2. 「データの収集と修正」→「データ ストリーム」を開く。
  3. サイトのウェブストリーム(sample-cooking.example)を開く。
  4. 画面の下の「タグ設定を行う」を開く。
  5. 「設定」の中の「ドメインの設定」を開く。
  6. 上の「最適化案」に reserve.example が出ていたら、「追加」を押す。
  7. 出ていなければ、「次の条件に一致するドメインを含める」の「条件を追加」を押す。
  8. マッチタイプに「含む」を選び、ドメインに sample-cooking.example を入れる。
  9. もう一度「条件を追加」を押し、「含む」で reserve.example を入れる。
  10. 右上の「保存」を押す。
「ドメインの設定」に sample-cooking.example と reserve.example の2つの条件が入った状態
「ドメインの設定」に sample-cooking.example と reserve.example の2つの条件が入った状態

6の「最適化案」は、同じGoogleタグが複数のドメインで動いていると自動で出ます。

8で自社サイトのドメインも入れるのは、reserve.example から sample-cooking.example へ戻るリンクにも _gl を付けるためです。条件はいずれかに一致すればよい作りなので、2つ並べれば両方向に効きます。条件の数の上限はヘルプに書かれていないので、必要なドメインだけ入れます。

マッチタイプは「含む」にしておくと、予約システムが app.reserve.example のようなサブドメインを使っていても一致します。ドメインをぴったり一致させる条件にすると、予約システムの会社がURLを変えたときに外れます。

決済代行を「除外する参照のリスト」に入れる

月謝のカード決済で、reserve.example から pay.example.com の画面へ移り、決済が終わると reserve.example の完了ページに戻ってきます。このとき完了ページの参照元は pay.example.com です。何もしないと、Google広告から来て入会した人の成果が「pay.example.com / referral」に付き、広告の成果が減って見えます。

  1. 「管理」→「データの収集と修正」→「データ ストリーム」→ウェブストリームを開く。
  2. 「タグ設定を行う」を開く。
  3. 「設定」の「すべて表示」を押す。
  4. 「除外する参照のリスト」を開く。
  5. 「条件を追加」を押し、マッチタイプに「参照ドメインが次を含む」を選んで、ドメインに pay.example.com を入れる。
  6. 右上の「保存」を押す。
「除外する参照のリスト」に pay.example.com を登録した状態
「除外する参照のリスト」に pay.example.com を登録した状態

条件はいずれかに一致すればよく、ウェブストリームごとに50個まで入れられます。条件に一致した参照から来たイベントには、GA4が ignore_referrer というパラメータを付け、その参照元を流入元として扱わなくなります。進行中のセッションも切れません。

自分のサイトのドメインや、ドメインの設定に入れたドメインは、ここに入れなくてもGA4が自分のサイトの中の移動として扱います。ここに入れるのは、タグを入れられない第三者のサービスです。

実際に運用していると、reserve.example からの戻りのリンクがJavaScriptで書かれていて _gl が付かないことがあります。その場合は reserve.example もここに入れます。予約システムから来る人は先に自社サイトを通っているので、流入元として見る意味はありません。

除外する参照のリストは、設定した日から後に集めたデータにだけ効きます。過去の「pay.example.com / referral」は消えません。また、除外する前に pay.example.com から来たことになっている人が、あとで直接サイトに戻ってきたときは、前の流入元がしばらく引き継がれることがあります。直後の1〜2週間は数字が少し残ると思っておきます。

予約完了をキーイベントにする

予約システムに同じコンテナが入ったので、予約完了をGTMで数えます。予約完了のページが https://reserve.example/complete/ のように独自のURLを持っている前提です。

  1. GTMで「トリガー」→「新規」を開き、トリガーのタイプに「ページビュー」を選ぶ。
  2. 「一部のページビュー」を選び、「Page Hostname」「含む」「reserve.example」と、「Page Path」「含む」「/complete」の2つの条件を入れる。名前は PV - 予約完了 とする。
  3. 「タグ」→「新規」で「Google アナリティクス: GA4 イベント」を選ぶ。
  4. 測定IDの欄に G-XXXXXXXXXX、イベント名の欄に reserve_complete を入れる。
  5. イベントパラメータの欄に reserve_type を足し、値に monthly(月謝の初回決済)を入れる。既存の生徒の予約と分けたいときは、予約システムの完了ページのURLや画面の文字で値を変える。
  6. トリガーに2で作った PV - 予約完了 を選んで保存する。
  7. プレビューで予約を1件テストし、GA4のDebugViewに reserve_complete が出たら公開する。
  8. 翌日以降、GA4の「管理」→「データの表示」→「イベント」を開き、「最近のイベント」タブで reserve_complete の横のスターを選ぶ。
GTMのトリガー「PV - 予約完了」の条件に Page Hostname と Page Path を入れた状態
GTMのトリガー「PV – 予約完了」の条件に Page Hostname と Page Path を入れた状態

キーイベント(旧コンバージョン)にするのは、新しく入会した人の分だけです。既存の生徒の予約まで入れると、入会の数が埋もれます。入会と通常の予約で完了ページのURLが同じなら、キーイベントにせず reserve_type で分けて見るだけにします。

予約ボタンのクリックを別に数える

クロスドメイン計測を入れると、拡張計測の離脱クリックが reserve.example へのリンクで出なくなります。「料金ページの予約ボタン」と「トップの予約ボタン」のどちらが押されたかを見たいので、GTMでクリックを数えます。

  1. GTMの「変数」→「組み込み変数」→「設定」で「Click URL」と「Click Element」にチェックを入れる。
  2. 「変数」→「ユーザー定義変数」→「新規」で「カスタム JavaScript」を選び、下のコードを入れて JS - link_location という名前で保存する。
  3. 「トリガー」→「新規」で「クリック – リンクのみ」を選び、「一部のリンククリック」で「Click URL」「含む」「reserve.example」と、「Page Hostname」「含む」「sample-cooking.example」を入れる。
  4. 「タグ」→「新規」で「Google アナリティクス: GA4 イベント」を選び、イベント名の欄に reserve_click、イベントパラメータの欄に link_location と {{JS - link_location}} を入れる。
  5. 3のトリガーを付けて保存し、プレビューで確かめてから公開する。
function() {
  var el = {{Click Element}};
  if (!el || !el.closest) { return 'other'; }
  var box = el.closest('[data-location]');
  return box ? box.getAttribute('data-location') : 'other';
}

このコードは、押したリンクの外側にある data-location という印を探し、その値を返します。テーマのボタンを囲む要素に data-location="price" や data-location="top" を付けてもらうよう、制作会社に頼みます。印が無いボタンは other になります。link_location をレポートで見るには、カスタムディメンションへの登録が要ります。

GTMのプレビューで、予約ボタンを押したときに reserve_click が出て link_location が price になっている状態
GTMのプレビューで、予約ボタンを押したときに reserve_click が出て link_location が price になっている状態

動いているか確かめる

設定を保存してから効くまで少し時間がかかります。30分ほどおいてから確かめます。

  1. 普段使っているブラウザのシークレットウィンドウで sample-cooking.example を開く。
  2. 料金ページの予約ボタンを押す。
  3. 移った先のアドレスバーで、URLの後ろに _gl= が付いているかを見る。
  4. GTMのプレビューを reserve.example につないだ状態で、予約完了まで進み、reserve_complete が出るかを見る。
  5. GA4の「管理」→「データの表示」→「DebugView」で、sample-cooking.example のページと reserve.example のページが同じ端末の1本の流れとして並んでいるかを見る。
  6. 数日後、「レポート」→「集客」→「トラフィック獲得」で、表の項目を「セッションの参照元 / メディア」にし、sample-cooking.example / referral と pay.example.com / referral が出なくなったかを見る。
予約システムに移った直後のアドレスバーに _gl= が付いている状態
予約システムに移った直後のアドレスバーに _gl= が付いている状態
トラフィック獲得の表で、sample-cooking.example / referral の行が設定の翌週から消えている状態
トラフィック獲得の表で、sample-cooking.example / referral の行が設定の翌週から消えている状態

3で _gl が付いていなければ、ドメインの設定とリンク先のドメインが合っているかを先に見ます。6で比べるときは、設定した日の前後で期間を分けます。

応用

予約システムにタグを入れられないが、完了後に自社サイトへ戻せる

予約システムによっては、決済が終わったあとに指定のURLへ移す設定があります。これがあれば、自社サイトに /reserve-thanks/ のような完了ページを作り、そこで reserve_complete を数えられます。完了ページの参照元は reserve.example になるので、reserve.example を「除外する参照のリスト」に入れます。入れないと、入会の成果がすべて reserve.example / referral に付きます。

コードでつなぐ

gtag.js のコードでつなぐこともできます。公式には管理画面での設定が勧められていて、サンプル料理教室では使いません。制作会社がGoogleタグを直接書いたサイトで、次の形のコードが残っていないかを見る手がかりにします。

<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('set', 'linker', {
    'domains': ['sample-cooking.example', 'reserve.example']
  });
  gtag('js', new Date());
  gtag('config', 'G-XXXXXXXXXX');
</script>

linker の設定は js と config より前に書きます。domains に入れた文字を含むリンクに _gl が付きます。フォームの送信で別のドメインへ移る作りなら 'decorate_forms': true を足します。管理画面の設定とコードの両方に書く必要はありません。

決済の画面がある1ページだけ参照元を無視する

決済代行のドメインが決済のたびに変わるなど、リストに入れにくいときは、戻ってくるページのGoogleタグだけに ignore_referrer を true で付ける方法もあります。サイト全体に付けると本当の流入元まで消えるので、必ず1ページに絞ります。値は false を入れても参照元が無視されるので、やめるときはパラメータごと消します。

できないことと、その代わり

できないこと理由代わりの手
タグを入れられない予約システムの中の動きを見る移動先に同じタグが無いと _gl を読む人がいないreserve_click で予約ページへ進んだ数を数え、予約数は予約システムの管理画面で見る
予約システムが iframe でサイトの中に埋め込まれているときにつなぐ実際に運用していると、リンクを押して移るわけではないので _gl が渡らず、つながらないことが多い埋め込みをやめ、ボタンで reserve.example のページに移る作りに制作会社に変えてもらう
過去のデータをつなぎ直す設定は保存した後に集めたデータにだけ効く切り替えた日を注記に残し、前後で比べない
スマホのアプリ内ブラウザから外部のブラウザに移った人をつなぐブラウザが変わるとCookieが別になるつながらない分があると割り切り、予約システムの件数と照らして差を見る
予約確認メールのリンクから戻ってきた人をつなぐメールのリンクにはその場で _gl が付かないメールのリンクにUTMパラメータを付け、流入元を「予約メール」として分ける
Meta ピクセルを予約システムまでつなぐGA4のドメインの設定はGoogleのタグにしか効かないMeta ピクセルを予約システムに入れられるかを別に確かめる。入れられなければ予約ページへ進んだところで計る

予約システムに何も入れられない会社でも、入会の数は予約システムの管理画面で月に1回数えれば済みます。GA4で追うのは「どの流入元の人が予約ページへ進んだか」までにします。

よく詰まるところ

症状原因直し方
予約システムに移ってもURLに _gl が付かないドメインの設定のドメインとリンク先が違う(reserve.example を入れたのに実際は app.reserve-system.example など)リンク先のURLを開いてドメインを確かめ、ドメインの設定を「含む」で入れ直す
_gl は付くのに、予約システム側で別の人として数えられる予約システムに入れた測定IDが自社サイトと違う両方のドメインで同じ G-XXXXXXXXXX が動いているかをTag Assistantで見る
_gl が移動の途中で消える予約システムがリダイレクトするときにURLのパラメータを捨てている予約システムの会社に、リダイレクトの前後でパラメータを残せるか聞く。リンク先をリダイレクト後の最終的なURLに書き換える
ボタンを押しても _gl が付かないボタンが <a> のリンクではなく、JavaScriptで移動している制作会社に通常のリンク(<a href>)に変えてもらう
sample-cooking.example / referral が消えない予約システムからの戻りのリンクに _gl が付いていない自社サイトのドメインもドメインの設定に入れる。それでも残るなら reserve.example を除外する参照のリストに入れる
入会の成果が pay.example.com / referral に付く決済代行のドメインを除外していない除外する参照のリストに pay.example.com を入れる
クロスドメインを入れた日から離脱クリックが減ったドメインの設定に入れたドメインへのリンクは離脱クリックにならないGTMで reserve_click を作り、予約ボタンのクリックはそちらで見る
自社サイトの体験申込のイベントが予約システムでも出る同じコンテナを入れたので、条件の緩いトリガーが予約システムでも動いたトリガーに「Page Hostname」「含む」「sample-cooking.example」を足す
設定した翌日もセッション数が変わらない保存後の新しいデータにしか効かない1週間分たまってから前の週と比べる
「最適化案」に予約システムのドメインが出ない予約システムにまだ同じタグが入っていないか、入れたばかり予約システムのページを何度か開いてからもう一度見る。出なくても「条件を追加」で手で入れれば同じ
サブドメインのブログに移ると別の人になる制作会社がGoogleタグのCookieのドメインを書き換えているGoogleタグの設定に cookie_domain が入っていないかを見て、消してもらう

次にやること

予約完了のイベントを作ったら、自社サイトの体験申込も同じ考え方でそろえておくと、入会までの流れが1枚の表で見られます。フォームの数え方は「GTMでフォーム送信を計測する:サンクスページ型と送信イベント型」に書いています。クロスドメイン計測のあと、流入元の表がどう変わったかを読むには「流入経路の見方:参照元・メディア・チャネルの違いと、広告・SNS・検索の分け方」が役に立ちます。reserve_click や reserve_complete がどの種類のイベントにあたるかは「GA4のイベントとは:自動収集・拡張計測・推奨・カスタムの4種類」で整理しています。設定したのに数字がおかしいときは「計測が取れていないときの点検手順:タグ・トリガー・フィルタ・権限を順に見る」の順に見ていくと、どこで止まっているかが分かります。

あわせて読む