アナリティクストラッキング: プライバシー重視のイベント収集
この記事では、プライバシーを尊重し、ボットトラフィックを回避しながら、ユーザーの行動をどのように追跡するかを説明します。
問題: ユーザー行動の理解
以下の情報を知る必要があります:
-
ユーザーがどのページを訪問したか
-
どの商品を閲覧したか
-
トラフィックの流入元(Google広告、オーガニック検索、ソーシャルメディア)
-
どのキャンペーンがコンバージョンに貢献したか
しかし、以下は避けなければなりません:
-
ボットやクローラーの追跡
-
個人を特定できる情報(PII)の保存
-
プライバシー規制への違反
解決策: クライアントサイド + サーバーサイドトラッキング
クライアントサイド: JavaScriptトラッキング
ビジターID: クッキーに保存されるランダムID(365日間)
セッションID: sessionStorageに保存されるランダムID(ブラウザ終了まで)
キャンペーンパラメータ: URLから抽出され、sessionStorageに保存
追跡されるパラメータ:
-
gclid- GoogleクリックID(検索広告) -
gbraid- Google広告クリックID(ショッピング広告) -
wbraid- Google広告クリックID(iOS) -
fbclid- FacebookクリックID -
srsltid- Googleオーガニック検索結果ID -
utm_source,utm_medium,utm_campaign,utm_term,utm_content
ストレージ: WhatsApp/電話クリックのアトリビューションのため、パラメータはクッキーに保存(30分間)
サーバーサイド: データの拡充
サーバーは以下の情報でイベントを拡充します:
GeoIPデータ: IPアドレスから取得した国、地域、都市
ユーザーエージェントの解析: ブラウザ、OS、デバイスタイプ
タイムスタンプ: サーバー時間(UTC)
ボット検出: 既知のボットユーザーエージェントをフィルタリング
イベントタイプ
ページビュー: ユーザーがページを訪問
商品ビュー: ユーザーが商品ページを閲覧
カート追加: ユーザーが商品をカートに追加
チェックアウト: ユーザーがチェックアウトを開始
購入: ユーザーが購入を完了
WhatsAppクリック: ユーザーがWhatsAppボタンをクリック
電話クリック: ユーザーが電話番号をクリック
データフロー
sequenceDiagram
participant User
participant JS as JavaScript
participant API as /api/analytics
participant Firehose as Kinesis Firehose
participant S3
User->>JS: ページ訪問
JS->>JS: URLパラメータを抽出
(gclid, utm_* など)
JS->>JS: sessionStorageに保存
JS->>API: POSTイベント + パラメータ
API->>API: GeoIPで拡充
API->>API: ユーザーエージェントを解析
API->>API: ボットをフィルタリング
API->>Firehose: 拡充されたイベントを送信
Firehose->>S3: アナリティクスバケットに保存ボット検出
複数のシグナルを使用してボットトラフィックをフィルタリングします:
ユーザーエージェントのパターン: 既知のボット文字列(Googlebot、Bingbotなど)
行動パターン: 速すぎる、リクエストが多すぎる
JavaScriptの欠如: ボットはしばしばJSを実行しない
除外クッキー: tv_exclude=true はすべてのトラッキングを停止
プライバシー保護
PIIなし: 名前、メールアドレス、電話番号は決して保存しない
データ保持期間: イベントは30日後に削除
条件付きピクセル読み込み
関連する場合にのみトラッキングピクセルを読み込みます:
Google広告ピクセル: gclid、gbraid、またはwbraid, srsltidが存在する場合のみ
LinkedInピクセル: li_fat_idが存在する場合のみ
利点: ページ読み込みの高速化、トラッキングのオーバーヘッド軽減
トラフィックソース検出
URLパラメータからトラフィックソースを検出します:
Google広告: gclid, gbraid, wbraid → utm_source=google_ads
Googleオーガニック検索: srsltid → utm_source=google_search
コンバージョントラッキング
ファネルを通じてコンバージョンを追跡します:
商品ビュー → カート追加 → チェックアウト → 購入
各ステップには以下が含まれます:
-
ビジターID(アトリビューション用)
-
セッションID(セッション分析用)
-
キャンペーンパラメータ(ROI計算用)
-
商品SKU(商品分析用)
リードタッチトラッキング
ユーザーが(WhatsApp、電話、メールで)問い合わせた際に、以下をキャプチャします:
連絡方法: WhatsApp、電話、メール
キャンペーンパラメータ: クッキーから(30分のウィンドウ)
商品コンテキスト: どの商品ページにいたか
利点: オフラインのコンバージョンをオンラインキャンペーンに帰属
ストレージ
イベントはKinesis Firehose経由でS3に保存されます:
フォーマット: JSON lines(1行に1イベント)
パーティショニング: 日付別(年/月/日/時)
圧縮: Gzip
保持期間: 30日
クエリ
イベントはAWS Athena経由でクエリされます:
スキーマ: Glue Data Catalogで定義
クエリ: S3データに対するSQL
ユースケース: キャンペーンROI、商品人気度、トラフィックソース
参考文献
技術的概念
-
Web analytics - Wikipedia
-
Privacy by design - Wikipedia
AWSサービス
-
Kinesis Firehose - AWSドキュメント
-
Athena - AWSドキュメント
関連記事
- Multi-Server Architecture - アナリティクスが実行される場所
まとめ
当社のアナリティクスシステムは、プライバシーを尊重しながらユーザー行動を追跡します:
クライアントサイド:
-
✅ URLからキャンペーンパラメータを抽出
-
✅ sessionStorageに保存(セッションスコープ)
-
✅ クッキーに保存(アトリビューションのため30分間)
-
✅ イベントをAPIに送信
サーバーサイド:
-
✅ GeoIPとユーザーエージェントで拡充
-
✅ ボットトラフィックをフィルタリング
-
✅ Kinesis Firehoseに送信
-
✅ S3に保存(日付別にパーティショニング)
プライバシー:
-
✅ PIIを保存しない
-
✅ 30日間の保持期間
条件付き読み込み:
-
✅ gclidが存在する場合のみGoogle広告ピクセルを読み込み
-
✅ li_fat_idが存在する場合のみLinkedInピクセルを読み込み
このアプローチは、洞察、プライバシー、パフォーマンスのバランスを取ります。