GTMのクリックトリガーが発火しない原因と対処|「リンクのみ」と「すべての要素」の違い、ボタン・画像・電話リンクの切り分け
GTMのクリックトリガーが発火しない原因を、全く発火しない・一部だけ・Click URLが空の3症状で切り分けます。「リンクのみ」と「すべての要素」の違い、ボタン・画像・電話(tel)リンクで計測できない時の条件設定まで、当日中に直せる手順で解説します。
この記事のポイント
- GTMのクリックトリガーが発火しない原因は、「全く発火しない」「一部だけ」「Click URLが空」の3症状に分けると特定が速い
- 「リンクのみ」は最も近いaタグを、「すべての要素」は実際に押された最も内側の要素をClick Elementとして拾う
- アイコンや画像の上で外れる場合は、CSSセレクタに一致で
a[href^="tel:"], a[href^="tel:"] *のように子孫要素まで含めれば直る- tel:のクリックは通話成立を意味しないため、広告の入札用CVはサブにし、通話時間で判定する通話CVを主にする
ボタンのクリック計測をGoogleタグマネージャー(GTM)で設定し、プレビューも開いた。それなのにタグが一向に発火しない。あるいはスマホの一部のボタンだけ拾えている。Click URLの欄を見ると空っぽ。GTMのクリックトリガーが発火しない場面で、設定画面を何度見直しても答えが出ないのは珍しくありません。
理由の多くは、トリガーの種類とクリックされた要素の食い違いにあります。画面上では「ボタンを押した」つもりでも、ブラウザ上で実際に押されたのは中の span や svg だった、という具合です。
この記事では、症状3パターンから原因を切り分け、ボタン・画像・電話リンクそれぞれの直し方、サイト実装側の原因、修正後の確認までを順に扱います。

GTMのクリックトリガーが発火しない時、まず何を確認すべき?
GTMのクリックトリガーが発火しない時は、まず症状を「全く発火しない」「一部だけ発火しない」「発火するがClick URLが空」の3つに分け、制限なしの「すべての要素」トリガーでクリック自体が検知されるかを確かめるのが最初の一手です。ここで検知されるなら原因はトリガー条件、されないならサイト実装側にあります。
症状別の原因早見表(全く発火しない/一部だけ/Click URLが空)
プレビューを見ながら、次の表の左列から自分の症状を探してください。
| 症状 | 主な原因 | 最初に見る場所 |
|---|---|---|
| 全く発火しない | 組み込み変数やトリガー種類のミス、サイト側の伝播停止、プレビューの接続不良 | Tag Assistantの「Click」イベントが出ているか |
| 一部だけ発火しない | 子要素(span・svg・img)が押されている、レスポンシブで別要素が表示されている | Click Elementの中身(押された要素) |
| 発火するがClick URLが空 | 押された要素自体にhrefがない(すべての要素で子要素を拾っている、button・divなど) | Click Element、Click Classes |
プレビュー自体がつながらない場合は、クリックの話の手前で止まっています。その時はGTMプレビューがつながらない時の切り分けを先に済ませてください。
制限なしの「すべての要素」トリガーで切り分ける1分テスト
手順は短いものです。
- トリガーを新規作成し、種類は「クリック - すべての要素」を選ぶ
- 「このトリガーの配信場所」は「すべてのクリック」にして保存する
- 何もタグを紐付けず、ワークスペースのプレビューを起動して対象ページを開く
- 問題のボタンを押し、Tag Assistantのサマリーに「Click」イベントが並ぶか見る
Simo Ahava氏のブログ「Why Don’t My GTM Listeners Work?」でも、リスナーが動かない原因としてスクリプトの競合や伝播停止が非常に多いこと、切り分けは制限なしの「すべての要素」で検知を見ることから始めるのが定石であることが述べられています。日本の実務でも、この順番を守ると制作会社へ相談する前に「自分で直せる範囲」がはっきりします。
イベントが出れば、押された要素をClick Elementで確認して条件を直す段階です。出なければ第6章に進んでください。
「リンクのみ」と「すべての要素」の違いは?
「リンクのみ」と「すべての要素」の違いは、クリックされた場所からどの要素をClick Elementとして採用するかにあります。リンクのみは最も近いaタグ、すべての要素は実際に押された最も内側の要素です。
「リンクのみ」はクリック地点から一番近いaタグを拾う
クリック - リンクのみとは、クリックされた要素から親方向にたどって最も近い a 要素を見つけ、それをClick Elementとして扱うトリガーです。aタグの中の span や img を押しても、Click Elementはaタグになります。だからClick URLも必ず入ります。
逆に言えば、aタグで囲まれていないボタン(button タグ、div にJavaScriptを付けたもの)はこのトリガーでは拾えません。「ボタンなのにリンクのみで設定した」が、全く発火しない症状の定番です。
「すべての要素」は実際に押された一番内側の要素を拾う
クリック - すべての要素は、実際に押された最も内側の要素をそのままClick Elementにします。ボタンの中のアイコン svg を押せば、Click Elementは svg です。
ここに落とし穴があります。Click Classesやクリック先のセレクタを「ボタン本体」のクラス名で条件にしていると、内側の span や svg が押された時には一致せず、タグが発火しません。ボタンの端を押すと取れて、文字やアイコンの上だと取れない。これが「一部だけ発火しない」の正体です。
妥当性をチェック・タグの配信を待つはONにすべきか
この2つの設定はリンクのみにだけ存在します(すべての要素にはありません)。
「妥当性をチェック」は、有効なリンククリックだけを対象にする設定です。Simo Ahava氏の「Fix Problems With GTM Listeners」によると、ONにするとpreventDefaultされたクリックは拾われません。JavaScriptでページ遷移を制御しているサイトでは、これがONのせいで発火しないことがあります。
「タグの配信を待つ」は、ページ遷移の前にタグが完了するまで最大待ち時間(既定は2000ミリ秒)だけ遷移を遅らせる設定です。同一タブで外部へ遷移するリンクでは、計測の取りこぼし防止にONが向きます。別タブで開くリンクやページ内アンカーでは基本不要です。
- 発火しない原因を探している間は、妥当性のチェックを一度OFFにして挙動を見る
- 遷移を伴う広告CVのタグは、配信を待つをONにする
結局どちらを使えばよいかの判断表
| 計測したい対象 | 選ぶトリガー | 条件の軸 |
|---|---|---|
| aタグのテキストリンク・バナー | リンクのみ | Click URLの一部が一致 |
| アイコン入りのリンクボタン | リンクのみ、または、すべての要素+子孫セレクタ | Click URL/CSSセレクタ |
button・div のボタン | すべての要素 | IDや専用クラスに一致するCSSセレクタ |
| tel:・mailto: | リンクのみ、または、すべての要素+子孫セレクタ | Click URLが tel: で始まる |
迷ったらaタグのリンクだけリンクのみ、それ以外はすべての要素に一部のクリックの条件を付ける、と覚えておけば足ります。
ボタンのクリックが計測できない原因と直し方
押された要素は中のアイコンだった
ボタンのクリックが計測できない原因は、ボタンの実体が a ではなく button や div なのにリンクのみを選んでいること、または押された子要素がセレクタ条件から外れていることの二つがほとんどです。直し方は、すべての要素に切り替えてCSSセレクタに一致で子孫まで含めます。
ボタンがaタグかbuttonタグかを検証ツールで確認する
ブラウザで対象ボタンを右クリックして「検証」を開き、ハイライトされた要素のタグ名を見ます。<a href="..."> ならリンクのみで足ります。<button> や <div class="btn"> なら、リンクのみでは拾えません。画面上は同じ見た目でも、実装はまちまちです。
アイコンや文字の上を押すと外れる問題:子孫セレクタで直す
Simo Ahava氏の「10 Useful CSS Selectors」で紹介されている考え方が、そのまま使えます。すべての要素ではClick Elementが最も内側になるため、本体だけに一致する条件では外れる。そこで、対象と、その子孫すべてを並べて指定します。
トリガーの配信場所を「一部のクリック」にし、Click Element CSSセレクタに一致 に次を入れます。
.btn-reserve, .btn-reserve *
後半の * が、中にある span や svg などすべての子孫を表します。リンクボタンなら a[href] * の形で、aタグ配下のどこを押しても一致します。
Click Textに頼らず、IDや専用クラス・data属性で判定する
Click Textは手軽ですが、文言を変えた瞬間に壊れます。多言語対応や、ボタン内にアイコンの文字が混ざる場合も不安定です。可能なら、計測専用のクラス(例 js-cv-reserve)か data-track="reserve" のようなdata属性をサイト側に付けてもらい、[data-track="reserve"], [data-track="reserve"] * で判定する方が長持ちします。デザイン用クラスは改修で変わりやすいので、専用のものを推奨します。
画像リンクで計測できない・Click URLが空になるのはなぜ?
画像リンクでClick URLが空になるのは、すべての要素トリガーでClick Elementが img になり、img 自体にはhrefがないためです。URLはaタグ側が持っているので、親要素から取る必要があります。
Click URLが空になる3つのパターン
- 「すべての要素」で
imgやspanが押され、Click Elementにhrefがない buttonやdivがJavaScriptで遷移させており、そもそもhrefを持たない- aタグのhrefが
#やjavascript:void(0)で、実質的なURLがない
1つ目は変数で直せます。2つ目と3つ目は、URLではなくIDやクラスで判定する方針に切り替えるのが現実的です。
CSSセレクタ一致で画像リンクを拾う条件例
特定ページへの画像バナーなら、トリガーの条件を次のようにします。
a[href*="/contact"], a[href*="/contact"] *
これで、画像でもテキストでも、/contact へのリンク内のクリックを漏れなく拾えます。
alt属性や親のhrefを取るカスタムJS変数
親のhrefを取りたい時は、カスタムJavaScript変数を作ります。
function() {
var el = {{Click Element}};
if (!el || !el.closest) return undefined;
var a = el.closest('a');
return a ? a.href : undefined;
}
イベントパラメータに画像の識別子を送りたければ、el.tagName === 'IMG' の時に el.alt を返す変数を別に作ります。altが空の画像も多いので、その場合は親のhrefを使う使い分けが無難です。
バナー群をリンク先ごとに分けて見たいだけなら、この変数ひとつをGoogle アナリティクス 4(GA4)のイベントパラメータに渡せば足ります。
電話リンク(tel:)のクリックをGTMで計測する手順と注意点
電話リンクのクリックは、Click URLが tel: で始まる条件で計測できますが、分かるのは発信画面を開いたことだけで、通話が成立したかどうかは分かりません。広告CVに使う際はこの限界を前提に判断する必要があります。
Click URLがtel:で始まる条件で設定する手順
- 組み込み変数で Click URL、Click Element、Click Classes を有効化する(変数 → 構成)
- トリガーを新規作成し、種類は「クリック - リンクのみ」
- 配信場所を「一部のリンククリック」にし、
Click URL次で始まるtel:を設定する - GA4イベントタグ(例:
click_tel)を紐付ける - プレビューで実機または検証ツールのモバイル表示から押して確認する
電話アイコン付きのボタンが漏れる場合は、すべての要素に変えて、a[href^="tel:"], a[href^="tel:"] * のCSSセレクタに一致を使います。mailto: も mailto: に置き換えれば同じ要領です。
PCでの誤クリックと通話未成立をどう扱うか
PCでは、tel:リンクを押しても何も起きない、または通話アプリが開くだけ、という環境が多くあります。さらに、スマホでも発信画面で止めた人は数えられます。つまりクリック数は、通話数より多めに出る傾向があります。
Mediahawk / PaperStreet の解説記事(2026年更新版)でも、tel:クリックで取れるのは発信画面を開いた事実だけで、通話時間は取れないこと、入札用のメインCVにするなら転送電話番号やコールトラッキングと分けて設計すべきことが整理されています。日本でも事情は同じです。PCのクリックはデバイスで分けて集計するか、モバイルのみに絞って使うのが安全です。
Google広告の通話コンバージョンとの使い分け(メインかサブか)
判断の軸は単純です。
- 通話時間で判定する通話コンバージョンがある(広告表示オプション、通話専用の電話番号など)→ それをメインCV、tel:クリックはサブ(入札には使わず観察用)
- 通話計測の手段がない → tel:クリックを暫定のメインにしてもよいが、誤クリックを含む前提で目標値を見る
tel:クリックをそのままスマート入札の学習に入れると、通話にならない行動を成果として学習してしまいます。通話CVの不具合はGoogle広告の通話コンバージョンが計測されない原因で扱っています。電話やチャットを含めた全体設計は、電話・チャット問い合わせを広告CVに組み込む計測設計も参考になります。
設定は正しいのにプレビューに何も出ない時の原因
設定が正しいのにプレビューに何も出ない場合は、サイト側のスクリプトがクリックの伝播を止めているか、ボタンがShadow DOMやiframeの中にあることがほとんどです。GTM側をいくら直しても改善しないので、実装側の確認に切り替えます。
サイト側でクリックの伝播が止められている(return false / stopPropagation)
GTMのクリックリスナーは、documentノードまでバブリングしてきたイベントを受け取る仕組みです。Simo Ahava氏の「Fix Problems With GTM Listeners」によれば、サイト側のjQueryで return false や e.stopPropagation() が呼ばれると、イベントがdocumentに届かず、トリガー設定が正しくても一切発火しません。
見分け方として、同じページの別のリンクは拾えるのに特定のボタンだけ出ない時は、このパターンを疑います。また、リンクのみで妥当性をチェックをONにしている場合、preventDefault されたクリックは拾われません。
Shadow DOM・iframe内のボタン(チャット・予約ウィジェット)
Shadow DOMは、Web Componentsがボタンなどを内部に隠す仕組みです。Phase2 Technologyの解説では、Shadow DOM内のボタンはGTMからはホスト要素がクリックされたように見え、Click URLやClick Classesが期待どおりに取れないとされています。カスタムJavaScriptで composedPath を使って実際の要素を取り出す必要があります。ただし、closedモードのShadow DOMは外から中を覗けません。
iframeの中は別ドキュメントなので、親ページのGTMでは一切クリックが見えません。チャットや外部予約ウィジェットは、提供元の用意したイベント(dataLayer への送信)を使うのが通常の解決策です。
制作会社に修正を依頼するときに伝える内容
- 対象ページのURLと、押してもプレビューにClickが出ないボタンの場所
- すべての要素トリガーでも検知できなかった事実(切り分け済みであること)
- 疑われる原因(クリック伝播の停止、jQueryの
return falseなど) - 希望する対応(伝播を止めない、またはクリック時に
dataLayer.pushを追加する)
「GTMが動かない」ではなく、ここまで具体的に伝えると、見積もりと工数が大きく変わります。それでも原因が見えない場合は、要素の表示で発火するトリガーという代替の考え方もあります。クリックではなく送信で悩んでいるなら、フォーム送信トリガーが発火しない時の対処も参照してください。
修正後に正しく計測できているか確かめる手順
修正後の確認では、対象のクリックで発火することだけでなく、対象外のクリックで発火しないこと、二重に計上されないことの三点を見ます。発火するだけで終わらせると、誤計測を本番に出すことになります。
発火すること・発火しないことの両方を確認する
プレビューで次を順に押します。
- 対象ボタンの端、文字の上、アイコンの上(すべて発火するか)
- 対象外のボタンやリンク(発火しないか)
- スマホ表示とPC表示(レスポンシブで別要素にならないか)
Tag Assistantで当該Clickイベントを選び、「タグ」欄に発火したタグが出ているかと、「変数」タブのClick Elementの中身を見比べます。
GA4・広告側での反映確認と二重計上チェック
GA4のDebugViewでイベント名とパラメータが届いているか確認します。出ない場合はGA4のDebugViewにイベントが出ない時の確認を使ってください。
二重計上は、同じクリックに対して複数のトリガーが条件を満たす時に起きます。たとえば「リンクのみ」と「すべての要素」の両方でtel:計測を作ってしまったケースです。プレビューの1回のクリックでタグが2回出ていないかを必ず見ます。
最後に公開です。公開したのに本番で動かない時は、GTMで公開したのに本番に反映されない時の確認手順を確認します。
よくある質問
Q:GTMの「リンクのみ」と「すべての要素」はどちらを使えばよいですか?
aタグのリンクなら「リンクのみ」で足ります。button や div で作られたボタンは「すべての要素」を選び、CSSセレクタに一致で対象と子孫要素を絞ります。
Q:GTMのクリック変数(Click URLなど)がプレビューに表示されないのはなぜ?
主な原因は、組み込み変数の有効化漏れか、クリックトリガーがコンテナに1つも無いことです。「変数」→「構成」でClick系の変数にチェックを入れ、クリックトリガーを1つ作ってから、再度プレビューを確認してください。
Q:tel:リンクのクリックを広告のコンバージョンにしてよいですか?
通話の成立は分からないため、入札用の主CVにはお勧めしません。通話時間で判定する通話コンバージョンを主にして、tel:クリックはサブとして使う考え方が安全です。
Q:「すべての要素」にするとサイト中のクリックを拾って重くなりませんか?
「一部のクリック」で条件を絞れば、タグの送信は対象のクリックだけです。リスナー自体はリンクのみでも常に動いているため、表示速度への影響はほぼありません。
Q:スマホでは発火するのにPCでは発火しない(またはその逆)のはなぜ?
レスポンシブでPC用とスマホ用に別の要素が表示されている場合や、PCでは電話番号がリンクになっていない場合が多いです。各デバイスで検証ツールを開き、押している要素のタグとクラスを確認してください。
GTMのクリック計測は、症状から切り分ければ多くの場合その日のうちに直せます。真策堂では、こうした計測の見直しや広告CVの設計について、ご相談をお受けしています。原因の切り分けだけでも、お気軽にお問い合わせください。
発信画面で止めた人も数えられる
図1: 2つのトリガーが拾う要素の違い
- アクセス解析
Looker Studioのデータ統合で数値が合わない・増える原因と直し方|結合キーの重複・結合タイプ・集計粒度の3層切り分け
Looker Studioのデータ統合で数値が増える・合わない・nullになる原因を、結合キーの重複・結合タイプ(左外部結合と内部結合の違い)・集計粒度の3層で切り分けます。元データとの突き合わせ手順とCTRの作り直し方まで解説します。
- アクセス解析
GTMのフォーム送信トリガーが発火しない原因と対処|Contact Form 7・Ajax送信・埋め込みフォームの切り分けと代替トリガー
GTMのフォーム送信トリガーが発火しない原因を、Ajax送信・iframe埋め込み・トリガー条件の3型で切り分け。プレビューモードでの1分判定、Contact Form 7のwpcf7mailsentを使う設定、要素の表示やpostMessageなど代替トリガーの選び方、誤発火と二重計上の確認まで当日中に進められる手順でまとめました。
- アクセス解析
GA4のクロスドメイン設定が効かない・_glパラメータが付かない原因と確認手順|設定・リンク形式・リダイレクトの3層切り分け
GA4のクロスドメイン設定をしたのに_glパラメータが付かない・途中で消える・セッションが切れる原因を、設定・リンク形式・リダイレクトの3層で切り分け。遷移先URLを見る1分テストから、ボタンやフォームで効かない理由、Networkタブでの消失箇所の特定、修正後の検証まで当日中に確認できる手順でまとめました。