analytics-integration について
analytics-integrationは、Shopify、WooCommerce、BigCommerce、独自ストアにGA4、Meta Pixel、Google Tag Managerを設定するためのスキルです。共通イベントデータレイヤー、サーバーサイド計測、ブラウザーとサーバー間のイベント重複排除を扱います。
主な機能
- 01GA4のコマースイベント設定
- 02Meta PixelとConversions APIの設定
- 03共通イベントデータレイヤーの設計
- 04サーバーサイドタグの導入
- 05コンバージョンの検証と重複排除
活用シーン
- 01商品・チェックアウトイベントの計測追加
- 02広告コンバージョンのアトリビューション改善
- 03サーバーサイドタグへの移行
- 04コンバージョンの欠落や重複の調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ finsilabs/ awesome-ecommerce-skills --skill analytics-integrationインストール後、Claude Code で/analytics-integrationを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
tile.jsonevals/data-layer-schema-and-e-commerce-events/criteria.jsontask.mdevals/meta-pixel-conversions-api-deduplication/criteria.jsontask.mdevals/spa-page-tracking-and-purchase-deduplica/criteria.jsontask.md詳細
アナリティクス連携
概要
Google Analytics 4(GA4)、Meta Pixel、Google Tag Manager(GTM)を使用して、eコマース向けの堅牢なアナリティクススタックを実装します。商品やチェックアウトのイベントに対応した構造化データレイヤーの設計、データ精度の向上とブラウザーの制限の回避を目的としたGTMサーバーコンテナによるサーバーサイドタグ設定、信頼性の高い広告アトリビューションを実現するMeta Conversions APIを扱います。
このスキルを使用するタイミング
- 新規または既存のストアにGA4のeコマーストラッキング(商品閲覧、カートへの追加、チェックアウトの各ステップ、購入)を追加するとき
- 広告アトリビューションを改善するため、Meta PixelとConversions APIを併用したデュアルモードのイベント配信を実装するとき
- データ管理とCookieの有効期間を改善するため、GTMウェブコンテナをサーバーサイドコンテナに移行するとき
- 広告ブロッカーやクライアントサイドの障害によってコンバージョンイベントが欠落または重複する問題をトラブルシューティングするとき
- ブラウザーイベントとサーバーイベント間のサーバーサイド重複排除を求めるプライバシー要件に対応するとき
基本的な手順
ステップ1:プラットフォームと推奨される方法を決定する
| プラットフォーム | 推奨されるアナリティクスの設定 | 主な操作 |
|---|---|---|
| Shopify | 組み込みのGA4連携+GTMアプリ | Online Store → Preferences → Google AnalyticsでGA4を接続します。Meta PixelにはGTM4WPまたは公式のGoogle & YouTubeチャネルアプリをインストールします |
| WooCommerce | GA4用MonsterInsightsプラグイン+GTM | GA4用にMonsterInsights(無料プランまたは年額99ドルからのPro)をインストールします。拡張eコマースイベント用にWooCommerce Google Analytics Integration(無料)をインストールします |
| BigCommerce | ネイティブGA4連携+チャネルマネージャー | Advanced Settings → Data Solutions → Google AnalyticsでGA4を接続します。チャネルマネージャーのBigCommerce's Meta Pixel integrationを使用します |
| カスタム/ヘッドレス | GTMコンテナ+サーバーサイドコンテナ+カスタムデータレイヤー | 標準データレイヤーを実装し、Cloud RunまたはVercelにGTMサーバーコンテナをデプロイして、バックエンドからMeta Conversions APIを追加します |
ステップ2:プラットフォーム別のアナリティクス設定
Shopify
GA4を接続する(組み込み機能のため、コードは不要です):
- Online Store → Preferences → Google Analyticsに移動します
- Connect your Google accountをクリックして、GA4プロパティを選択します
- Shopifyは標準のeコマースイベント(
page_view、view_item、add_to_cart、begin_checkout、purchase)をすべて自動的に送信します - Google Analytics → Configure → Eventsで、
purchaseイベントをコンバージョンとしてマークします
GA4の探索機能でチェックアウトファネルをトラッキングする:
- GA4でExplore → Funnel explorationに移動します
- 次のファネルステップを作成します:
- ステップ1:
begin_checkoutイベント - ステップ2:
add_shipping_infoイベント - ステップ3:
add_payment_infoイベント - ステップ4:
purchaseイベント
- ステップ1:
- これにより、チェックアウトのどの段階で購入者が離脱しているかを正確に確認できます
Meta Pixelを追加する:
- Shopify App Storeに移動して、Metaチャネルアプリ(無料)をインストールします
- 設定ウィザードに従って、Facebookビジネスアカウントを接続します
- MetaはShopify連携を通じて、サーバーサイドの重複排除に対応するConversions APIを含むピクセルイベントを自動的に送信します
WooCommerce
GA4 用に MonsterInsights をインストールする:
- wordpress.org から MonsterInsights をインストールします(無料プランあり。年額 99 ドルからの Pro では拡張 e コマース機能が追加されます)
- Insights → Settings → General に移動し、GA4 プロパティを接続します
- MonsterInsights の設定で Enhanced eCommerce Tracking を有効にします。商品単位のデータとともに、
add_to_cart、begin_checkout、purchaseイベントが GA4 に送信されます
Meta Pixel を追加する:
- wordpress.org から PixelYourSite をインストールします(無料プランあり。Pro は年額 69 ドルから)
- Pixel ID を入力し、Facebook の Business Integration を通じて接続します
- PixelYourSite には、
ViewContent、AddToCart、InitiateCheckout、Purchaseイベントに対応する WooCommerce 拡張機能が含まれています
イベントが発火していることを確認する:
- Chrome 拡張機能の Meta Pixel Helper をインストールします
- 商品ページとチェックアウトページにアクセスします。拡張機能に、各ページで発火したイベントが表示されます
- GA4 で Admin → DebugView を使用して、イベントがリアルタイムで届いていることを確認します
BigCommerce
GA4 を接続する(組み込み機能):
- Advanced Settings → Data Solutions → Google Analytics に移動します
- GA4 Measurement ID を入力します(形式:
G-XXXXXXXX) - BigCommerce は、注文データ全体を含む
purchaseなどの e コマースイベントを自動的に発火します
Meta Pixel を追加する:
- Channel Manager → Marketplace → Meta に移動します
- Facebook Business アカウントを接続します
- BigCommerce は Pixel イベントをネイティブに送信し、サーバー側の重複排除に Conversions API をサポートします
カスタム/ヘッドレス
まず、標準データレイヤーを設計します — どのベンダーが利用する場合でも、すべてのイベントで同じ形式を使用します:
// dataLayer must be initialized in <head> before GTM loads
window.dataLayer = window.dataLayer || [];
// Always clear ecommerce before pushing a new event (prevents GTM from merging stale items)
window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
event: 'add_to_cart',
ecommerce: {
currency: 'USD',
value: product.price * quantity,
items: [{
item_id: product.sku,
item_name: product.name,
item_brand: product.brand,
item_category: product.category,
price: product.price,
quantity,
}],
},
});
購入イベント(注文の確定後に発火させ、サーバーで生成した注文 ID を transaction_id として使用します):
window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
event: 'purchase',
ecommerce: {
transaction_id: order.id, // Must be unique — deduplicate browser + server events
value: order.total,
tax: order.tax,
shipping: order.shippingCost,
currency: order.currency,
coupon: order.couponCode || '',
items: order.lineItems.map(line => ({
item_id: line.sku,
item_name: line.name,
price: line.unitPrice,
quantity: line.qty,
})),
},
});
Conversions API による重複排除を備えた Meta Pixel — 共通の event_id を使用して、ブラウザーとサーバーの両方から同じイベントを送信します:
// Browser — pass event_id for deduplication
const eventId = `purchase_${order.id}`;
fbq('track', 'Purchase', {
value: order.total,
currency: order.currency,
content_ids: order.lineItems.map(l => l.sku),
content_type: 'product',
}, { eventID: eventId });
// Send eventId to server for the Conversions API mirror
await fetch('/api/analytics/meta-purchase', {
method: 'POST',
body: JSON.stringify({ orderId: order.id, eventId }),
});
// Server-side Conversions API (Node.js)
import { ServerEvent, EventRequest, UserData, CustomData } from 'facebook-nodejs-business-sdk';
export async function sendMetaPurchase(order, eventId, userAgent, ipAddress) {
const userData = new UserData()
.setEmail(order.customerEmail) // Automatically hashed by SDK
.setClientIpAddress(ipAddress)
.setClientUserAgent(userAgent);
const customData = new CustomData()
.setValue(order.total)
.setCurrency(order.currency)
.setContentIds(order.lineItems.map(l => l.sku));
const serverEvent = new ServerEvent()
.setEventName('Purchase')
.setEventTime(Math.floor(Date.now() / 1000))
.setUserData(userData)
.setCustomData(customData)
.setEventId(eventId) // Matches browser eventID — Meta deduplicates automatically
.setActionSource('website');
await new EventRequest(process.env.META_ACCESS_TOKEN, process.env.META_PIXEL_ID)
.setEvents([serverEvent])
.execute();
}
Google Consent Mode v2 を初期化する(2024 年 3 月以降、EU のトラフィックでは必須です):
// Must run BEFORE GTM or gtag.js loads
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('consent', 'default', {
ad_storage: 'denied',
ad_user_data: 'denied',
ad_personalization: 'denied',
analytics_storage: 'denied',
wait_for_update: 500, // Wait for CMP to update consent
});
// After user accepts cookies via your CMP:
gtag('consent', 'update', {
ad_storage: preferences.marketing ? 'granted' : 'denied',
ad_user_data: preferences.marketing ? 'granted' : 'denied',
analytics_storage: preferences.analytics ? 'granted' : 'denied',
});
デプロイ前にイベントを検証します:
# GA4 Measurement Protocol validation (returns hit validation report)
curl -X POST \
"https://www.google-analytics.com/debug/mp/collect?measurement_id=G-XXXXXXXX&api_secret=YOUR_SECRET" \
-H "Content-Type: application/json" \
-d '{"client_id":"test-123","events":[{"name":"purchase","params":{"transaction_id":"T-001","value":59.99,"currency":"USD"}}]}'
ベストプラクティス
- 各 e コマースイベントを送信する前に
ecommerce: nullを設定します — GTM はデータレイヤーのオブジェクトをマージするため、前のイベントの古い item 配列が次のイベントに混入します - サーバーで生成した注文 ID を
transaction_idとして使用します — クライアント側では生成しないでください。ブラウザーとサーバーの両方でイベントが発火した場合に、重複排除が機能します - 支払い後の Webhook から Conversions API イベントを送信します — Webhook による配信は、チェックアウト中にクライアントが fetch 呼び出しを完了するよりも信頼性が高いです
- べき等性チェックで
purchaseイベントの発火を制御します — 発火済みのtransaction_id値を sessionStorage に保存し、確認ページが再読み込みされた場合は再発火をスキップします - ステージングには GTM 環境を使用します — QA トラフィックが本番レポートに混入しないよう、ステージング環境で GTM の変更をテストします
よくある問題
| 問題 | 解決策 |
|---|---|
| GA4 で購入イベントが重複する | プッシュする前に sessionStorage.getItem('purchase_fired_' + order.id) を確認し、プッシュが発火した後に値を設定します |
| GTM で items 配列が空になる | イベントの前に { ecommerce: null } をプッシュし忘れています。GTM は前の items 配列をキャッシュします |
| Meta Pixel と Conversions API の両方でコンバージョンがカウントされる | 一致する eventID(ブラウザー)と event_id(サーバー)を渡します。Meta はこのフィールドで重複を排除します |
| Shopify の GA4 ファネルにデータが表示されない | Online Store → Preferences の GA4 Measurement ID がプロパティと一致することを確認します。GA4 DebugView でイベントが発火していることを確認します |
| MonsterInsights が WooCommerce の注文をトラッキングしない | Pro ライセンスが有効であることを確認します(Enhanced eCommerce には Pro が必要です)。インストール後にキャッシュプラグインをクリアします |
関連スキル
- @webhook-architecture
- @erp-integration
- @email-service-integration
- @gdpr-ecommerce