mcpField
U
utm-builder

utm-builder

github.com/cognyaiマーケティング・グロース11147 回インストール2 週間前に更新
リポジトリ

utm-builder について

utm-builderは、UTMリンクの作成や監査に使うマーケティング帰属分析向けのリファレンススキルです。命名規則、GA4のチャネル分類、チャネル別テンプレート、BigQueryの検証クエリを扱います。

主な機能

  1. 01命名規則に沿ったUTM URL作成
  2. 02GA4チャネル分類ルールの確認
  3. 03チャネル別UTMテンプレートの参照
  4. 04BigQueryクエリによる帰属監査
  5. 05自動タグ付けの動作確認

活用シーン

  1. 01Google Ads用UTM URLの作成
  2. 02キャンペーン命名の統一
  3. 03GA4のUnassigned流入の調査
  4. 04BigQueryでの流入元・メディアデータ検証

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/cognyai/claude-code-marketing-skills --skill utm-builder

インストール後、Claude Code で/utm-builderを入力して読み込まれたか確認します。

詳細

UTM パラメータ戦略とビルダーのリファレンス

UTM パラメータ戦略、命名規則、GA4 のデフォルトチャネルグループのルール、自動タグ設定の動作、よくある間違い、マーケティングアトリビューション用の BigQuery 検証クエリに関する完全ガイドです。

ドキュメント全文:https://cogny.com/docs/utm-strategy

使用方法

/utm-builder                          # Full UTM strategy overview
/utm-builder naming conventions       # Show naming convention rules
/utm-builder channel grouping         # GA4 default channel grouping rules
/utm-builder meta ads                 # Meta Ads UTM template
/utm-builder audit                    # BigQuery validation queries
/utm-builder build google cpc         # Generate UTM URL for Google Ads

手順

あなたは UTM 戦略とマーケティングアトリビューションの専門家です。このリファレンスを使って、ユーザーが正しい UTM URL を作成できるよう支援し、既存の UTM 命名規則を監査し、GA4 のデフォルトチャネルグループのルールを理解し、BigQuery でアトリビューションデータを検証してください。

ユーザーから質問されたら、以下から該当するセクションを見つけて、正確で実行可能な回答を提供してください。UTM URL を作成するときは、必ず小文字とハイフン区切りの命名規則を適用してください。

ユーザーが特定のトピックを引数として指定した場合は、その分野に焦点を当ててください。指定がない場合は、UTM 戦略の基本事項を概説してください。

Cogny MCP ツールに接続している場合は、ライブの GA4 データと Google Ads データを取得して、実際の UTM 設定を監査できます。


5 つの UTM パラメータ

パラメータ必須目的例
utm_sourceはいトラフィックを送るプラットフォームまたはパブリッシャーgoogle、facebook、linkedin、newsletter
utm_mediumはいマーケティングチャネルの種類cpc、paid-social、email、organic-social
utm_campaignはい特定のキャンペーン名spring-sale-2025、brand-awareness-q1
utm_termいいえ有料検索キーワードrunning+shoes、crm+software
utm_contentいいえクリエイティブのバリエーションまたはリンクの掲載位置hero-banner、sidebar-cta、blue-variant
パラメータの詳細

utm_source — クリックは実際にどこで発生しましたか?

utm_source=google          # Google Ads or Google organic
utm_source=facebook        # Meta Ads (Facebook/Instagram)
utm_source=linkedin        # LinkedIn Ads or organic
utm_source=klaviyo         # Email via Klaviyo
utm_source=tiktok          # TikTok Ads
utm_source=partner-blog    # A specific referral partner

utm_medium — チャネルの種類です。GA4 のデフォルトチャネルグループでは、最も重要なパラメータです。utm_medium が誤っていると、トラフィックは誤ったチャネルに分類されます。

utm_medium=cpc             # Cost-per-click (paid search)
utm_medium=paid-social     # Paid social ads
utm_medium=email           # Email marketing
utm_medium=organic-social  # Organic social posts
utm_medium=display         # Display/banner ads
utm_medium=affiliate       # Affiliate traffic
utm_medium=referral        # Partner/referral traffic
utm_medium=video           # Video ads

utm_campaign — 一貫した構成のキャンペーン名:

utm_campaign=spring-sale-2025
utm_campaign=brand-awareness-q1-2025
utm_campaign=retargeting-cart-abandoners

utm_term — キーワードまたはターゲティング語句:

utm_term=running-shoes
utm_term=best-crm-software

utm_content — クリエイティブのバリエーションまたは掲載位置:

utm_content=hero-image-v1
utm_content=sidebar-cta
utm_content=video-30s

GA4 のデフォルトチャネルグループのルール

GA4 は、source、medium、campaign の値に基づいて、各セッションをデフォルトチャネルグループに分類します。これらのルールによって、GA4 の標準レポートでトラフィックがどのように表示されるかが決まります。

チャネルMedium が一致する必要のある値
Directsource = (direct) AND medium is (not set) or (none)
Organic Searchmedium = organic
Paid Searchmedium matches ^(cpc|ppc|paidsearch)$
Displaymedium matches ^(display|cpm|banner)$
Paid Socialmedium matches ^(paid-social|paidsocial|paid_social)$
Organic Socialmedium matches ^(social|social-network|social-media|sm|organic-social)$
Emailmedium = email
Affiliatesmedium = affiliate
Referralmedium = referral
Audiomedium = audio
SMSmedium matches ^(sms|sms_message)$
Videomedium matches ^(video|youtube)$
Cross-networkcampaign name contains cross-network
Unassigned上記のいずれのルールにも一致しない

重要: utm_medium が上記のパターンに一致しない場合、トラフィックは Unassigned に分類されます。

BigQuery における GA4 の Source/Medium マッピング

UTM 値は、GA4 の BigQuery エクスポート内の複数の場所に表示されます。

UTM パラメータBigQuery の場所スコープ
utm_sourcetraffic_source.sourceユーザー(初回接触)
utm_mediumtraffic_source.mediumユーザー(初回接触)
utm_campaigntraffic_source.nameユーザー(初回接触)
utm_sourcesession_start のイベントパラメータ sourceセッション
utm_mediumsession_start のイベントパラメータ mediumセッション
utm_campaignsession_start のイベントパラメータ campaignセッション

セッションレベルの source/medium クエリ:

SELECT
  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'source') as session_source,
  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'medium') as session_medium,
  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'campaign') as session_campaign,
  COUNT(*) as sessions
FROM `project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
                        AND FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)
  AND event_name = 'session_start'
GROUP BY 1, 2, 3
ORDER BY sessions DESC

命名規則

ルール
  1. すべて小文字にします。 GA4 では大文字と小文字が区別されます。Facebook と facebook は別々のソースです。
  2. 単語の区切りにはハイフンを使います。 スペース(%20 に変換されます)や特殊文字は使わないでください。
  3. 特殊文字は使いません。 a-z、0-9、- のみを使用します。
  4. 具体的かつ簡潔にします。 ps ではなく paid-social を使います。
  5. キャンペーンには時間を示す識別子を含めます。 spring-sale ではなく spring-sale-2025 を使います。
推奨される分類体系
パラメータ規則例
utm_sourceプラットフォーム名を小文字で指定google、facebook、linkedin、klaviyo
utm_mediumGA4 のルールに沿ったチャネル種別cpc、paid-social、email、display
utm_campaignname-date または name-quarterspring-sale-2025、retarget-cart-q1
utm_termキーワードまたはターゲティングrunning-shoes、brand-keyword
utm_contentクリエイティブのバリエーションまたは掲載位置video-30s-v2、hero-banner、cta-red

チャネル別 UTM テンプレート

Google Ads(検索)
?utm_source=google&utm_medium=cpc&utm_campaign={campaign_name}&utm_term={keyword}&utm_content={ad_variant}
Google Ads(ディスプレイ)
?utm_source=google&utm_medium=display&utm_campaign={campaign_name}&utm_content={creative_variant}
Meta Ads(Facebook/Instagram)
utm_source=facebook&utm_medium=paid-social&utm_campaign={{campaign.name}}&utm_content={{ad.name}}&utm_term={{adset.name}}

Meta の動的パラメータ:{{campaign.name}}、{{campaign.id}}、{{adset.name}}、{{adset.id}}、{{ad.name}}、{{ad.id}}、{{placement}}、{{site_source_name}}。

LinkedIn Ads
utm_source=linkedin&utm_medium=paid-social&utm_campaign={{CAMPAIGN_NAME}}&utm_content={{CREATIVE_NAME}}

LinkedIn のマクロ:{{CAMPAIGN_ID}}、{{CAMPAIGN_NAME}}、{{CAMPAIGN_GROUP_ID}}、{{CAMPAIGN_GROUP_NAME}}、{{CREATIVE_ID}}、{{CREATIVE_NAME}}。

メール
?utm_source={esp_name}&utm_medium=email&utm_campaign={email_campaign_name}&utm_content={link_placement}
オーガニックソーシャル
?utm_source={platform}&utm_medium=organic-social&utm_campaign={post_theme}&utm_content={post_variant}
インフルエンサー
?utm_source=creator-{name}&utm_medium=paid-social&utm_campaign=influencer-{campaign}-{date}&utm_content={platform}-{format}
アフィリエイト
?utm_source=partner-{name}&utm_medium=affiliate&utm_campaign=affiliate-program-{year}&utm_content={placement}

自動タグ設定と手動タグ設定

Google Ads(gclid)
  • 自動タグ設定では、すべてのクリック URL に gclid が追加されます
  • GA4 はキャンペーン、広告グループ、キーワードのデータを使って、セッションを Google Ads に自動的に関連付けます
  • ソース/メディアは自動的に google / cpc に設定されます
  • gclid と UTM の両方がある場合、GA4 は gclid を優先します — GA4 のアトリビューションでは UTM は無視されます

Google Ads で UTM も必要となるケース:

  • UTM パラメータを解析する CRM システム(HubSpot、Salesforce)
  • サードパーティの分析ツール(Mixpanel、Amplitude)
  • gclid を読み取れないクロスプラットフォームのダッシュボード
  • page_location を使った BigQuery のカスタムアトリビューションモデル
Meta Ads(fbclid)
  • GA4 はアトリビューションに fbclid をネイティブでは解析しません
  • UTM がない場合、Meta のトラフィックは facebook.com / referral または l.facebook.com / referral として表示されます
  • GA4 で Meta Ads のアトリビューションを正しく行うには、UTM パラメータを使う必要があります
LinkedIn Ads
  • LinkedIn Insight Tag はコンバージョンをトラッキングしますが、クリック単位の GA4 アトリビューション情報は提供しません
  • GA4 で LinkedIn Ads のアトリビューションを正しく行うには、UTM パラメータを使う必要があります
両方を使う場合
  • Google Ads と CRM の連携:gclid は GA4 に、UTM は CRM にデータを渡します
  • UTM が必要なクロスプラットフォームのダッシュボード
  • BigQuery のカスタムアトリビューションモデル

警告: Google Ads では、UTM で gclid を上書きする必要がある場合を除き、GA4 の設定で「Allow manual tagging to override auto-tagging」がオフになっていることを確認してください。

よくある UTM の間違い

1. 命名の不統一

GA4 は、異なる文字列をそれぞれ別のソースとして扱います。

utm_source=Facebook       # WRONG: capital F
utm_source=facebook       # CORRECT
utm_source=fb             # WRONG: abbreviation
2. 内部リンクへの UTM の追加

自サイト内のリンクに UTM を追加すると、セッションのソースがリセットされ、セッション数が水増しされます。以下のようなことは絶対にしないでください。


<a href="/pricing?utm_source=homepage&utm_medium=banner">Pricing</a>
3. utm_medium の欠落

utm_medium がない場合、トラフィックは「Unassigned」に分類されます。

# BAD: No medium
?utm_source=facebook&utm_campaign=spring-sale

# GOOD: Medium present
?utm_source=facebook&utm_medium=paid-social&utm_campaign=spring-sale
4. 特殊文字の URL エンコード
# BAD
utm_campaign=Spring Sale 2025    # Becomes Spring%20Sale%202025

# GOOD
utm_campaign=spring-sale-2025
5. オーガニック検索/SEO ページへの UTM の追加

検索エンジンがクロールするページに UTM パラメータを追加しないでください。ページの評価が分散し、重複コンテンツが作成されます。

6. キャンペーン名への日付の記載漏れ
# BAD: Cannot distinguish quarters
utm_campaign=brand-search

# GOOD: Time-scoped
utm_campaign=brand-search-q1-2025

BigQuery の検証クエリ

ソース/メディアのユニークな組み合わせをすべて取得
SELECT
  traffic_source.source,
  traffic_source.medium,
  COUNT(DISTINCT user_pseudo_id) as users,
  MIN(PARSE_DATE('%Y%m%d', event_date)) as first_seen,
  MAX(PARSE_DATE('%Y%m%d', event_date)) as last_seen
FROM `project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY))
                        AND FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)
GROUP BY 1, 2
ORDER BY users DESC
ソース名の不統一を検出
WITH source_variants AS (
  SELECT
    LOWER(traffic_source.source) as normalized_source,
    traffic_source.source as original_source,
    COUNT(DISTINCT user_pseudo_id) as users
  FROM `project.analytics_123456789.events_*`
  WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY))
                          AND FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)
    AND traffic_source.source IS NOT NULL
  GROUP BY 1, 2
)
SELECT
  normalized_source,
  ARRAY_AGG(STRUCT(original_source, users) ORDER BY users DESC) as variants,
  COUNT(*) as variant_count
FROM source_variants
GROUP BY 1
HAVING COUNT(*) > 1
ORDER BY variant_count DESC
チャネルグループの分類を予測
SELECT
  traffic_source.source,
  traffic_source.medium,
  CASE
    WHEN traffic_source.source = '(direct)' AND (traffic_source.medium IS NULL OR traffic_source.medium IN ('(not set)', '(none)')) THEN 'Direct'
    WHEN traffic_source.medium = 'organic' THEN 'Organic Search'
    WHEN REGEXP_CONTAINS(traffic_source.medium, r'^(cpc|ppc|paidsearch)$') THEN 'Paid Search'
    WHEN REGEXP_CONTAINS(traffic_source.medium, r'^(display|cpm|banner)$') THEN 'Display'
    WHEN REGEXP_CONTAINS(traffic_source.medium, r'^(paid-social|paidsocial|paid_social)$') THEN 'Paid Social'
    WHEN REGEXP_CONTAINS(traffic_source.medium, r'^(social|social-network|social-media|sm|social_network|social_media|organic-social)$') THEN 'Organic Social'
    WHEN traffic_source.medium = 'email' THEN 'Email'
    WHEN traffic_source.medium = 'affiliate' THEN 'Affiliates'
    WHEN traffic_source.medium = 'referral' THEN 'Referral'
    WHEN traffic_source.medium = 'audio' THEN 'Audio'
    WHEN REGEXP_CONTAINS(traffic_source.medium, r'^(sms|sms_message)$') THEN 'SMS'
    WHEN REGEXP_CONTAINS(traffic_source.medium, r'^(video|youtube)$') THEN 'Video'
    WHEN REGEXP_CONTAINS(IFNULL(traffic_source.name, ''), r'cross-network') THEN 'Cross-network'
    ELSE 'Unassigned'
  END as predicted_channel_group,
  COUNT(DISTINCT user_pseudo_id) as users
FROM `project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
                        AND FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)
GROUP BY 1, 2, 3
ORDER BY users DESC
内部 UTM の混入を検出
SELECT
  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location') as landing_page,
  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_referrer') as referrer,
  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'source') as session_source,
  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'medium') as session_medium,
  COUNT(*) as sessions
FROM `project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
                        AND FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)
  AND event_name = 'session_start'
  -- Replace example.com with your domain
  AND REGEXP_CONTAINS(
    (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_referrer'),
    r'example\.com'
  )
  AND REGEXP_CONTAINS(
    (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location'),
    r'utm_'
  )
GROUP BY 1, 2, 3, 4
ORDER BY sessions DESC
utm_medium が欠落しているセッションを検出
SELECT
  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'source') as source,
  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'campaign') as campaign,
  COUNT(*) as sessions
FROM `project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
                        AND FORMAT_DATE('%Y%m%d', CURRENT_DATE() - 1)
  AND event_name = 'session_start'
  AND (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'source') IS NOT NULL
  AND (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'source') != '(direct)'
  AND (
    (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'medium') IS NULL
    OR (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'medium') IN ('(not set)', '(none)', '')
  )
GROUP BY 1, 2
ORDER BY sessions DESC

スプレッドシート作成用の数式

列(A=URL、B=ソース、C=メディア、D=キャンペーン、E=キーワード、F=コンテンツ)の値から UTM URL を生成する Google Sheets の数式:

=A2&"?utm_source="&B2&"&utm_medium="&C2&"&utm_campaign="&D2&IF(E2<>"","&utm_term="&E2,"")&IF(F2<>"","&utm_content="&F2,"")

Resources

コメント