GA4「参照元/メディア」を完全理解:定義・運用ルール・可視化テンプレ(Looker Studio & BigQuery付き)

Google Analytics4

GA4で集客評価を正しく行うには、「参照元(source)/メディア(medium)」の整備が最優先です。ここが曖昧だと、チャネル別のCVRもLTVも意思決定もすべてブレます。本記事は、上位記事の構成を踏まえつつ、定義の誤解をゼロにする解説UTM命名のテンプレLooker Studio(旧Data Studio)の可視化テンプレBigQueryの集計SQLまでそのままコピペで使えるレベルでまとめました。既存記事を“追い越す深さ”と“現場即応の再現性”に振り切っています。

1. 用語とスコープの正しい理解(ここを外すと全部ズレます)

GA4には同じ「参照元/メディア」でもスコープが違う指標が複数あります。使い分けは以下が原則。

目的使うディメンションスコープ概要
新規ユーザーの獲得源を知るfirst_user_source / first_user_mediumユーザースコープ初回接点(初訪)の参照元/メディア
セッションの獲得源を知るsession_source / session_mediumセッションスコープセッション開始時点の参照元/メディア
イベント貢献の実績を見たいsource / mediumイベントスコープレポートのアトリビューション設定に準拠

実務では、集客レポート=セッションスコープ初回獲得分析=ユーザースコープ成果・収益の貢献分析=イベントスコープが基本です。


2. GA4に入る値の決まり方(標準ロジック)

  • UTMが最優先utm_source / utm_medium / utm_campaign があればそれが採用。
  • 自動タグ:Google 広告連携(gclid など)時は連携ロジックが優先。
  • 自然流入:検索エンジン判定で medium=organicsource=google 等に自動分類。
  • 直接流入(direct/none):リファラーもUTMも無い場合に発生。過多はアラート

支払いゲートウェイや自社サブドメインがリファラーになる問題は、GA4の「望ましくない参照のリスト」「クロスドメイン」設定で抑止しましょう。


3. 失敗しないUTM命名テンプレ(コピーOK)

目的:GA4の既定チャネルグループに正しくマッピングされ、分析軸がブレないこと。

3.1 推奨命名ルール(最小セット)

  • utm_source:媒体名(例:google / yahoo / facebook / instagram / x / line / rakuten)
  • utm_medium以下テンプレのいずれか
    • 検索広告:cpc(または paidsearch
    • ディスプレイ:display / cpm
    • 有料SNS:paid_social
    • オーガニックSNS:social
    • メール:email
    • アフィリエイト:affiliate / affiliates
    • 参照:referral
    • 動画広告:video
    • SMS/プッシュ:sms / push
  • utm_campaign:キャンペーン名(半角英数+-/_推奨、日付はYYYYMM
  • utm_content:クリエイティブ差(例:imgA_300x250
  • utm_term:検索語やプロモコードなど任意

3.2 “媒体別” UTMテンプレ(そのまま使える)

Google 広告(検索)

utm_source=google&utm_medium=cpc&utm_campaign={{campaignid}}_{{campaignname}}&utm_content={{adgroupid}}_{{creative}}

Meta 広告(Instagram/Facebook)

utm_source=facebook&utm_medium=paid_social&utm_campaign={{campaign.name}}&utm_content={{adset.name}}_{{ad.name}}

X(旧Twitter)広告

utm_source=twitter&utm_medium=paid_social&utm_campaign={{campaign.name}}&utm_content={{line_item}}_{{creative_id}}

オーガニックSNS投稿(手貼り)

utm_source=instagram&utm_medium=social&utm_campaign=post_YYYYMM

メール

utm_source=mailmag&utm_medium=email&utm_campaign=mm_YYYYMM&utm_content=templateA

オフラインQR(店頭/チラシ)

utm_source=qr_store&utm_medium=qr&utm_campaign=flyer_YYYYMM

迷うときは、mediumが既定チャネルに素直に入るかを最優先で決めるのがコツ。


4. 既定チャネルグループに合わせる“正規化”マップ

UTMがバラついても、可視化前に正規化すれば崩れません。Looker Studioの計算フィールド用テンプレです。

4.1 チャネル正規化(CASEテンプレ)

CASE
  WHEN REGEXP_MATCH(Lower(Medium), '^(cpc|ppc|paidsearch)$') THEN 'Paid Search'
  WHEN REGEXP_MATCH(Lower(Medium), '^(paid_social|social_paid|ps)$') THEN 'Paid Social'
  WHEN REGEXP_MATCH(Lower(Medium), '^(social|social-network|social-media|sm)$') THEN 'Organic Social'
  WHEN REGEXP_MATCH(Lower(Medium), '^(display|cpm|banner)$') THEN 'Display'
  WHEN Lower(Medium) = 'email' THEN 'Email'
  WHEN Lower(Medium) IN ('affiliate','affiliates') THEN 'Affiliates'
  WHEN Lower(Medium) = 'referral' THEN 'Referral'
  WHEN Lower(Medium) = 'video' THEN 'Video'
  WHEN Lower(Medium) = 'sms' THEN 'SMS'
  WHEN Lower(Medium) = 'push' THEN 'Push'
  WHEN Lower(Medium) = 'organic' THEN 'Organic Search'
  WHEN (Source IS NULL OR Source = '(direct)') AND (Medium IS NULL OR Medium IN ('(not set)','(none)','')) THEN 'Direct'
  ELSE 'Unclassified'
END

4.2 source / medium 合体フィールド

CONCAT(Session source, ' / ', Session medium)

(ユーザー獲得なら First user source / First user medium に読み替え)

4.3 UTM欠損アラート

CASE
  WHEN (Medium IS NULL OR Medium IN ('(not set)','(none)','')) THEN '⚠ UTMなし/Direct化'
  ELSE 'OK'
END

5. Looker Studio ダッシュボード“完成形”テンプレ

ダッシュボードは4ページ構成が実務で回しやすいです。

P1:トラフィック獲得(セッション)

  • 期間切替、デバイス切替
  • 指標:セッション、ユーザー、直帰率、CV、CVR、売上(任意)
  • 図:時系列(セッション)、棒(正規化チャネル別セッション/CV)、表(source/medium×CVR)

P2:ユーザー獲得(初回)

  • 指標:新規ユーザー、初回CV、初回CVR
  • 図:正規化チャネル別の新規ユーザー比較
  • 表:first_user_source / medium×初回CVR

P3:キャンペーン・クリエイティブ

  • 表:campaign×CVR×CPA
  • 表:campaign×content×CVR
  • 散布図:セッション×CVR(バブル=売上)

P4:品質監視(データガバナンス)

  • 指標:Direct比率、UTM欠損率、Unclassified比率
  • 表:mediumの表記ゆれ一覧(email vs e-mail 等を可視化)

上記のフィールド名は接続コネクタにより若干異なる場合があります。Session source/medium が無ければ合体フィールドを作成してください。


6. 探索(Explore)での深堀りテンプレ

  • 自由形式:行=session_source / medium、列=デバイスカテゴリ、値=セッション CV CVR
  • ファネル探索session_source / mediumをディメンション、ステップ=view_item → add_to_cart → purchase
  • セグメントfirst_user_medium = organic(オーガニック初回群)とpaid_social(有料SNS初回群)のCVR/LTV比較

7. BigQuery集計テンプレ(コピー→実行OK)

GA4エクスポート(events_*)前提。データセット/プロジェクト名は環境に合わせて置換してください。

7.1 セッション獲得:session_source / medium 別CV

-- セッション開始イベントから session_source/medium を取得し、CVイベントをセッションに結合
WITH
  session_start AS (
    SELECT
      user_pseudo_id,
      (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS ga_session_id,
      MAX(IF(ep.key='session_source', ep.value.string_value, NULL)) AS session_source,
      MAX(IF(ep.key='session_medium', ep.value.string_value, NULL)) AS session_medium,
      MAX(IF(ep.key='session_campaign', ep.value.string_value, NULL)) AS session_campaign,
      TIMESTAMP_MICROS(event_timestamp) AS session_ts
    FROM `myproject.analytics_XXXX.events_*`,
    UNNEST(event_params) ep
    WHERE event_name = 'session_start'
    GROUP BY user_pseudo_id, ga_session_id, event_timestamp
  ),
  conv AS (
    SELECT
      user_pseudo_id,
      (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS ga_session_id,
      COUNTIF(event_name IN ('purchase','generate_lead','submit_form')) AS convs,
      SUM(IF(event_name='purchase',
             (SELECT COALESCE(value.double_value, value.int_value) FROM UNNEST(event_params) WHERE key='value'),
             0)) AS revenue
    FROM `myproject.analytics_XXXX.events_*`
    WHERE _TABLE_SUFFIX BETWEEN '20250101' AND '20251231'
    GROUP BY user_pseudo_id, ga_session_id
  )
SELECT
  COALESCE(session_source,'(direct)') AS session_source,
  COALESCE(session_medium,'(none)')  AS session_medium,
  COUNT(*) AS sessions,
  SUM(convs) AS conversions,
  SAFE_DIVIDE(SUM(convs), COUNT(*)) AS cvr,
  SUM(revenue) AS revenue
FROM session_start s
LEFT JOIN conv c
USING (user_pseudo_id, ga_session_id)
GROUP BY 1,2
ORDER BY sessions DESC;

7.2 初回獲得:first_user_source / medium 別新規ユーザー

SELECT
  COALESCE(traffic_source.source, '(direct)') AS first_user_source,
  COALESCE(traffic_source.medium, '(none)')  AS first_user_medium,
  COUNT(DISTINCT user_pseudo_id) AS new_users
FROM `myproject.analytics_XXXX.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20250101' AND '20251231'
  AND event_name = 'first_visit'
GROUP BY 1,2
ORDER BY new_users DESC;

7.3 UTM品質監視:未分類・表記ゆれ抽出

WITH sess AS (
  SELECT
    LOWER(MAX(IF(ep.key='session_medium', ep.value.string_value, NULL))) AS m
  FROM `myproject.analytics_XXXX.events_*`, UNNEST(event_params) ep
  WHERE event_name='session_start'
  GROUP BY user_pseudo_id, (SELECT value.int_value FROM UNNEST(event_params) WHERE key='ga_session_id')
)
SELECT m, COUNT(*) AS cnt
FROM sess
GROUP BY m
HAVING m IS NULL OR m IN ('(not set)','(none)','')
   OR NOT REGEXP_CONTAINS(m, r'^(cpc|ppc|paidsearch|display|cpm|banner|paid_social|social|email|affiliate|affiliates|referral|video|sms|push|organic)$')
ORDER BY cnt DESC;

8. よくある“崩れポイント”と対処

  1. Direct が妙に多い
    • UTM未設定、LPへの中間リダイレクトクロスドメイン未設定が原因。
    • 望ましくない参照に決済ドメイン等を登録+クロスドメインでセッション維持。
  2. Paid Social が Organic Social に紛れる
    • utm_mediumsocial になっている。有料は paid_social に統一
  3. メール流入がReferralになる
    • クライアントが画像プロキシ/リンク置換を使う場合あり。URLエンコード最終到達URLにUTMを確実に付与。
  4. gclid と UTM の二重表記
    • 自動タグと手動UTMが競合する場合あり。一貫した運用基準を決め、レポートの軸を固定。

9. 運用チェックリスト(毎週5分)

  • Direct比率が30%超なら原因追跡(UTM/リファラー/クロスドメイン)。
  • Unclassified5%超ならUTM正規化ルール更新。
  • first_user_*session_*CVR差が大きいキャンペーンを特定(初回誘引と刈り取りの役割分担)。
  • 主要媒体のプラットフォームレポートとの乖離を確認(クリック/コンバージョン定義差分をメモ)。

10. すぐ使える“記事内テンプレ”まとめ

10.1 UTM命名ポリシー(社内共有用)

  • 原則:source=媒体、medium=チャネル種別(既定チャネルと親和)、campaign=目的+年月
  • 禁止:全角・日本語・スペース混在
  • 例:utm_source=facebook&utm_medium=paid_social&utm_campaign=remarketing_202509&utm_content=video_15s

10.2 Looker Studio 計算フィールド

  • Normalized Channel:上記CASE式を貼付
  • Source / MediumCONCAT(Session source, ' / ', Session medium)
  • UTM Alert:上記アラートCASE

10.3 BigQuery

  • セッション集計SQL:7.1
  • 初回獲得SQL:7.2
  • UTM品質監視SQL:7.3

11. まとめ

定義(スコープ)→UTM統一→正規化→可視化→監視の順で整えると、GA4の「参照元/メディア」は壊れません。この記事のテンプレをそのまま導入すれば、チャネル別の投資判断が一段クリアになり、既存記事よりも実務に刺さるはず。迷ったら、まずはUTMのmediumを既定チャネルに合わせる—ここから始めてください。