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=organic
、source=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
vse-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. よくある“崩れポイント”と対処
- Direct が妙に多い
- UTM未設定、LPへの中間リダイレクト、クロスドメイン未設定が原因。
- 望ましくない参照に決済ドメイン等を登録+クロスドメインでセッション維持。
- Paid Social が Organic Social に紛れる
utm_medium
がsocial
になっている。有料はpaid_social
に統一。
- メール流入がReferralになる
- クライアントが画像プロキシ/リンク置換を使う場合あり。URLエンコードと最終到達URLにUTMを確実に付与。
- gclid と UTM の二重表記
- 自動タグと手動UTMが競合する場合あり。一貫した運用基準を決め、レポートの軸を固定。
9. 運用チェックリスト(毎週5分)
- Direct比率が30%超なら原因追跡(UTM/リファラー/クロスドメイン)。
Unclassified
が5%超なら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 / Medium
:CONCAT(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を既定チャネルに合わせる—ここから始めてください。