ブログやサービスサイトにGA4を入れたものの、「結局、どの記事から何件の問い合わせが来たのか」は分からない、という状態になっていませんか。GA4はタグを入れるだけでもページビューは数えてくれますが、問い合わせのような「自分のサイトにとって大事な行動」は、自分で送らないと数えられません。
この記事では、このサイトに受託サービスのページを作ったときに設定した内容をもとに、問い合わせを記事単位で計測するまでの手順をまとめます。途中でつまずいた「二重計測」と「ローカルのデータの混入」の直し方も紹介します。
この記事は2026年10月時点のGA4の管理画面と、Googleアナリティクス ヘルプ・Contact Form 7公式ドキュメントの記述をもとにしています。測定IDなどはすべて架空の値です。
結論:イベントを送り、名前を付け、★を付ける
先に結論です。
- GA4のイベントには、自動で送られるものと自分で送るものがある。問い合わせは自分で送る
- 問い合わせの数は、Contact Form 7の送信が成功したときに
generate_leadを送って数える(GA4が自動で拾うform_submitは使わない) - イベントに付けた値をレポートで使うには、カスタムディメンションの登録が必要
- 大事なイベントには、管理画面で★を付けてキーイベントにする
- 計測を始める前に、プラグインとの二重計測とローカル環境のデータの混入がないかを確かめる
環境
- WordPress(自作テーマ。GA4のタグ=gtag.jsをテーマに直接書いている)
- Contact Form 7(お問い合わせフォーム)
- Googleアナリティクス4(GA4)
GA4のイベントは3種類ある
GA4の「管理 → データの表示 → イベント」を開くと、設定した覚えのないイベントが並んでいます。これは不具合ではなく、GA4が自動で集めているものです。
1. GA4が必ず送るもの
| イベント | 意味 |
|---|---|
page_view |
ページが表示された |
first_visit |
そのユーザーが初めてサイトに来た |
session_start |
訪問(セッション)が始まった |
user_engagement |
ページを一定時間見ていた |
2. 拡張計測機能で送られるもの
データストリームの「拡張計測機能」で送られるイベントです。
| イベント | 意味 |
|---|---|
scroll |
ページの約90%までスクロールされた |
click |
外部サイトへのリンクが押された(サイト内のリンクは含まない) |
view_search_results |
サイト内検索の結果ページが表示された(URLのsなどのパラメータで判定) |
form_start / form_submit |
フォームの入力が始まった/フォームが送信された |
3. 自分で送るもの
「問い合わせボタンが押された」「問い合わせが届いた」のような、サイトごとに意味が違う行動は、自分でコードを書いて送ります。この記事で作るのはこれです。
計測を始める前に:二重計測とローカルの混入を直す
二重計測:プラグインとgtagの直書きが両方動いていた
GA4の「管理 → データの収集と修正 → データストリーム」を開いたら、ストリームが2つありました。1つはテーマに直書きしたgtagのもの、もう1つは昔使っていた計測プラグイン(MonsterInsights)が作ったものです。
プラグインを有効にしたままテーマにもgtagを書いていたため、1つのページに2つの測定IDが設定されていました。gtagは、送り先を指定しないイベントを、ページに設定されたすべての測定IDに送ります。そのため、ページビューなどが同じプロパティに二重で数えられていました。
直し方は、どちらか一方だけにすることです。今回はテーマのgtagを残し、プラグインを無効にしました。
確かめるときは、ブラウザの開発者ツールの「Network」タブでcollectと絞り込み、ページを再読み込みします。page_viewを含むリクエストが1本だけなら正常です。
ローカル環境のデータが本番に混ざる
テーマにgtagを直書きしていると、ローカル環境(localhost)でページを確認したときも、本番と同じGA4にデータが送られます。動作確認で押したボタンも、本番の1件として数えられてしまいます。
本番のドメインで表示しているときだけ、タグを出すようにします。
// functions.php など
function my_is_production() {
return 'example.com' === wp_parse_url( home_url(), PHP_URL_HOST );
}
<?php // header.php の <head> の中 ?>
<?php if ( my_is_production() ) : ?>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX');
</script>
<?php endif; ?>
example.comとG-XXXXXXXXXXは、自分のドメインと測定IDに置き換えてください。
手順1:ボタンのクリックをイベントで送る
まず、記事の中の「サービスの案内」のボタンが押されたことを送ります。ボタンにdata-属性で目印を付けておき、JavaScriptでまとめて拾います。
<a href="/services/#repair" data-offer-click="repair">詳しく見る</a>
document.addEventListener('click', (e) => {
const a = e.target.closest('[data-offer-click]');
if (!a || typeof window.gtag !== 'function') return;
window.gtag('event', 'offer_click', {
offer_menu: a.dataset.offerClick, // どのメニューの案内か(repair など)
});
});
typeof window.gtag !== 'function'のチェックは、ローカルのようにgtagを読み込んでいない環境で、エラーにしないためのものです。
イベント名(offer_click)とパラメータ名(offer_menu)は自由に付けられます。英小文字とアンダースコアで、あとから見て意味が分かる名前にしておきましょう。
手順2:問い合わせの送信完了をgenerate_leadで送る
問い合わせの数を数えるのに、拡張計測機能のform_submitは向いていません。フォームが送信された時点で記録されるため、入力エラーで送れなかった場合も数えられることがあるからです。
Contact Form 7は、送信の結果に応じてJavaScriptのイベントを発生させます。公式ドキュメントによると、wpcf7mailsentはメールの送信が成功したときだけ発生します。これを拾って、GA4の推奨イベントgenerate_leadを送ります。
document.addEventListener('wpcf7mailsent', (e) => {
if (typeof window.gtag !== 'function') return;
const inputs = (e.detail && e.detail.inputs) || [];
const from = inputs.find((i) => i.name === 'your-from');
window.gtag('event', 'generate_lead', {
offer_menu: (from && from.value) || '(none)',
});
});
e.detail.inputsには、フォームに入力された値が「nameとvalueの組」の配列で入っています。ここでは、フォームに用意した隠し項目your-from(どのメニューから来たか)の値を一緒に送っています。
隠し項目は、Contact Form 7のフォームにこう書くと、URLの?your-from=repairの値が自動で入ります。
[hidden your-from default:get]
手順3:カスタムディメンションを登録する
イベントに付けたoffer_menuのような値は、登録しないとレポートで使えません。
- GA4の「管理 → データの表示 → カスタム定義」を開く
- 「カスタム ディメンションを作成」を押す
- ディメンション名に分かりやすい名前(例:サービスメニュー)、範囲に「イベント」、イベントパラメータに
offer_menuを入れて保存する
注意点は2つです。
- 登録した時点からのデータにしか値が入りません。過去のイベントにはさかのぼって入らないので、イベントを送り始めたら早めに登録します
- レポートに出るまで、24〜48時間ほどかかります
手順4:キーイベントにする
GA4では、サイトにとって大事なイベントをキーイベント(以前の「コンバージョン」)として区別できます。問い合わせの送信完了(generate_lead)は、キーイベントにしておきましょう。
- GA4の「管理 → データの表示 → イベント」を開く
- 「最近のイベント」タブを開く(「キーイベント」タブには、まだ出てきません)
generate_leadの左の☆を押して★にする
イベントが一覧に出てくるまで、最大で24〜48時間かかります。出てこないときは、本番で一度テスト送信してから待ちます。送信できているかは、「レポート → リアルタイム」ですぐに確認できます。
手順5:探索で「どこから来たか」を見る
数字は、GA4の「探索」で表にして見るのが分かりやすいです。
- 「探索」→「空白」を選ぶ
- ディメンションに「イベント名」「サービスメニュー」(手順3で作ったもの)「ページパスとスクリーン クラス」を追加
- 指標に「イベント数」を追加
- 行に「イベント名」と「サービスメニュー」、値に「イベント数」を入れる
- フィルタで、イベント名を「次の正規表現に一致」
offer_click|generate_leadに絞る
「サービスメニュー」の代わりに「ページパスとスクリーン クラス」を行に入れると、どの記事で案内が押されたかが分かります。名前を付けておけば、次からは「探索」の一覧から開くだけです。
確認方法
- 本番:ページのソースに
googletagmanagerが出ていること - ローカル:ページのソースに
googletagmanagerが出ていないこと - 二重計測:Networkタブで
page_viewのcollectが1本だけであること - イベント:ボタンを押したり問い合わせを送ったりしたあと、「リアルタイム」にイベント名が出ること
チェックリスト
- 計測プラグインとgtagの直書きが、両方動いていないか
- データストリームが、意図せず2つ以上になっていないか
- ローカル環境では、GA4のタグを出さないようにしたか
- 問い合わせの数を、
form_submitではなく送信成功のイベントで数えているか - イベントに付けた値を、カスタムディメンションに登録したか
- 大事なイベントを、キーイベントにしたか
よくある質問
Q. 昔のプラグインが作ったカスタムディメンションは、削除してよいですか?
A. GA4では「削除」ではなく「アーカイブ」という操作になり、元に戻せません。アーカイブすると、過去のデータもそのディメンションでは見られなくなります。イベント単位のカスタムディメンションには上限(標準のプロパティで50個)があるので、上限に近づくまでは残しておいても困りません。
Q. 使っていないデータストリームは削除してよいですか?
A. 測定IDを確認して、サイトで使っていない方なら削除して大丈夫です。削除しても、それまでに集めたデータはプロパティに残ります。ただし削除は元に戻せないので、間違えて使っている方を消さないよう、測定IDは必ず見比べてください。
Q. 自分でイベントを送ると、GA4側でも何か登録が必要ですか?
A. イベントそのものは、登録しなくても届いた時点で一覧に載ります。必要なのは、パラメータをレポートで使うためのカスタムディメンションと、キーイベントにする★だけです。
まとめ
- 問い合わせのような大事な行動は、自分でイベントを送らないと数えられない
- 問い合わせの数は、Contact Form 7の
wpcf7mailsentでgenerate_leadを送って数える - イベントの値はカスタムディメンションに登録し、大事なイベントはキーイベントにする
- 計測の前に、二重計測とローカルの混入がないかを確かめる