【GTM】フォーム送信トリガーが反応しない・動かない原因5選と解決策(GA4対応)
「GTM(Googleタグマネージャー)でフォーム送信のイベント計測を設定したのに、プレビューモードでトリガーが全く反応しない…」とお困りではありませんか?
GA4への移行後、旧来のフォーム設定では正常にイベントが拾えないケースが激増しています。実務で最も詰まりやすいポイントの一つです。
- フォーム送信が検知されない代表的な原因5つの完全特定
- ブラウザのデベロッパーツールを用いた失敗原因の切り分け手順
- Ajax(非同期通信)フォーム等でも確実にCVを拾う4つの解決策・代替案
- エンジニアにそのまま渡せる
dataLayer.pushのコピペ用コード
1. 【まず確認】GTMでフォーム送信が反応しないよくある原因5選
GTMのデフォルト「フォーム送信」トリガーは、ブラウザの標準的なsubmitイベントを検知する仕組みです。しかし現代のWebサイトでは、以下5つの原因によりトリガーが反応しないことが多々あります。
原因①:JavaScript(Ajax等)で制御されていて標準イベントが発生していない
最も多い原因です。SPA(Single Page Application)やAjaxを用いたフォームでは、ページをリロードせずにバックグラウンドで非同期通信を行います。この場合、ブラウザ標準のsubmitイベントが発生しないため、GTMの「フォーム送信トリガー」は一切反応しません。
原因②:フォーム要素(<form>タグ)が存在しない・不完全
見た目はフォームでも、HTML構造上<form>タグが存在せず、<div>や<button>のJavaScriptクリックイベントだけで処理されている場合があります。
| 区分 | HTMLコード例 | GTMフォームトリガーの判定 |
|---|---|---|
| 失敗例 (NG) | <div class="submit-btn" onclick="sendData()">送信</div> |
× 反応しない(formタグが存在しない) |
| 成功例 (OK) | <form id="contact-form"><button type="submit">送信</button></form> |
○ 反応する(標準submitイベント検知) |
原因③:他のJavaScriptがGTMのイベント発火を妨害(interrupted)している
既存のJSスクリプトでe.preventDefault()やe.stopPropagation()が使用されており、GTMがイベントをバブリング(検知)する前にイベント伝播がストップしているケースです。
原因④:GTMのトリガー条件(Form ID / Form Element等)の設定ミス
GTM側の配信条件指定(例: Form ID 等しい my-form)で、スペルミスや大文字・小文字の不一致、または動的に変化するIDを指定している場合に発生します。
原因⑤:送信成功前にページが遷移して計測がキャンセルされている
フォーム送信ボタンを押した直後に即座に別ページへリダイレクトされると、GTMのビーコン(GA4へのデータ送信)が完了する前に通信が切断されてしまいます。
2. 原因を特定する:デベロッパーツールでの切り分け手順
問題の切り分けは、感覚ではなくツールを使って論理的に行います。
① GTMプレビューモードで「Form Submit」イベントが出ているか確認
プレビューモードを起動し、フォームを送信した際に左側のイベントログ一覧に「Form Submit」または「gtm.formSubmit」が表示されるか確認します。
- 出ている場合:トリガー条件(Form IDなどのフィルタ指定)のミス。
- 出ていない場合:原因①〜③(JS制御やformタグ不在などシステム構造上の問題)。
② ブラウザの検証ツール(Console)でエラーが出ていないかチェック
ChromeでF12または右クリック「検証」を開き、「Console」タブを確認します。
💡 チェックポイント:
赤文字のエラーが出ている場合、サイト側のJSエラーによりGTMの処理がストップしている可能性が高まります。
3. 【原因別】GTMでフォーム送信を確実に計測する解決策
解決策①:フォーム送信トリガーの設定を見直す(基本パターン)
まずはGTM側の設定ミスを解消します。「一部のフォーム」で動かない場合は、一時的に「すべてのフォーム」に切り替えてテストします。
- GTM管理画面 > 「トリガー」 > 対象のトリガーを開く
- 「このトリガーの発火タイミング」を「すべてのフォーム」に変更して保存
- プレビューモードで発火が確認できたら、変数(
Form IDやForm Classes)の値を正しいものに再修正
解決策②:【おすすめ】サンクスページ(送信完了画面)の表示で計測する
実務で最も確実かつ推奨される代替案です。送信完了後に/thanks.htmlなどの完了ページへ遷移する構造であれば、フォーム送信トリガーを棄てて「ページビュー」トリガーで計測します。
| 設定項目 | 設定内容 |
|---|---|
| トリガーのタイプ | 初期化 / ページビュー |
| 発火条件 | 一部のページビュー > Page URL 含む /thanks |
解決策③:要素の表示(Element Visibility)トリガーを使う
ページ遷移せず、画面上に「送信が完了しました」というメッセージが動的に現れるフォーム(Ajax形式)に有効です。
メッセージ要素のCSS IDまたはCSS セレクタを指定し、それが画面上に現れた瞬間をコンバージョンと判定します。
解決策④:dataLayer.push を使ってエンジニアにイベントを仕込んでもらう(Ajax対策)
最も堅牢で誤差のない計測手法です。フォーム送信成功時のJS処理ブロックに、以下のコードを追加してもらうようエンジニアへ依頼します。
📄 コピペ用 dataLayer.push サンプルコード
// フォームのバリデーションを通過し、Ajax送信が成功したタイミングで実行
$.ajax({
url: '/api/submit',
type: 'POST',
data: formData,
success: function(response) {
// 成功時処理
// --- GTMカスタムイベントの発火 ---
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'custom_form_submit',
'form_name': 'contact_inquiry',
'form_id': 'form_001'
});
// ---------------------------------
alert('送信が完了しました');
}
});
GTM側の設定手順:
- GTMでトリガータイプ「カスタム イベント」を作成
- イベント名に
custom_form_submitと入力して保存 - GA4イベントタグのトリガーに設定
4. よくある質問(FAQ)
- GTMコンテナの「公開(Submit)」ボタンを押し忘れている(超頻出エラーです)。
- アドブロッカー等のブラウザ拡張機能が干渉している、または社内IP除外フィルタが機能している。
まとめ:どうしても動かない場合は「要素の表示」か「サンクスページ」に切り替えよう
標準の「フォーム送信」トリガーに固執せず、実務では柔軟に代替手段へ切り替えることがトラブルシューティング成功の鍵です。
- 基本:Ajaxフォームはデフォルトのフォーム送信トリガーでは拾えないと心得よ。
- 最速解決:サンクスページがあるなら「ページビュー」、メッセージ表示なら「要素の表示」トリガーに切り替える。
- 確実性重視:大規模・複雑なWebサイトではエンジニアに依頼して
dataLayer.pushを実装してもらう。
💡 実務アドバイス:GTMのフォーム送信トリガーはWebサイトの仕様変更に非常に弱いため、無理に標準トリガーに頼らず、代替手段を使うのが実務では一番早くて確実です!

Webサイト運営やデータ分析、業務効率化が好きなWebエンジニア・ブロガーです。
普段はWordPressを使ったサイト制作や、Googleアナリティクス(GA4)、Googleタグマネージャー(GTM)、Search Consoleを活用したアクセス解析を中心に学習・検証しています。
「難しいITやWebの知識を、誰でも理解できるように伝えること」をコンセプトに、このサイト「new-otasuke」を運営しています。
記事では、実際に自分で試した内容や、つまずいたポイント、解決方法をできるだけ分かりやすくまとめています。初心者の方でも安心して実践できるよう、画像や図解を交えながら丁寧に解説することを心掛けています。
最近は特に以下の分野を中心に情報発信しています。
Google Analytics 4(GA4)
Googleタグマネージャー(GTM)
Search Console
SEO対策
WordPress
Power Automate
統計学・データ分析
このサイトが、「困ったときに最初に見に来たくなる場所」になれば嬉しいです。
今後も、Webサイト運営や仕事に役立つ情報を分かりやすく発信していきます。どうぞよろしくお願いいたします。


コメント