a/ analytics note .jp

TECH · field log

GA4でサブドメイン間のユーザー行動を正確に計測する実装手順

ダッシュボードやWebアプリをサブドメインに配置する際、GA4でセッション継続を保つ設定方法とクロスドメイン追跡の課題を解決する実装例を解説します。

· 4 min read · #GA4 / #Google Analytics / #サブドメイン / #ウェブ解析 / #DNS設定 · AI-assisted · reviewed Share on X はてブ Zennにクロスポスト

データアナリストやWebサービス運営者にとって、メインサイトとダッシュボード・管理画面間のユーザー行動を正確に計測することは重要な課題です。この記事では、GA4でサブドメイン間のセッション継続を保つ実装方法と、従来のクロスドメイン追跡の課題を解決する実践的な手順を解説します。

課題:外部ドメインでのセッション分断

外部サービス(Cloud Run、Heroku等)に配置したダッシュボードやWebアプリへのリンクを設置すると、GA4で以下の問題が発生します:

主な問題

  • セッション分断: example.com から app-xyz.cloudrun.app への遷移でGA4セッションが途切れる
  • ユーザー追跡の不完全性: サイト閲覧→ダッシュボード利用の一連の行動が分析できない
  • コンバージョン計測の精度低下: ファネル分析で30-50%のデータ欠損が発生

クロスドメイン追跡の限界

従来の解決策であるクロスドメイン追跡(_glパラメータ)は以下の制約があります:

// クロスドメイン追跡の設定例
gtag('config', 'G-XXXXXXXXXX', {
  'link_domains': ['dashboard.example.com', 'app.example.com']
});

制約:

  • 広告ブロッカーによるパラメータ除去
  • URLパラメータの期限切れ(24時間)
  • プライバシー設定による制限

解決策:サブドメイン方式による自動継続

サブドメインを使用することで、GA4のCookie共有機能を活用してセッションを自動継続できます。

技術的原理

GA4は_gaCookieをルートドメイン(.example.com)に設定するため、以下のサブドメイン間で自動的にセッションが継続されます:

example.com          → dashboard.example.com  ✅ セッション継続
dashboard.example.com → api.example.com      ✅ セッション継続
blog.example.com     → app.example.com       ✅ セッション継続

実装手順

1. DNS設定

CNAMEレコードの追加

DNSプロバイダー(XServer、Cloudflare等)でサブドメインを設定:

# DNS設定例
dashboard.example.com. CNAME your-app-xyz.cloudrun.app.

Cloudflare使用時の設定

# Cloudflare CLI使用例
curl -X POST "https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records" \
  -H "Authorization: Bearer {api_token}" \
  -H "Content-Type: application/json" \
  --data '{
    "type": "CNAME",
    "name": "dashboard",
    "content": "your-app-xyz.cloudrun.app"
  }'

2. Cloud Runカスタムドメイン設定

Google Cloud Runでカスタムドメインをマッピング:

# Cloud Run ドメインマッピング
gcloud run services update your-service \
  --platform managed \
  --region asia-northeast1 \
  --add-custom-audiences dashboard.example.com

# 外部ロードバランサー経由(推奨)
gcloud compute ssl-certificates create dashboard-ssl \
  --domains dashboard.example.com

gcloud compute url-maps create dashboard-lb \
  --default-service your-backend-service

3. GA4設定の更新

メインサイト側の設定

<!-- サイトのHTMLヘッド -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  
  gtag('config', 'G-XXXXXXXXXX', {
    // サブドメイン間では自動継続されるため特別な設定不要
    'cookie_domain': '.example.com'
  });
</script>

ダッシュボード側の設定

<!-- ダッシュボードアプリのHTMLヘッド -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  
  gtag('config', 'G-XXXXXXXXXX', {
    'cookie_domain': '.example.com'
  });
  
  // ダッシュボード固有のイベント追跡
  function trackDashboardEvent(action, category) {
    gtag('event', action, {
      'event_category': category,
      'custom_parameter_1': 'dashboard'
    });
  }
  
  // 使用例
  trackDashboardEvent('dashboard_view', 'engagement');
  trackDashboardEvent('filter_applied', 'interaction');
</script>

4. サイト側リンクの更新

// Before: 外部ドメインへのリンク
const dashboardUrl = 'https://app-xyz.cloudrun.app/dashboard';

// After: サブドメインへのリンク
const dashboardUrl = 'https://dashboard.example.com/';

// リンク要素の更新
document.getElementById('dashboard-link').href = dashboardUrl;

5. GA4レポートでの確認

GA4管理画面で以下を確認:

リアルタイムレポート

  • 「ページ タイトルとスクリーンクラス」でサブドメインのページビューを確認
  • 「ホスト名」ディメンションで example.comdashboard.example.com が同一セッションで記録されることを確認

カスタムレポート設定

ディメンション: ホスト名、ページパス
指標: セッション数、ページビュー数、平均セッション継続時間
フィルタ: ホスト名 = "example.com" OR "dashboard.example.com"

方式比較とコスト

方式セッション継続精度実装複雑度月額コスト推奨度
サブドメイン95%+$0-18⭐⭐⭐
クロスドメイン追跡50-70%$0
リバースプロキシ100%変動⭐⭐

コスト詳細

無料選択肢:

  • Cloudflare DNSプロキシ経由(SSL証明書自動)
  • GCP Cloud Run直接ドメインマッピング(Previewステータス)

有料選択肢:

  • GCP External Load Balancer: $18/月
  • AWS CloudFront + Route53: $5-20/月

完了確認とテスト

1. 基本動作確認

# DNS解決確認
nslookup dashboard.example.com

# SSL証明書確認
curl -I https://dashboard.example.com

2. GA4セッション継続テスト

  1. メインサイトにアクセス
  2. GA4リアルタイムレポートで自身のセッションを確認
  3. ダッシュボードへのリンクをクリック
  4. 同一セッションIDでダッシュボードのページビューが記録されることを確認

3. イベント追跡テスト

// ブラウザ開発者ツールで実行
gtag('event', 'test_event', {
  'event_category': 'test',
  'value': 1
});

トラブルシューティング

よくある問題

セッションが継続されない場合:

  • Cookieドメイン設定を確認: 'cookie_domain': '.example.com'
  • ブラウザのサードパーティCookie設定を確認
  • HTTPSが両方のドメインで有効か確認

ダッシュボードでイベントが記録されない場合:

  • ネットワークタブでGA4リクエストの送信を確認
  • gtag関数がグローバルスコープで定義されているか確認

関連記事

F/ この記事の設計を反映しているプロダクト: FlowAgent

see →
an

analytics note — editor

AI とデータ分析の実装ログを毎週編集。設計判断と運用のつまずきを、再現できる形で残すことを大切にしています。