← 記事一覧へ

ブログ

GA4のeコマース購入イベント(purchase)が正しく送られているか確認する方法

ga4 purchase イベント 確認ga4 eコマース 計測ga4 購入 itemsga4 売上 計測されない

「GA4のeコマースを設定したのに、収益化レポートの売上がECカートの数字と合わない」——ネットショップの計測でとても多い悩みです。購入は起きているのに、金額が入っていなかったり、商品が1つも記録されていなかったり。原因の多くは、購入時に送られる purchase イベント の中身の不備に集約されます。

こんな症状に心当たりはありませんか?

  • 収益化レポートで 購入数はあるのに売上(value)が0、または空欄
  • 「eコマースの購入数」は出るのに、商品(items)の一覧が空
  • カートの管理画面とGA4の 売上金額がずれる
  • 同じ注文が 二重に計上 され、売上が実際より多く出る

この記事では、GA4の購入イベントが正しく送られているかを確認する方法を、purchase の必須パラメータごとに整理します。どこを見れば「送れている/送れていない」が切り分けられるのか、実務目線で解説します。

まず押さえる:purchaseイベントに必要なパラメータ

GA4のeコマース計測の中心が、購入完了時に送る推奨イベント purchase です。売上と商品を正しく記録するには、次のパラメータがそろっている必要があります。

パラメータ 役割 よくある不備
transaction_id 注文を一意に識別するID 欠落すると同じ購入が重複計上される
value 購入金額の合計 未設定/文字列で送っていて売上が0になる
currency 通貨コード(ISO 4217) JPY/USD でない・欠落で金額が集計されない
items 購入商品の配列 空配列・スキーマ誤りで商品が記録されない

ポイントは、valuecurrency は必ずセットだということです。GA4は通貨が分からないと金額を売上として集計できません。また items は配列で、各商品が item_iditem_name などのフィールドを持ちます。この配列が空だったり構造が違ったりすると、購入は数えられても中身の商品が消えます。

items 配列のつまずき(商品が記録されない)

「購入数は出るのに商品が空」というときは、ほぼ items の問題です。典型的な原因は次の3つです。

  1. items配列が空purchase は送っているが items: [] になっている。カート情報の受け渡しが途中で切れているケース。
  2. スキーマ(構造)の誤り:各商品が item_iditem_name も持っていない。GA4はどちらか一方は必須とみなすため、両方欠けると商品として扱われません。
  3. フィールド名の間違いidname など旧Universal Analytics時代のキーのまま送っている。GA4は item_iditem_name を期待します。

つまずきやすい例: 開発者ツールで purchase の送信は見えるのに商品が記録されない場合、リクエストの中身で items が空になっていないか、キー名が item_iditem_name になっているかを1件ずつ確認してください。「イベントが飛んでいる」=「商品まで正しく入っている」ではありません。

valuecurrency のつまずき(売上が合わない)

金額まわりの不備は、売上レポートを静かに壊します。

  • value が文字列"3000" のように文字列で送ると、GA4が数値として集計できず売上に反映されないことがあります。数値(3000)で渡します。
  • currency の欠落・非ISOcurrency がない、あるいは ¥ のような表記だと集計されません。ISO 4217の3文字コードJPYUSD など)で渡す必要があります。
  • 税・送料の扱いが不統一value に税や送料を含めるか含めないかは、カート側とGA4側で方針を揃えないと、金額のズレとして表面化します。どちらでも構いませんが、一貫させることが重要です。

つまずきやすい例: 「購入数は合うのに売上だけずれる」場合、value に何を含めているか(税込み/税抜き/送料の有無)をまず疑ってください。多くのズレはここに原因があります。

transaction_id のつまずき(重複計上)

transaction_id は注文を一意に識別するためのパラメータです。これが欠けていたり、毎回変わってしまうと、GA4は同じ購入を別々の購入と見なし、重複して計上します。

  • サンクスページを再読み込みするたびに purchase が飛び、transaction_id がなければそのたびに新しい売上として数えられる
  • 逆に、正しい transaction_id が入っていれば、GA4は同じIDの重複購入を排除してくれる

重複計上そのものの詳しい切り分けは、コンバージョンが二重計測される原因と対処 で扱っています。注文番号など、注文ごとに一意で変わらない値transaction_id に入れるのが基本です。

dataLayerのつまずき(GTM実装の場合)

Googleタグマネージャー(GTM)で purchase イベントを送っている場合、データは dataLayer を経由します。「purchaseは飛ぶのにデータがおかしい」問題の多くは、次の3つに起因します。

  1. ecommerceオブジェクトをクリアしていない。 GTMはdataLayerのpushを再帰的にマージします。直前の add_to_cart などで残った商品データが purchase のpushに混入し、意図しないデータが送られることがあります。対策は、purchaseのpush直前に { ecommerce: null } をpushしてオブジェクトをリセットすることです。
  2. トリガーのタイミングとdataLayerの投入タイミングのずれ。 GA4イベントタグのトリガーが「DOM Ready」で発火する設定なのに、カートプラットフォームがdataLayerにトランザクション情報をpushするのがその直後だと、タグは空の ecommerce オブジェクトで発火します。GTMプレビューモードで、purchase のdataLayer pushがタグ発火より に来ているかを確認してください。
  3. 変数タイプの設定ミス。 GTMにはecommerceフィールド用の組み込み「データレイヤー変数」(例:ecommerce.transaction_id)があります。これをカスタムJavaScript変数で代用したりハードコードしたりすると、カート側のフォーマット変更時にマッピングが壊れることがあります。

簡易テスト: GTMプレビューモードでテスト購入を行い、purchase イベントの Variables タブを確認します。transaction_idvaluecurrencyitems のすべてが値を持っていれば正常です。いずれかが undefined なら、dataLayerへのpushが欠けているか、タグより後に実行されています。GTM全般のトラブルシューティングは GTMのタグが計測されない原因と対処 も参照してください。

決済代行のリダイレクトとpurchaseイベントの欠落

チェックアウト時に外部の決済代行サービス(PayPal・Stripe Checkout・Klarnaなど)にリダイレクトし、サンクスページに戻ってくるフローでは、purchase イベントが発火しない・データが欠けるリスクが高くなります。

  • 戻り時のセッション切れ。 リダイレクトにより新しいナビゲーションが発生し、ブラウザが戻り先を新セッションとして扱うことがあります(Safari ITPや広告ブロッカーで顕著)。この場合、サンクスページにカート情報が渡らず、itemsvalue が空になります。Safari固有のデータ消失については Safari ITPとコンバージョン欠損 で詳しく扱っています。
  • アトリビューションの上書き。 purchase が発火しても、GA4が決済ドメインを「参照元」として記録し、本来の流入元が上書きされることがあります。GA4のデータストリーム設定で決済ドメインを クロスドメインリンクリスト に追加し、セッションを維持してください。設定方法は クロスドメイントラッキングが壊れる原因 を参照してください。
  • サーバーサイドでの代替送信。 決済代行がサーバーサイドWebhook(例:Stripeの checkout.session.completed)を確実に送る場合、クライアントサイドのスクリプトに頼らず、GA4 Measurement Protocolを使ってサーバー側で purchase イベントを送信する方法もあります。リダイレクト問題を根本から回避できます。サーバーサイドの検証方法は サーバーサイドGTMの検証 を参照してください。

eコマースイベントの順序も重要

GA4のeコマースイベントはファネル構造を持ちます:view_itemadd_to_cartbegin_checkoutpurchasepurchase は単独でも発火できますが、上流のイベントの不備が、最終的にpurchaseのデータに波及することがあります。

  • add_to_cart がdataLayerの ecommerce.items を正しく構成していない場合、同じ不正な items 配列が purchase まで引き継がれる可能性があります。
  • カートプラットフォームによっては、ファネルの各ステップで items 配列を段階的に構築します。begin_checkout がスキップされたりエラーで発火した場合、purchase に渡される配列が不完全になることがあります。
  • purchase だけでなくファネル全体を確認することで、スキーマの誤りを早期に発見でき、デバッグが速くなります。

送られているかを確認する4つの方法

purchase イベントとその中身が正しく送られているかは、次の順で確認できます。

  1. GA4のDebugView:デバッグモードを有効にして実際に購入(またはテスト購入)を行い、「管理 → DebugView」で purchase イベントが流れてくるか、valuecurrencyitems が入っているかを見ます。itemsを展開して中身まで確認するのがポイントです。
  2. 開発者ツールのNetwork:ブラウザの開発者ツールで collect をフィルタし、サンクスページ表示時に …/g/collect へのリクエストが飛ぶかを確認。中身で en=purchasetransaction_idvaluecurrencyitems の各パラメータを見ます。
  3. GA4の収益化レポート:「レポート → 収益化 → eコマース購入数」で、商品ごとの数量・売上が積み上がっているかを確認します(標準レポートは反映に時間差があります)。
  4. transaction_idで重複を確認:同じ注文が2回数えられていないか、探索レポートなどで transaction_id 単位の重複がないかを見ます。

GA4のタグそのものが発火しているかの確認手順は、GA4のタグが正しく動いているか確認する方法 を先に読むと切り分けが早くなります。

手元の確認だけでは分からないこと

DebugViewや開発者ツールはとても有効ですが、自分の手元で1回テスト購入して確認するやり方には、構造的な限界が2つあります。

  1. 自分の環境=本番のユーザー環境ではない。 ログイン状態・拡張機能・社内IP除外・広告ブロッカーなどの影響で、手元では purchase が正しく飛んでいても、実際の購入者の条件では欠けていることがあります。とくに決済代行やリダイレクトを挟むフローでは、サンクスページに戻る前にセッションが切れて items が空になる、といった事故が起きがちです。
  2. 広告クリックがからむ売上は確認が難しい。 「広告経由の購入が本当に売上として記録されるか」をきちんと見ようとすると、本来はライブ広告をクリックして経路を再現する必要があり、これは自己クリックとして 広告ポリシー違反のリスク を伴います。

「DebugViewで見えたからOK」と判断すると、本番の購入者がたどる実際の決済フローで、valueitems が欠けている問題を見逃しがちです。発火のさらに先、記録されるかまでを見る考え方は 発火しているのに記録されない理由 で詳しく扱っています。

確認のためのチェックリスト

  • サンクスページ(購入完了ページ)で purchase イベントが発火しているか
  • value数値 で入っているか(文字列になっていないか)
  • currencyISO 4217コードJPYUSD 等)で入っているか
  • items 配列が空でなく、各商品に item_iditem_name があるか
  • transaction_id が注文ごとに一意で入っているか(重複計上の防止)
  • 税・送料を value に含めるかどうかがカート側と揃っているか
  • 同じ注文が二重に計上されていないか(transaction_id 単位で確認)
  • 本番の実ユーザー条件でも欠けていないか(手元の1回だけで判断しない)

よくある質問(FAQ)

Q. 購入数は出るのに売上(value)が0なのはなぜ? A. value が未設定、文字列で送られている、または currency が欠落・非ISOで集計できていない、が典型です。開発者ツールのNetworkで …/g/collectvaluecurrency の中身を確認してください。

Q. 商品(items)だけが記録されないのはなぜ? A. items 配列が空、あるいは各商品が item_iditem_name を持っていない可能性が高いです。旧UAの idname のまま送っていないかも合わせて確認します。

Q. 同じ購入が二重に計上されるのは? A. transaction_id が欠けている、または再読み込みのたびに違う値になっているのが典型です。注文番号など一意で不変の値を入れれば、GA4が重複を排除します。詳しくは重複計測の記事を参照してください。

Q. valueに税や送料は含めるべき? A. GA4として「必ずこう」という決まりはありませんが、カート側の売上定義とGA4側のvalueを一致させることが最重要です。方針がずれると金額のズレとして必ず表面化します。

Q. DebugViewでpurchaseが見えれば安心? A. それは「送信された」ところまでの確認です。標準の収益化レポートに正しく積み上がるか、そして本番の購入者の実際の決済フローでも欠けていないか、までを見て初めて安心できます。

まとめ:発火の確認で止めず、中身と本番の記録まで見る

GA4のeコマース購入計測は、purchase イベントの transaction_idvaluecurrencyitems がそろって初めて正しく動きます。DebugViewや開発者ツールで「送れている」ことは確認できますが、大事なのはその先——本番の購入者がたどる実際の決済フローでも、金額と商品が欠けずに記録されるかです。

ConversionOKは、外部の独立した実ブラウザであなたの本番ページにアクセスし、実際に送信される購入イベント(valuecurrencyitems を含む)を傍受して検証します。自分の広告をクリックする必要も、社内環境の影響を受けることもありません。まずは無料の静的チェックで、eコマース計測の入口を確認してみてください。