「広告を月30万円出しているが、実際に何件の問い合わせが来ているか GTM で正しく計れていない」「フォームが埋め込み(iframe)なのでサンキューページを CV にできない」——フォーム計測の実装は、シンプルに見えて落とし穴が多い領域です。
本記事では、フォームおよびアンケートのコンバージョン計測(CV計測)を GTM dataLayer → 広告CVタグ連携 という正攻法で実装する手順と、現場でよくハマるポイントを解説します。CRM 連携(Salesforce/HubSpot への直接パイプ)は現時点でレポアンの対象外のため、本記事では GTM 経由の計測に特化します。
なぜフォームCV計測がこれほど重要か
広告最適化のための入力データになる
Google 広告・Meta 広告の自動入札(Smart Bidding)は、CV データを学習して入札額を最適化します。CV が計測されていない状態では、アルゴリズムが「クリックが多いが成果不明の広告」として低く評価し、入札精度が落ちます。
実際にあるケース: 月30万円の Google 広告で、CV 未計測のまま3ヶ月運用 → CV 計測開始後に自動入札が学習 → 同予算でCPA(1件あたりコスト)が40%改善、というパターンは珍しくありません。
A/Bテストの正しい指標になる
LP の CTA 文言や画像を変えたとき、最終指標は「フォーム送信完了数」です。ボタンクリック率だけを指標にすると、「クリックされるが送信されない」パターンを見逃します。
ファネルのどこで離脱しているかが見える
「広告クリック → LP 着地 → フォーム表示 → フォーム入力開始 → 送信完了」の各ステップに計測を入れることで、改善すべきボトルネックが特定できます。例えば「フォーム表示まで来るが入力開始率が30%しかない」なら、設問数の削減や入力項目の見直しが有効です。
計測の3レイヤー構造
| レイヤー | 目的 | 実装方法 |
|---|---|---|
| GA4 イベント | 行動ログ・ファネル分析 | GTM 経由または gtag.js 直接 |
| 広告CV タグ | 自動入札の最適化 | GTM 経由で発火 |
| CRM 連携 | 営業フォローへの引き渡し | Salesforce/HubSpot 等(レポアンは現時点で非対応) |
実装の前提:GTM を使う理由
コードを直接書かずに複数のタグ(GA4・Google Ads・Meta・Yahoo!・LINE)を管理できるため、GTM 経由の実装を強く推奨します。フォーム送信時に dataLayer に push するだけで、GTM 側で各広告のCVタグを制御できます。
ステップ1: フォーム送信時の dataLayer push
自分でフォームを実装している場合
フォームの送信成功コールバック内に以下を記述します。
// フォーム送信完了時(Success コールバック内)
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'form_submit',
form_id: 'inquiry-form', // フォームごとに一意のID
form_name: '問い合わせフォーム',
transaction_id: 'tx_' + Date.now() + '_' + Math.random().toString(36).slice(2, 7), // 重複防止
});
重要: transaction_id を付けることで、同一フォームのリロードや二重送信による重複CVを GA4 側で除外できます。
レポアンのフォーム・アンケートを使う場合
レポアンは GTM dataLayer push を標準搭載しています。GTM コンテナ ID をレポアンの設定画面に入力するだけで、送信完了時に以下が自動的に push されます。
{
event: 'repoan_form_submit',
form_id: 'xxxxx', // レポアン側のフォームID
form_title: '問い合わせフォーム',
}
埋め込み(iframe)フォームの場合も、レポアンが postMessage を使って親ページの dataLayer に自動通知します。別途クロスフレーム実装は不要です。
ステップ2: GTM でトリガーとタグを設定する
トリガーの作成
GTM の「トリガー」タブで以下を設定します。
タイプ: カスタムイベント
イベント名: form_submit(または repoan_form_submit)
GA4 タグの設定
| 項目 | 値 |
|---|---|
| タグタイプ | Google アナリティクス: GA4 イベント |
| イベント名 | form_submit |
| トリガー | 上記で作成したカスタムイベントトリガー |
GTM の プレビューモード で実際にフォームを送信し、タグが「発火済み」になることを確認してから公開してください。
GA4 側でコンバージョンとして登録
GA4 管理 → イベント → 「form_submit」の行で「コンバージョンとしてマーク」をオン
反映には最大24〜48時間かかります。
ステップ3: 広告CVタグの設定
Google Ads
CVアクションの作成
Google Ads → ツールと設定 → コンバージョン → 「+」 → ウェブサイト
- カテゴリ: 見込み顧客(フォーム送信の場合)
- CV値: フォームの種別ごとに設定(後述)
- カウント: 「1回」(1人のユーザーが複数回送信しても1CVとする場合)
GTM での発火設定
// GTM のカスタム HTML タグまたは Google Ads タグを使用
gtag('event', 'conversion', {
'send_to': 'AW-XXXXXXXXXX/YYYYYYYYYYYY', // Google Ads の CV ID
'value': 5000, // 円
'currency': 'JPY',
'transaction_id': {{DL - transaction_id}}, // dataLayer 変数
});
GTM の「変数」で transaction_id を dataLayer 変数として定義しておくと、スニペット内で参照できます。
CV値の設定例
CV値を設定するとスマートビッディングの学習精度が大幅に向上します。
問い合わせフォーム送信 → CV値: 3,000〜10,000円(想定契約単価の5〜10%程度)
資料請求フォーム送信 → CV値: 1,000〜5,000円
個別相談・デモ申込 → CV値: 15,000〜50,000円
無料トライアル登録 → CV値: 50,000〜200,000円(LTV基準で設定)
数字は業種・単価によって大きく変わります。最初は仮値で設定し、実際のクローズ率が分かったら見直すのが現実的です。
Meta(Facebook / Instagram)広告
Meta Pixel の標準実装
fbq('track', 'Lead', {
content_name: 'inquiry-form',
value: 5000,
currency: 'JPY',
});
GTM で「カスタム HTML タグ」として設定し、form_submit トリガーで発火させます。
CAPI(Conversions API)の必要性
iOS のプライバシー保護と Cookie ブロックにより、Pixel 単体では CV の約20〜40%がカウントされない場合があります(業種・ターゲット属性による)。Meta CAPI を使ったサーバーサイド計測を併用することで、マッチング率が向上します。CAPI の実装はサーバー側の作業が必要なため、エンジニアと相談のうえ進めてください。
Yahoo!広告・LINE 広告
Yahoo! 広告と LINE 広告の CV タグも、GTM の同じトリガー(form_submit)に紐付けることで一元管理できます。
// Yahoo! 広告のCVタグ(GTM カスタム HTML)
yjDataLayer = window.yjDataLayer || [];
function ytag() { yjDataLayer.push(arguments); }
ytag('event', 'yj_conv', {
'yahoo_conversion_id': 'XXXXXXXX',
'yahoo_conversion_label': 'XXXXXXXX',
});
計測でハマりやすいポイント
1. iframe フォームからの計測が届かない
埋め込み iframe 内のスクリプトは、クロスオリジン制限により親ページの dataLayer に直接 push できません。対処法は2つ:
方法A(推奨): postMessage を使ってフォーム→親ページにメッセージを送り、親ページ側で dataLayer.push を実行する。
// iframe 内(フォーム送信完了時)
window.parent.postMessage({ event: 'form_submit', form_id: 'xxx' }, '*');
// 親ページ側
window.addEventListener('message', function(e) {
if (e.data.event === 'form_submit') {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push(e.data);
}
});
方法B: サンキューページを別 URL として親フレームにリダイレクトし、そのページで計測する。ただしユーザー体験が変わるため設計の整合性を要確認。
レポアンの埋め込みフォームは postMessage 方式を内部実装しており、上記を自前で書く必要はありません。
2. シングルページアプリ(SPA)でサンキューページが存在しない
URL が変わらない SPA では、「サンキューページ到達」をCV条件にできません。JS の送信成功イベントを使います。
// Fetch / XHR の成功コールバック内
fetch('/api/form-submit', { method: 'POST', body: formData })
.then(res => res.json())
.then(data => {
if (data.success) {
window.dataLayer.push({ event: 'form_submit', form_id: 'xxx' });
}
});
3. 重複計測(ダブルカウント)
同じ送信がリロードや複数タブ操作で2回・3回カウントされることがあります。
対策1: transaction_id を一意に生成して GA4 / Google Ads に渡す(GA4 は同一 transaction_id の CV を自動で重複除外する)
対策2: 送信完了フラグを sessionStorage に保存し、フラグが立っていたら dataLayer push をスキップする
if (!sessionStorage.getItem('form_submitted_' + formId)) {
window.dataLayer.push({ event: 'form_submit', form_id: formId });
sessionStorage.setItem('form_submitted_' + formId, '1');
}
4. iOS の計測精度低下
iOS Safari はサードパーティ Cookie を制限しています。GA4 の Cookie ベース計測だけでは、iOS ユーザーの CV が計測されないケースがあります。重要なフォームでは GA4 Measurement Protocol(サーバーサイド送信) との併用を検討してください。
5. GTM タグが正しく発火しているか確認する手順
- GTM の「プレビュー」ボタンを押してデバッグモードを起動
- 実際にフォームを送信
- GTM プレビュー画面で「Tags Fired」に対象タグが表示されることを確認
- ブラウザのデベロッパーツール(Console)で
window.dataLayerを確認
// Console に貼り付けて実行
window.dataLayer.filter(e => e.event === 'form_submit')
CV値を最大化する運用ベストプラクティス
フォーム種別ごとに別CVアクションを作る
1つの「form_submit」にすべてのフォームを集約すると、問い合わせと資料請求が区別できなくなります。
推奨構成:
- CV1: form_submit_inquiry → 問い合わせフォーム(GA4コンバージョン登録)
- CV2: form_submit_lead → 資料請求フォーム(GA4 + Google Ads)
- CV3: form_submit_meeting → 個別相談予約(GA4 + Google Ads、CV値高め)
月次ファネルレビューの指標
| 指標 | 計測箇所 | 目標値(目安) |
|---|---|---|
| LP → フォーム表示率 | GA4 | 40〜70% |
| フォーム表示 → 入力開始率 | GA4 カスタムイベント | 50〜80% |
| 入力開始 → 送信完了率 | GA4 | 60〜85% |
| 広告クリック → CV率(CVR) | Google Ads | 業種平均1〜5% |
GTM の月次テスト運用
計測の「腐敗」(タグが発火しなくなる)は気づかずに放置されがちです。
- 月1回、GTM プレビューモードで手動テスト
- GA4 の「リアルタイム」レポートでフォーム送信イベントを目視確認
- Google Ads の「コンバージョン状態」が「最近のコンバージョンを記録」になっているか確認
よくある質問
Q. GTM なしで直接 gtag.js だけで計測できる?
できます。ただし、複数の広告プラットフォーム(Google Ads・Meta・Yahoo!・LINE)のCVタグを個別にハードコードすることになります。タグが増えると管理が煩雑になり、変更のたびにコードリリースが必要です。GTM 経由にすることで、マーケター側で非エンジニアがタグを追加・変更・停止できます。計測対象フォームが複数ある場合は GTM 導入を強く推奨します。
Q. GA4 のイベントとコンバージョンは何が違う?
GA4 では、フォーム送信などのユーザー行動を「イベント」として記録します。その中で特に重要な行動を「コンバージョン」としてマークすると、GA4 の「コンバージョン」レポートや広告との連携(Google Ads のインポート機能)で優先的に扱われます。イベントはすべて保存されますが、コンバージョンとしてマークしないと広告最適化に使われません。
Q. アンケートフォームでも CV 計測は意味がある?
はい。アンケートの「回答送信完了」を CV として計測することで、(1) 特定の集客経路からの回答が多い/少ないを把握できる、(2) アンケートをリード獲得の入口として使っている場合に広告効果を測定できる、(3) A/Bテストで設問数や導線を比較できる——などのメリットがあります。回収率の低いアンケートに広告費をかけている場合は特に有効です。
Q. CV 計測の設定に何時間くらいかかる?
GTM がすでに導入済みなら、GA4 イベント計測の設定は30〜60分。Google Ads CVタグの追加は15〜30分程度です。GTM の導入から始める場合は、スニペットの埋め込み〜初期設定で1〜2時間追加見込みです。レポアンのフォームを使う場合は GTM コンテナ ID を設定画面に入力するだけで dataLayer push が自動化されるため、GTM 側の設定(GA4タグ・CVタグの紐付け)に集中できます。
Q. 計測を入れたら CV 数が思ったより少なかった。何が原因?
よくある原因: (1) 正しいフォームを計測していない(送信完了ページではなくフォーム表示ページで計測している)、(2) iOS ユーザーの Cookie が取れていない、(3) GTM タグが一部のブラウザで発火していない(広告ブロッカーの影響)。まず GTM プレビューで正しく発火しているか確認し、次に GA4 の「リアルタイム」レポートと実際の受信件数(メール通知等)を比べて乖離を把握してください。
まとめ
フォーム・アンケートのCV計測は、広告最適化・A/Bテスト・ファネル分析の基盤になります。
実装の流れをまとめると:
- dataLayer push を実装(
form_submitイベント+transaction_id) - GTM でトリガー・タグを設定(GA4 + 各広告CVタグ)
- GA4 でコンバージョンとして登録(反映に24〜48時間)
- GTM プレビューで検証(毎月の定期チェックも忘れずに)
- フォーム種別ごとに CV アクションを分けて管理
レポアンは GTM dataLayer push をすべてのフォーム・アンケートで標準搭載しています。GTM コンテナ ID を設定画面に入力するだけで、Google 広告・GA4・Yahoo! 広告・LINE 広告などの CV 計測が動き始めます(コンバージョン計測の詳細)。iframe 埋め込みフォームでの postMessage 対応も組み込み済みのため、クロスフレーム計測の追加実装は不要です。
関連記事
- フォームのCVR(送信完了率)改善: リードフォームのCVR最適化
- サンキューページの設計: サンキューページ最適化
- アンケートの回収率を上げる: アンケートへの回答率ベンチマーク