CMS・WordPress

【GA4入門】問い合わせが「どの記事から来たか」を計測する設定|WordPress+Contact Form 7でgenerate_leadを送る

ブログやサービスサイトに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のような値は、登録しないとレポートで使えません。

  1. GA4の「管理 → データの表示 → カスタム定義」を開く
  2. 「カスタム ディメンションを作成」を押す
  3. ディメンション名に分かりやすい名前(例:サービスメニュー)、範囲に「イベント」、イベントパラメータにoffer_menuを入れて保存する

注意点は2つです。

  • 登録した時点からのデータにしか値が入りません。過去のイベントにはさかのぼって入らないので、イベントを送り始めたら早めに登録します
  • レポートに出るまで、24〜48時間ほどかかります

手順4:キーイベントにする

GA4では、サイトにとって大事なイベントをキーイベント(以前の「コンバージョン」)として区別できます。問い合わせの送信完了(generate_lead)は、キーイベントにしておきましょう。

  1. GA4の「管理 → データの表示 → イベント」を開く
  2. 「最近のイベント」タブを開く(「キーイベント」タブには、まだ出てきません)
  3. generate_leadの左の☆を押して★にする

イベントが一覧に出てくるまで、最大で24〜48時間かかります。出てこないときは、本番で一度テスト送信してから待ちます。送信できているかは、「レポート → リアルタイム」ですぐに確認できます。

手順5:探索で「どこから来たか」を見る

数字は、GA4の「探索」で表にして見るのが分かりやすいです。

  1. 「探索」→「空白」を選ぶ
  2. ディメンションに「イベント名」「サービスメニュー」(手順3で作ったもの)「ページパスとスクリーン クラス」を追加
  3. 指標に「イベント数」を追加
  4. 行に「イベント名」と「サービスメニュー」、値に「イベント数」を入れる
  5. フィルタで、イベント名を「次の正規表現に一致」offer_click|generate_leadに絞る

「サービスメニュー」の代わりに「ページパスとスクリーン クラス」を行に入れると、どの記事で案内が押されたかが分かります。名前を付けておけば、次からは「探索」の一覧から開くだけです。

確認方法

  1. 本番:ページのソースにgoogletagmanagerが出ていること
  2. ローカル:ページのソースにgoogletagmanagerが出ていないこと
  3. 二重計測:Networkタブでpage_viewのcollectが1本だけであること
  4. イベント:ボタンを押したり問い合わせを送ったりしたあと、「リアルタイム」にイベント名が出ること

チェックリスト

  • 計測プラグインとgtagの直書きが、両方動いていないか
  • データストリームが、意図せず2つ以上になっていないか
  • ローカル環境では、GA4のタグを出さないようにしたか
  • 問い合わせの数を、form_submitではなく送信成功のイベントで数えているか
  • イベントに付けた値を、カスタムディメンションに登録したか
  • 大事なイベントを、キーイベントにしたか

よくある質問

Q. 昔のプラグインが作ったカスタムディメンションは、削除してよいですか?

A. GA4では「削除」ではなく「アーカイブ」という操作になり、元に戻せません。アーカイブすると、過去のデータもそのディメンションでは見られなくなります。イベント単位のカスタムディメンションには上限(標準のプロパティで50個)があるので、上限に近づくまでは残しておいても困りません。

Q. 使っていないデータストリームは削除してよいですか?

A. 測定IDを確認して、サイトで使っていない方なら削除して大丈夫です。削除しても、それまでに集めたデータはプロパティに残ります。ただし削除は元に戻せないので、間違えて使っている方を消さないよう、測定IDは必ず見比べてください。

Q. 自分でイベントを送ると、GA4側でも何か登録が必要ですか?

A. イベントそのものは、登録しなくても届いた時点で一覧に載ります。必要なのは、パラメータをレポートで使うためのカスタムディメンションと、キーイベントにする★だけです。

まとめ

  • 問い合わせのような大事な行動は、自分でイベントを送らないと数えられない
  • 問い合わせの数は、Contact Form 7のwpcf7mailsentでgenerate_leadを送って数える
  • イベントの値はカスタムディメンションに登録し、大事なイベントはキーイベントにする
  • 計測の前に、二重計測とローカルの混入がないかを確かめる

参考