静的サイトに GA4 を入れて、お問い合わせを成果(generate_lead)として数える

静的サイトに GA4 を入れ、お問い合わせが本当に送信できた時だけ generate_lead を1回だけ送る作りにしました。再読み込みや二重送信では数えない方法、入力内容を送らない決まり、点検の道具のアクセスが混ざった話の記録です。

お問い合わせの送信が成功した時だけ generate_lead を1回送る流れを、端末風のカードで見せた札

静的サイトの GA4(Google アナリティクス 4)で、お問い合わせを成果として数えるには、お問い合わせが本当に送信できた時だけ、受付の画面で generate_lead というイベントを1回だけ送る作りにします。再読み込みや、受付の URL を直接開いた時、二重送信や機械の投稿と見なした時は、送りません。私たちは、この形でこのサイトに入れました。

測定 ID(G- で始まる、GA4 の計測の番号)は、この記事には書きません。コードの例では、測定ID という言葉に置き換えています。

計測のコードの入れ方:測定 ID は1か所だけ、確認用には入れない

測定 ID は、書き出しの道具(ビルドのプログラム)の1か所にだけ書きました。すべてのページの head に、計測のコードが入ります。

測定 ID は書き出しの道具の1か所だけに書き、本番用のすべてのページの head に入れる。確認用の書き出しには入れない
本番用にだけ入れる
Pythontools/build.py
# 計測のコードは本番用の書き出しにだけ入れ、確認用(--preview)には入れない
GA_ID = '測定ID'

def ga_snippet():
    # GTAG_JS_URL は、Google が案内する gtag.js の読み込みの URL
    return (f'<script async src="{GTAG_JS_URL}?id={GA_ID}"></script>\n'
            f"<script>window.dataLayer = window.dataLayer || [];function gtag(){{dataLayer.push(arguments);}}"
            f"gtag('js', new Date());gtag('config', '{GA_ID}');</script>\n")

確認用(preview)の書き出しには、入れていません。確認用のサイトは、オーナーや AI が何度も開くので、入れると、自分たちのアクセスが混ざってしまうからです。

お問い合わせは、本当に送れた時だけ数える

お問い合わせの成果(リード)は、generate_lead というイベントで数えます。大事なのは、「フォームのボタンを押した時」ではなく、「本当に送信できた時」に数えることです。

メールの送信に成功した時だけ目印を作り、受付の画面で generate_lead を1回だけ送る流れ
本当に送れた時だけ、1回数える

私たちの作りは、次のとおりです。

  1. サーバーが、メールを送れた時だけ目印を作る

    お問い合わせのプログラム(PHP)が、メールの送信に成功した時だけ、1回限りの目印を作ります。二重送信や、機械の投稿と見なした時は、この目印を作りません。

  2. 受付の画面に、目印を載せる

    送信のあとの受付の画面を開く時に、目印を HTML に載せます。目印は、画面に出したら、すぐ使い切りにします。

  3. 目印がある時だけ、generate_lead を送る

    受付の画面の JavaScript が、目印を見つけた時だけ、generate_lead を1回送ります。同じ目印では、二度と送りません。

JavaScriptpublic/assets/site.js
// お問い合わせの送信の完了:受付の画面に目印がある時だけ、1回だけ送る(同じ目印では二度と送らない)
var done = document.querySelector('.form-done[data-lead]');
if (done) {
  var key = 'ga-lead-' + done.getAttribute('data-lead');
  var sent = false;
  try { sent = sessionStorage.getItem(key) === '1'; sessionStorage.setItem(key, '1'); } catch (e) {}
  if (!sent) gaEvent('generate_lead', { form: 'contact', page_path: location.pathname });
}

送らない場合:再読み込み、直接開く、二重送信、機械の投稿

この作りで、次の場合は generate_lead を送りません。

generate_lead を送らない4つの場合。再読み込み、受付の URL を直接開く、二重送信、機械の投稿
送らない4つの場合
  • 受付の画面を再読み込みした時。目印は一度画面に出したら使い切りなので、2回目の表示には載りません
  • 受付の URL を、直接開いた時。送信していないので、目印がありません
  • 二重送信の時。送信済みの券でもう一度送られた場合は、メールを送り直さず、目印も作りません
  • 機械の投稿と見なした時。メールを送らないので、目印も作りません

ほかのイベント:app_store_click と cta_click

お問い合わせのほかに、2つのクリックを数えています。

緑色の整理券が、皿の上に山のように積まれた写真
数えるのは「押した」ではなく「本当に送れた」件(イメージ写真)
イベント名 数えるもの
app_store_click App Store へのボタン、アプリの紹介ページへのリンク
cta_click 記事の最後の、サービスやお問い合わせへの案内

どのイベントにも、名前やメールアドレスなどの入力内容は入れません。送るのは、フォームの種類や、ページの場所、リンクの行き先など、人を特定しないものだけです。

つまずき:点検の道具のアクセスが GA4 に混ざった

点検の道具を動かした時に、手元のサーバーからのアクセスが、GA4 に1回混ざりました。点検の道具は、手元で配信したサイトをブラウザで開くので、計測のコードが動いて、Google に送ってしまったのです。

そこで、点検の道具では、Google への送信を止めるようにしました。あわせて、書き出しのあとの点検(check_site.py)に、「本番用のすべてのページに、計測のコードが1回だけ入り、確認用には入っていないこと」を確かめる項目を足しました。

暗い駅で、オレンジの光が点いた改札機が並ぶ写真
通った時だけ、1回数える(イメージ写真)

GA4 の画面でやること

コードを入れたあと、GA4 の画面で行うことが2つあります。

GA4 の画面で行う2つのこと。generate_lead をキーイベントにする、リアルタイムの画面でイベントが届いているか確かめる
コードを入れたあとの2つの作業
  1. generate_lead を、キーイベント(成果として数えるイベント)にする
  2. リアルタイムの画面で、イベントが届いているかを確かめる

まとめ

静的サイトに GA4 を入れて、お問い合わせを成果(generate_lead)として数える:要点のまとめ。測定 ID は、書き出しの道具の1か所にだけ書き、すべてのページの head に入れた。確認用の書き出しには入れない
この記事の要点
  • 測定 ID は、書き出しの道具の1か所にだけ書き、すべてのページの head に入れた。確認用の書き出しには入れない
  • お問い合わせは、サーバーがメールを送れた時だけ目印を作り、受付の画面で generate_lead を1回だけ送る
  • 再読み込み、受付の URL を直接開く、二重送信、機械の投稿では送らない
  • App Store へのボタンは app_store_click、記事の最後の案内は cta_click で数える。入力内容はどのイベントにも入れない
  • 点検の道具のアクセスが混ざったので、点検の道具では Google への送信を止めた

この記事は、AI(Claude)の支援を受けて作成し、筆者が内容を確認しています。

  • GA4
  • generate_lead
  • キーイベント
  • 静的サイト
  • お問い合わせフォーム
  • app_store_click

関連する記事

この記事に関連するサービス・アプリ

ブログの一覧へ