Google Analyticsのeコマース計測は注文完了時にtransactionとitemを送る
公開日: 執筆:佐藤
Google Analyticsのeコマース計測では、注文が成立したときに、注文全体を表すtransactionと、購入商品を表すitemをga.jsから送ります。_addTrans()で注文を作り、商品ごとに_addItem()を加え、最後に_trackTrans()で送信します。
固定のJavaScriptを注文完了ページへ置くだけでは足りません。注文番号、合計金額、税、送料、SKU、単価、数量を、注文システムの確定値から出力する必要があります。Google Analyticsの設定と、注文データを正しく渡す実装は別の作業です。
目標は完了件数を数えeコマースは注文内容を送る
問い合わせ完了ページをGoalへ設定すれば、完了した訪問数を数えられます。eコマース計測は、完了したかどうかだけでなく、注文番号、売上、税、送料、商品、SKU、単価、数量を送ります。
| 計測方法 | 主に送る内容 | 向いている判断 |
|---|---|---|
| URL destinationのGoal | 完了した訪問と設定した目標値 | 問い合わせや資料請求の件数 |
| Event Tracking | クリックや操作の分類と値 | PDF、外部リンク、画面内操作 |
| Ecommerce Tracking | transactionとitem | 売上、注文、商品別の成果 |
注文完了ページをGoalにしたうえで、同じ注文をeコマースでも送ることはできます。ただし、Goalの目標値とeコマースの売上を同じ金額として合算しません。完了件数を見るのか、実際の注文金額と商品を見るのかを分けます。
transactionとitemは同じ注文番号で結ぶ
ga.jsのeコマースAPIリファレンスは、_addTrans()、_addItem()、_trackTrans()の三つを定義しています。
_addTrans()は、注文全体を表すtransactionを作ります。
| 値 | 役割 | 実装時の確認 |
|---|---|---|
transactionId |
注文を識別する番号 | 注文システムの注文番号と対応するか |
affiliation |
店舗名や販売区分 | 複数店舗を分ける必要があるか |
total |
注文の商品合計 | 税と送料を含めず渡しているか |
tax |
税額 | 注文システムの確定額か |
shipping |
送料 | 無料の場合も値の扱いを決めたか |
city、state、country |
地域 | 必要な集計範囲だけを渡すか |
_addItem()は、一つの商品をtransactionへ加えます。transactionIdは親のtransactionと同じ値にし、sku、商品名、カテゴリ、単価、数量を渡します。一つの注文に三商品があれば、_addItem()を三回呼びます。
SKUは商品を識別するキーです。異なる商品へ同じSKUを使うと、商品別の集計を分けられません。商品名が似ていても、在庫や価格を別に管理する商品なら、注文システム側で一意のSKUを持たせます。
三つの命令は注文確定値から順番に作る
仮に、注文システムが次の値を確定したとします。
注文番号: ORD-10025
商品合計: 12000
税: 600
送料: 500
商品: SKU-Aを2点、SKU-Bを1点
注文完了ページでは、概ね次の順でJavaScriptを出力します。
_gaq.push(['_addTrans',
order.id,
'online-store',
order.productTotal,
order.tax,
order.shipping,
order.city,
order.state,
order.country
]);
for (var i = 0; i < order.items.length; i++) {
var item = order.items[i];
_gaq.push(['_addItem',
order.id,
item.sku,
item.name,
item.category,
item.unitPrice,
item.quantity
]);
}
_gaq.push(['_trackTrans']);
このコードは構造を示す仮例です。orderはブラウザが自動で作る値ではありません。注文システムが保持する注文と商品を読み、HTMLへ安全に出力する処理が必要です。
_addTrans()と_addItem()は送信待ちの情報を作り、_trackTrans()がtransactionとitemをGoogle Analyticsへ送ります。_trackTrans()を先に呼べば、後から追加した商品はその送信に含まれません。順番を固定します。
金額計算は注文システムを正とする
_addItem()は、単価と数量から注文合計を計算する機能ではありません。APIリファレンスも、追加の数量計算をしないと説明しています。商品合計、税、送料、各商品の単価と数量は、注文システムで計算してから渡します。
Google Analyticsへ送る合計金額を、画面に表示された文字列からJavaScriptで再計算しません。割引、端数処理、税率、送料条件があると、注文記録とのずれが生じます。会計や受注管理の正本は注文システムに置き、Google Analyticsは集客経路と注文を分析するために使います。
同じ注文内で同じSKUを複数回追加すると、APIの一時的な商品情報は最初の値が後の値に置き換わります。同じ商品は数量へまとめ、SKUごとに一行として送ります。注文番号も、再利用しない一意の値を使います。
注文完了以外ではtransactionを送らない
カート表示、入力画面、確認画面では、まだ注文が成立していません。_trackTrans()は、購入が成立したことを送る命令です。購入ボタンを押した瞬間ではなく、注文システムが注文を受け付け、注文番号と金額を確定した後に実行します。
注文完了ページを再表示した場合や、ブラウザの戻る操作をした場合も確認します。transaction IDは注文と商品を結ぶキーですが、あらゆる再送信を防ぐ仕組みとしては扱いません。注文システム側で、どの状態を一件の成立注文として出力するかを決めます。
第三者のショッピングカートや決済後ページへ移動する構成では、注文完了ページのHTMLと注文データを変更できるかを先に確認します。Google Analytics公式のeコマースQ&Aも、第三者サイトで発生するGoalとeコマース計測を設定課題として扱っています。外部サービスにコードを置けないなら、自社サイトの設定だけでは同じ方法を実装できません。
テスト注文は注文記録と一項目ずつ照合する
公開前に、商品数と金額の異なるテスト注文を用意します。一件だけ成功させるのではなく、次の対応を確認します。
- 注文番号と
transactionIdが同じである。 - 商品合計、税、送料が注文記録と同じである。
- 商品数と
_addItem()の回数が同じである。 - 各商品のSKU、単価、数量が同じである。
- 注文未完了、決済失敗、確認画面では
_trackTrans()が動かない。
値が違う場合は、Google Analyticsのレポートだけを直そうとせず、注文データからJavaScriptへ値を渡す対応表を調べます。実装を制作会社へ依頼しても、注文項目の定義、テスト注文、照合結果、Google Analyticsアカウントは事業者側で確認できるようにします。
関連記事

