Attribution &
UTM Taxonomy
A practical field guide covering how GA4 assigns conversion credit, which model to choose, and how to build a UTM taxonomy that keeps your channel data clean and trustworthy.
How Attribution Works
Attribution determines which touchpoints in a user's journey receive credit for a conversion. Getting it wrong is one of the most common reasons analytics data misleads business decisions.
GA4 uses an event-based data model and assigns credit across the touchpoints a user encounters before completing a conversion event. The model you select in Admin → Attribution Settings applies globally to all conversion reporting.
Attribution is only as good as your UTM data. Most attribution problems are not model problems — they are data quality problems that no model can fix. A perfectly configured model on bad UTM data still produces bad results.
The Attribution Chain
Attribution Models
GA4 supports two categories of attribution model. The choice affects which channels appear to perform well — and therefore where budget gets allocated.
Rule-Based Models
Data-Driven Attribution
DDA requires ~300+ conversions per month and at least 30 days of data to train. Below this threshold, GA4 silently falls back to Last Click. Verify you have sufficient volume before trusting DDA outputs.
Key Variables to Watch
Lookback Windows
GA4 defaults to 30 days for most conversions and 90 days for purchase events. If your sales cycle exceeds these defaults, you will systematically undercount early-funnel touchpoints.
Set lookback windows in Admin → Attribution Settings. B2B funnels commonly need 60–90 days for non-purchase conversions.
Channel Groupings Are Fragile
GA4's default channel definitions rely entirely on UTM parameters being applied correctly. A paid campaign without utm_medium=cpc will be misclassified as organic or direct. This is the single most common source of attribution errors.
Cross-Domain Tracking
When users traverse multiple domains (main site → subdomain checkout → third-party cart), sessions fragment and attribution breaks unless:
_gl linker parameter passes correctly across all domain transitions — verify in GA4 DebugViewDirect Traffic Inflation
GA4 has a "last non-direct click" fallback — if the last touchpoint is direct, it looks back for a prior campaign touchpoint. But when UTMs are missing or broken, direct absorbs credit it doesn't deserve.
Monitor your direct traffic percentage as a data quality indicator, not just a channel. A sudden spike almost always means a UTM broke somewhere in a campaign or email deployment.
Model Switching Creates Discontinuities
You can compare models in Advertising → Attribution without changing anything. But switching the active model in Attribution Settings retroactively changes how conversions are counted across all reports. Set it once, early, and document the date if you ever change it.
Engaged Sessions vs. Sessions
GA4 attributes using engaged sessions as the unit, not raw sessions. An engaged session requires one of: 10+ seconds of engagement, a conversion event, or 2+ page views. This changes how multi-touch paths surface in funnel analysis compared to Universal Analytics.
Getting It Right
Before Launch
At Implementation
Ongoing
Set a recurring check on Direct traffic % and the Attribution Paths report. The paths report tells you whether your model reflects actual user behavior — not just whether it validates your paid channel spend.
UTM Taxonomy Overview
A UTM taxonomy is the naming convention system governing how you tag URLs across every campaign and channel. It is the foundation everything else rests on.
If it's inconsistent, channel groupings break, attribution lies, and reports become noise. The taxonomy is not a technical concern — it is a governance concern.
Most attribution problems are not model problems. They are data quality problems upstream of the model. Fix the taxonomy first. Then tune the model.
What a Taxonomy Controls
event_params reliable without regex cleanupThe Five Parameters
utm_source and utm_medium are the two parameters GA4 uses to classify channels. Getting those wrong misfires your entire channel report. The other three are for campaign and creative reporting.
google and Google creates two separate sources in reportspaid or facebook instead of cpc or paid_social breaks channel classification{keyword} ValueTrack parameter. Manually set for audience segment tracking in other channels.Channel Grouping Rules
GA4 maps source/medium combinations to channels using built-in logic. These are the exact values that trigger each channel classification. Any deviation pushes traffic to Unassigned or Direct.
source = google, bing, yahoo
source = meta, linkedin, tiktok, etc.
medium = organic_social, social
Last non-direct click applied
A Facebook ad tagged with utm_medium=facebook will not match Paid Social. It falls to Unassigned. That is paid campaign spend becoming invisible in your channel report. The medium must be paid_social or cpc.
Building a Naming Convention
A naming convention has three non-negotiable properties:
Recommended Structure
utm_source = [platform]
google | meta | linkedin | klaviyo | newsletter
utm_medium = [channel type]
cpc | display | paid_social | email | organic_social
utm_campaign = [objective]_[audience]_[date]
awareness_cold-audience_2026q1
retarget_cart-abandoners_2026q2
nurture_trial-users_ongoing
utm_content = [creative]_[variant]
hero-v1 | carousel-blue | cta-learn-more
utm_term = [keyword or segment]
enterprise-analytics | dmo-retargetCampaign Naming Pattern
The campaign name pattern is where teams diverge the most. A consistent structure of [objective]_[audience]_[date] lets you filter and aggregate in GA4 and BigQuery without regex gymnastics.
-- Good examples awareness_cold-audience_2026q1 retarget_cart-abandoners_2026q1 nurture_trial-users_ongoing brand_all_2026q2 -- Bad examples (do not use) Q1 Brand Campaign -- spaces, mixed case Meta_Retargeting -- no audience or date AWARENESS-2026 -- uppercase
Enforcement Strategies
The naming convention means nothing without enforcement. The convention and the tool are one artifact — not two separate things.
utm_source and utm_medium. These must be dropdown-selected from an approved list. The URL is generated — not typed. Anyone who types a medium value manually will eventually introduce a bad one.Auditing a Broken Setup
When inheriting a messy UTM setup, use this sequence to assess damage quickly before attempting any remediation.
(not set), (direct)/(none), or obvious misspellings is a red flag.meta/paid_social traffic is low, something is mistagged. The delta between spend and attributed sessions is your damage estimate.events_* table gives you unsampled, raw UTM values. Use it to see the full picture including traffic that GA4 has already misclassified.BigQuery Diagnostic Query
SELECT (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'utm_source') AS utm_source, (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'utm_medium') AS utm_medium, COUNT(*) AS sessions FROM `your_project.analytics_XXXXXXXX.events_*` WHERE _TABLE_SUFFIX BETWEEN '20260101' AND '20260131' AND event_name = 'session_start' GROUP BY 1, 2 ORDER BY 3 DESC LIMIT 100
Run this monthly. The source/medium distribution in raw events is your ground truth — it shows you what GA4 is actually receiving before any channel classification logic is applied.
Approved Values
Mediums — GA4 Channel Mapped
| Value | GA4 Channel | Type |
|---|---|---|
cpc | Paid Search / Paid Social | Paid |
display | Display | Paid |
paid_social | Paid Social | Paid |
paid_video | Paid Video | Paid |
paid_other | Paid Other | Paid |
affiliate | Affiliates | Paid |
email | Owned | |
push | Push Notifications | Owned |
sms | SMS | Owned |
organic | Organic Search | Organic |
organic_social | Organic Social | Organic |
referral | Referral | Referral |
Do NOT Use as utm_medium
These values break GA4 channel grouping. Traffic tagged with them will land in Unassigned.
Approved Sources by Category
| Category | Approved Values |
|---|---|
| Paid Search | google bing yahoo baidu yandex |
| Paid & Organic Social | meta linkedin tiktok pinterest twitter snapchat |
| Email / CRM | newsletter klaviyo hubspot marketo salesforce |
| Earned / Partner | affiliate partner podcast referral press |
| Events / Offline | event tradeshow qr direct_mail |
Do & Don't Rules
Always Do
Google and google appear as two separate sources in every report.%20 in URLs and break readability in every downstream report and export.Never Do
facebook, instagram, twitter, tiktok — all break GA4 channel grouping. Use paid_social or cpc instead.