What's the right UTM format for GA4?
The reliable convention: utm_source = lowercase platform name (e.g. facebook, linkedin, mailchimp), utm_medium = channel category matching GA4's default rules (cpc, paid_social, email, referral), utm_campaign = kebab-case-with-date (e.g. summer-sale-2026-06), utm_content = creative variant (hero-image-v2, headline-a), utm_term = keyword (paid search only).
All values lowercase, no spaces, no special characters except hyphens. The single biggest UTM mistake is inconsistent casing — Facebook and facebook produce two separate rows in GA4 reports for the same source.
The reusable template
Every link before publication should be assembled from this template. Build it once as a Google Sheet shared across marketing, paid media, and CRM teams.
| Parameter | Required | Format | Example | Notes |
|---|---|---|---|---|
| utm_source | Yes | lowercase platform | facebook, linkedin, chatgpt, mailchimp | Match Google's recognised source names where possible |
| utm_medium | Yes | lowercase channel category | cpc, paid_social, email, referral, paid_ai | Must match GA4 channel rules (case sensitive in some contexts) |
| utm_campaign | Yes | kebab-case with date | spring-launch-2026-04 | Date suffix prevents campaign-name reuse confusion |
| utm_content | Optional | kebab-case variant | hero-image-v2, cta-button-blue | Use for A/B variant identification |
| utm_term | Optional | keyword (paid search) | analytics+audit+tool | Auto-populated by Google Ads when auto-tagging is on |
The template lives as a Google Sheet with one tab per channel. Each row is a campaign. The link assembly happens in a formula column that concatenates all parameters with proper URL encoding.
The 8 common mistakes
Mistake 1: Inconsistent casing
Facebook vs facebook vs FACEBOOK all create separate rows in GA4 reports. The single biggest cause of fragmented attribution. Enforce lowercase everywhere — in the template, in approval workflows, and in any tool generating UTMs.
Mistake 2: Spaces and special characters
Spaces become %20 or + depending on encoding context. Special characters like & break URL parsing. Use kebab-case (spring-launch-2026) not space-separated (spring launch 2026).
Mistake 3: Reusing campaign names across periods
summer-sale reused every year creates a single GA4 campaign with mixed historical data. Always include a date suffix: summer-sale-2025-06, summer-sale-2026-06. The reports stay clean across years.
Mistake 4: Mixing utm_medium values for the same channel
Some teams tag Facebook ads with medium=paid_social, others with medium=cpc, others with medium=facebook. Pick one convention and enforce it. The cleanest: cpc for search-style placements, paid_social for social feeds, display for banner placements.
Mistake 5: UTMs on internal links
Adding UTMs to internal navigation links resets the user's session — GA4 starts a new session each time the user clicks an internally-tagged link. Never UTM-tag your own internal navigation. Only external links pointing to your site.
Mistake 6: Missing required parameters
A link with utm_campaign but no utm_source or utm_medium lands the session in Direct (because GA4 can't classify the channel without medium). All three core parameters (source, medium, campaign) are required for proper attribution.
Want to see whether attribution loss is already distorting your channel data?
Mistake 7: UTMs on Google Ads with auto-tagging
Auto-tagging adds gclid automatically. Adding manual UTMs on top creates conflicts — the manual UTMs win, but the gclid-driven Google Ads cost data linkage breaks. With auto-tagging on, never add manual UTMs to Google Ads destinations.
Mistake 8: Letting marketing build UTMs ad-hoc
Marketing teams without a centralised template create one-off variants. Within 12 months you have 47 different medium values, 200+ campaign-name conventions, and unrecoverable attribution. The fix: centralised template, mandatory review before publish, monthly UTM audit.
The casing problem in detail
GA4's URL parameter handling is case-sensitive in certain contexts. The practical implications:
utm_source=Facebookandutm_source=facebookcreate separate rows in Source/Medium reports- Channel group rules (which use exact match on values like
medium=cpc) fail when the value ismedium=CPC - BigQuery exports preserve the original casing, so historical reports remain fragmented
Fix at source: every link generator (Google Sheet template, Bitly link tool, marketing automation platform) should lowercase all UTM values before assembling the URL. The template formula should look like:
Fix retroactively: Use BigQuery to clean historical data. Standardise casing in a query that builds your reporting tables. The original GA4 data stays as-is; your reporting layer presents the cleaned version.
What about gclid, fbclid, and msclkid?
Click IDs are auto-tagged by ad platforms. They override or supplement UTMs:
- gclid (Google Ads) — auto-appended when auto-tagging is on. Forces Paid Search classification regardless of manual UTMs.
- msclkid (Microsoft Ads) — same behaviour for Bing.
- fbclid (Meta) — Meta's click ID for first-party data passing. Doesn't change GA4 channel classification but enables conversion API work.
- gbraid / wbraid (Google iOS) — privacy-preserving click IDs replacing gclid for iOS in some scenarios.
- ttclid (TikTok) — TikTok's click ID.
The rule: never add manual UTMs alongside auto-tagged click IDs. If auto-tagging is on for Google Ads, leave the destination URL clean. Adding utm_source=google&utm_medium=cpc on top of gclid breaks the cost-data linkage between GA4 and Google Ads.
The team workflow
Three patterns to enforce UTM discipline across teams:
1. Centralised UTM Builder. Google Sheet template with the parameter columns plus a formula column generating the final URL. Marketing fills the parameter cells; the formula assembles the URL. Approvers review the parameters before the URL is published.
2. Monthly UTM audit. Pull the Source/Medium report from GA4 filtered to your campaigns. Look for casing inconsistencies, unexpected values, missing parameters. Fix at source by re-tagging future campaigns; can't retroactively fix historical attribution.
3. Pre-publish review. Add UTM-check to every campaign launch checklist. Junior team members generate the URL; senior team members review against the convention before campaign goes live.
For agencies running multi-client campaigns, a shared central template with per-client tabs prevents source/medium contamination across clients' GA4 properties.
FAQ: UTM Builder for GA4: A Reusable Template (Plus 8 Common Mistakes)
What should a team validate first when utm builder for ga4: a reusable template (plus 8 common mistakes) appears?
How do I know whether the fix actually worked?
When should this become a full GA4 audit instead of a quick fix?
Related guides for UTM Builder for GA4: A Reusable Template (Plus 8 Common Mistakes)
ChatGPT, Atlas, Perplexity, Comet, Claude: How Each Shows Up in GA4 (2026 Reference)
In 2026, AI traffic in GA4 splits into three buckets. Browsers and assistants that pass clean referrers (Perplexity web, Perplexity Comet, Claude.ai, Copilot, Gemini standalone) appear with a recognisable source / medium like perplexity.ai / referral. Surfaces that strip the referrer (ChatGPT Atlas…
Perplexity Sources Report: How to Influence What It Cites in 2026
Perplexity citations correlate strongly with five factors: (1) ranking in Bing's top 10 for the underlying query (Perplexity uses Bing's index as fallback alongside its own ~5 billion-URL custom crawler), (2) a clear direct answer in the first 50 words of the relevant page…
Check UTM Builder for GA4: A Reusable Template (Plus 8 Common Mistakes) before campaign reporting gets blamed for the wrong issue
Run a free GA4 audit to spot attribution breaks, UTM governance issues, self-referrals, and source/medium loss fast.