UTM Source Naming Rules: What Works (and What Breaks) in GA4

UTMGuard Team
8 min readutm-best-practices

Two campaign URLs. Both look professional:

Campaign A:

?utm_source=Newsletter&utm_medium=Email&utm_campaign=Spring Sale

Campaign B:

?utm_source=newsletter&utm_medium=email&utm_campaign=spring-sale

One tracks perfectly. The other creates attribution nightmares.

Which one? Campaign B.

GA4 doesn't just care whether you add UTM parameters. It cares HOW you format them.

Uppercase vs lowercase. Spaces vs dashes. Special characters. Reserved words.

Get any of these wrong, and your attribution breaks or becomes inconsistent.

Here are the complete naming rules that actually work in GA4.

🚨 Not sure what's breaking your tracking?

Run a free 60-second audit to check all 40+ ways UTM tracking can fail.

Scan Your Campaigns Free

✓ No credit card ✓ See results instantly

Rule 1: Always Use Lowercase

The rule: All UTM parameter values should be lowercase.

Why:

GA4 is case-sensitive.

This means:

  • utm_source=Newsletter
  • utm_source=newsletter
  • utm_source=NEWSLETTER

Are treated as three different sources in GA4.

The problem this creates:

You send 4 email campaigns:

  • March: utm_source=Newsletter
  • April: utm_source=newsletter
  • May: utm_source=NEWSLETTER
  • June: utm_source=NewsLetter

GA4 shows 4 different sources:

  • Newsletter: 2,400 sessions
  • newsletter: 2,100 sessions
  • NEWSLETTER: 1,800 sessions
  • NewsLetter: 1,600 sessions

Your email performance is fragmented across 4 rows instead of 1 combined row showing 7,900 total sessions.

What you wanted: All email traffic grouped under one source name.

What you got: 4 separate sources that you have to manually combine in every report.

Solution: Pick lowercase and use it consistently:

?utm_source=newsletter&utm_medium=email&utm_campaign=spring-sale

Exception: Proper brand names

If you're tracking a specific brand or partner with capitalization in their name:

  • utm_source=TechCrunch (publication name)
  • utm_source=LinkedIn (platform name with capital letters)

Just be 100% consistent with that exact capitalization.

Rule 2: Replace Spaces with Hyphens or Underscores

The rule: Never use spaces in UTM values. Use hyphens (-) or underscores (_).

Why:

Spaces in URLs become encoded as %20:

You write:

?utm_source=email campaign&utm_medium=email

URL becomes:

?utm_source=email%20campaign&utm_medium=email

GA4 shows:

  • Source: email%20campaign (ugly, hard to read)

Or worse, some platforms strip the space entirely:

  • Source: emailcampaign (one word, inconsistent with other campaigns)

Or worst, the space breaks the URL structure:

?utm_source=email campaign&utm_medium=email

Browser interprets this as:

  • utm_source: email
  • Invalid text: campaign
  • utm_medium: email

Result: Broken URL that doesn't track properly.

Solution: Use hyphens or underscores:

Option 1: Hyphens (recommended)

?utm_source=email-campaign&utm_medium=email
?utm_campaign=spring-sale-2024

Option 2: Underscores

?utm_source=email_campaign&utm_medium=email
?utm_campaign=spring_sale_2024

Pick one format and use it consistently across all campaigns.

Most marketing teams prefer hyphens because:

  • More readable: spring-sale vs spring_sale
  • Common in URLs: yoursite.com/spring-sale
  • Consistent with web standards

😰 Is this your only tracking issue?

This is just 1 of 40+ ways UTM tracking breaks. Most marketing teams have 8-12 critical issues they don't know about.

• 94% of sites have UTM errors

• Average: $8,400/month in wasted ad spend

• Fix time: 15 minutes with our report

✓ Connects directly to GA4 (read-only, secure)

✓ Scans 90 days of data in 2 minutes

✓ Prioritizes issues by revenue impact

✓ Shows exact sessions affected

Get Your Free Audit Report

Rule 3: Avoid Special Characters

The rule: Only use letters, numbers, hyphens, and underscores in UTM values.

Forbidden characters:

CharacterWhy It's ForbiddenExample Problem
&Starts new URL parametersource=partner&affiliate breaks into two parameters
?Starts query stringsource=what? breaks URL parsing
#Starts URL fragmentsource=sale#1 treats #1 as anchor
=Key-value separatorsource=a=b confuses parameter parsing
%URL encoding prefixsource=50% becomes double-encoded
+Sometimes read as spacesource=a+b might become a b
/Path separatorsource=social/fb can break routing
\Escape charactersource=a\b causes encoding issues
``Empty spacesource= treated as empty/missing

Example (broken):

?utm_source=partner&affiliate&utm_medium=referral

What GA4 sees:

  • utm_source: partner
  • New parameter: affiliate (no value)
  • utm_medium: referral

Result: utm_source is only "partner", and you have a random "affiliate" parameter doing nothing.

Example (fixed):

?utm_source=partner-affiliate&utm_medium=referral

Rule 4: Never Use Reserved Keywords

The rule: Avoid words that have special meaning in programming or GA4.

Complete forbidden list:

Programming keywords:

  • null, undefined, nil, none, NaN, false, true, void

GA4 system values:

  • (not set), (not provided), (direct), (none), unassigned, unknown

Ambiguous terms:

  • test, testing, temp, placeholder, example, default, sample

Why these break attribution:

Example:

?utm_source=null&utm_medium=email&utm_campaign=launch

GA4 interprets utm_source=null as "no source was provided" (not "source is named null").

Result: Traffic shows as "(direct) / (none)" instead of attributed to your email campaign.

Solution: Use descriptive, specific names:

?utm_source=newsletter&utm_medium=email&utm_campaign=launch

Rule 5: Be Specific (Not Generic)

The rule: Use descriptive source names that identify the exact origin.

Generic (problematic):

?utm_source=social&utm_medium=social&utm_campaign=promo

Problems:

  • Which platform? Facebook? Instagram? LinkedIn?
  • Can't compare platform performance
  • All social traffic lumped together

Specific (correct):

?utm_source=facebook&utm_medium=social&utm_campaign=product-launch
?utm_source=instagram&utm_medium=social&utm_campaign=product-launch
?utm_source=linkedin&utm_medium=social&utm_campaign=product-launch

Result: You can compare which social platform drives better results.

Good Specificity Examples

Email:

  • ❌ Generic: utm_source=email
  • ✅ Specific: utm_source=newsletter, utm_source=klaviyo, utm_source=mailchimp

Social:

  • ❌ Generic: utm_source=social
  • ✅ Specific: utm_source=facebook, utm_source=instagram, utm_source=linkedin

Partners:

  • ❌ Generic: utm_source=partner
  • ✅ Specific: utm_source=techcrunch, utm_source=partnersite.com

Paid ads:

  • ❌ Generic: utm_source=ads
  • ✅ Specific: utm_source=google, utm_source=facebook, utm_source=linkedin

Rule 6: Use Standard utm_medium Values

The rule: Use GA4's predefined medium values for proper channel grouping.

Standard utm_medium values:

Medium ValueChannel GroupUse For
organicOrganic SearchOrganic search traffic
cpc / ppcPaid SearchPaid search ads
emailEmailEmail marketing
socialOrganic SocialOrganic social posts
paid-socialPaid SocialPaid social ads
referralReferralPartner/blog links
affiliateAffiliateAffiliate marketing
displayDisplayDisplay advertising

Why this matters:

GA4 uses utm_medium to assign traffic to channel groups.

Custom medium values (like newsletter, partner, campaign) won't map to default channel groups.

Example:

?utm_source=newsletter&utm_medium=newsletter&utm_campaign=spring

Problem:

  • Doesn't map to "Email" channel group
  • Shows as "Unassigned" or custom channel
  • Excluded from standard channel reports

Solution:

?utm_source=newsletter&utm_medium=email&utm_campaign=spring

Now it properly maps to the "Email" channel group.

Rule 7: Keep It Short and Readable

The rule: UTM values should be concise but descriptive (under 50 characters).

Too long (hard to read):

?utm_source=march-2024-newsletter-sent-to-engaged-subscribers
?utm_campaign=spring-sale-promotion-for-new-product-line-2024-q1

Problems:

  • GA4 tables become wide and hard to read
  • Sorting/filtering becomes cumbersome
  • Higher chance of typos

Just right:

?utm_source=newsletter
?utm_campaign=spring-sale-2024

Guideline:

  • utm_source: 8-20 characters
  • utm_medium: 5-15 characters
  • utm_campaign: 10-30 characters

Rule 8: Be Consistent Across Campaigns

The rule: Pick naming patterns and stick to them across ALL campaigns.

Inconsistent (nightmare):

  • Campaign 1: utm_source=Newsletter
  • Campaign 2: utm_source=newsletter
  • Campaign 3: utm_source=email-newsletter
  • Campaign 4: utm_source=mail
  • Campaign 5: utm_source=klaviyo

All refer to the same channel (email), but GA4 shows 5 different sources.

Consistent (perfect):

  • All campaigns: utm_source=newsletter&utm_medium=email

How to ensure consistency:

Create a naming standards document:

Email campaigns:

  • utm_source: newsletter
  • utm_medium: email
  • utm_campaign: {campaign-name}

Social organic:

  • utm_source: {"{"}{"{"}platform{"}"}{"}"}} (facebook, instagram, linkedin, twitter)
  • utm_medium: social
  • utm_campaign: {campaign-name}

Social paid:

  • utm_source: Use platform auto-tagging (fbclid) instead of manual UTMs
  • If manual: utm_source: {"{"}{"{"}platform{"}"}{"}"}}, utm_medium: paid-social

Partners:

  • utm_source: {partner-domain} (techcrunch, partnersite.com)
  • utm_medium: referral
  • utm_campaign: {campaign-name}

✅ Fixed this issue? Great! Now check the other 39...

You just fixed one tracking issue. But are your Google Ads doubling sessions? Is Facebook attribution broken? Are internal links overwriting campaigns?

Connects to GA4 (read-only, OAuth secured)

Scans 90 days of traffic in 2 minutes

Prioritizes by revenue impact

Free forever for monthly audits

Run Complete UTM Audit (Free Forever)

Join 2,847 marketers fixing their tracking daily

Complete UTM Naming Template

Email campaigns:

?utm_source=newsletter
&utm_medium=email
&utm_campaign=`{campaign-name}`
&utm_content=`{cta-location}`

Example:

?utm_source=newsletter&utm_medium=email&utm_campaign=spring-sale-2024&utm_content=hero-cta

Organic social:

?utm_source=`{"{"}{"{"}platform{"}"}{"}"}}`
&utm_medium=social
&utm_campaign=`{campaign-name}`
&utm_content=`{post-type}`

Example:

?utm_source=linkedin&utm_medium=social&utm_campaign=thought-leadership&utm_content=carousel

Paid social:

Use platform auto-tagging (fbclid, li_fat_id, ttclid)
Don't add manual UTMs on top of auto-tagging

Partner/referral:

?utm_source=`{partner-domain}`
&utm_medium=referral
&utm_campaign=`{campaign-name}`
&utm_content=`{link-location}`

Example:

?utm_source=techcrunch.com&utm_medium=referral&utm_campaign=product-review&utm_content=article-body

Display ads:

?utm_source=`{ad-network}`
&utm_medium=display
&utm_campaign=`{campaign-name}`
&utm_content=`{creative-variant}`

Example:

?utm_source=google-display&utm_medium=display&utm_campaign=retargeting-q1&utm_content=animated-300x250

Real Example: Before and After Cleanup

Client: SaaS company with 18 months of inconsistent UTM naming

Before (chaos):

Email sources in GA4:

  • Newsletter: 12,400 sessions
  • newsletter: 8,900 sessions
  • NEWSLETTER: 3,200 sessions
  • Email: 4,100 sessions
  • email: 2,800 sessions
  • mail: 1,900 sessions
  • Mailchimp: 2,100 sessions
  • klaviyo: 1,800 sessions
  • Email Newsletter: 1,400 sessions

Total: 38,600 sessions fragmented across 9 different source names

Problem: Can't get accurate email performance without manually combining 9 rows in every report.

After (standardized):

Implemented naming rules:

  • All new campaigns: utm_source=newsletter&utm_medium=email
  • All lowercase
  • Hyphens instead of spaces
  • Consistent format

30 days after implementation:

Email sources in GA4:

  • newsletter: 3,800 sessions (new campaigns)
  • Legacy sources: 200 sessions (diminishing)

90 days after implementation:

  • newsletter: 11,200 sessions (nearly all traffic)
  • Legacy sources: <100 sessions (only from drip campaigns not yet updated)

Result: Clean, unified email reporting. One row instead of 9.

Validation Checklist for Every Campaign URL

Before launching any campaign, check:

✅ Format rules:

  • All lowercase (no capitals)
  • No spaces (use hyphens or underscores)
  • No special characters (&, ?, #, =, %, +, /)
  • No reserved keywords (null, undefined, test, none)

✅ Structure rules:

  • utm_source present and descriptive
  • utm_medium present and uses standard value
  • utm_campaign present (recommended)
  • All values under 50 characters
  • Consistent with naming standards document

✅ Testing:

  • Click URL in incognito browser
  • Check GA4 Realtime report
  • Verify source/medium show correctly
  • Confirm not showing as "(direct)"

FAQ

Can I use CamelCase (like utm_source=NewsLetter)?

Technically yes, but it fragments reporting. If you use NewsLetter, every instance must be exactly NewsLetter (not newsletter or NEWSLETTER). Lowercase is safer.

Should I use hyphens or underscores?

Either works. Pick one and be consistent. Most teams use hyphens because they're more web-standard and readable.

What if my brand name has capitals (like YouTube)?

You can use utm_source=YouTube if you're 100% consistent always using that exact capitalization. Otherwise, use youtube (lowercase) to avoid fragmentation.

Can I include the date in utm_source?

Not recommended. utm_source should be the origin (newsletter, facebook, partner-site), not the campaign timing. Use utm_campaign for dates: utm_campaign=spring-sale-2024.

Are emojis allowed in UTM parameters?

Technically yes (they get URL-encoded), but don't use them. They make URLs unreadable, break in some systems, and complicate reporting.

How long can UTM values be?

No hard limit, but GA4 truncates very long values in reports (around 100+ characters). Keep values under 50 characters for readability.

Conclusion

UTM source naming rules for GA4:

  1. Always lowercase (avoid capitalization)
  2. No spaces (use hyphens or underscores)
  3. No special characters (only letters, numbers, -, _)
  4. No reserved keywords (null, undefined, test, none)
  5. Be specific (not generic)
  6. Use standard medium values (email, social, cpc, referral)
  7. Keep it short (under 50 characters)
  8. Be consistent (use same names across all campaigns)

Template:

?utm_source=`{specific-origin}`
&utm_medium=`{standard-channel}`
&utm_campaign=`{descriptive-name}`

Follow these rules, and your GA4 attribution will be clean, accurate, and consistent forever.


Related: Complete UTM Naming Standards Documentation