Why Aren't My UTM Parameters Working in Google Analytics?

UTMGuard Team
7 min readtroubleshooting

You've spent hours setting up your UTM parameters. The URL builder shows them correctly. You copy-paste them into your Facebook ads. Everything looks perfect.

But when you check Google Analytics 4... nothing.

Zero campaign data. Your $5,000 Facebook campaign shows up as "Direct" traffic. Your marketing attribution is completely broken.

Sound familiar?

You're not alone. This happens to 1 in 4 marketing campaigns, and the reason is almost always the same simple mistake.

🚨 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

The Problem: Your UTMs Vanish Into Thin Air

Here's what's happening:

  1. You build your UTM URL: yoursite.com?utm_source=facebook&utm_campaign=summer-sale
  2. Everything looks correct in the Campaign URL Builder
  3. You launch your campaign
  4. Traffic arrives at your site
  5. You check GA4... and the campaign is invisible

The traffic shows up—you see visitors in Real-Time reports. But GA4 attributes them to "Direct" traffic, not your Facebook campaign.

Your attribution is completely broken. You can't measure ROI. You don't know which campaigns work. Your boss is asking questions you can't answer.

The Technical Reason (In Plain English)

Most of the time, this happens because of URL structure mistakes.

The most common culprit? Anchor links (the # symbol) appearing before your UTM parameters.

Here's what I mean:

❌ WRONG:  yoursite.com#special-offer?utm_source=facebook
✅ RIGHT:  yoursite.com?utm_source=facebook#special-offer

See the difference?

When the # comes before the ?, browsers do something sneaky: they don't send anything after the # to your server.

So Google Analytics receives this:

yoursite.com#special-offer

All your beautiful UTM parameters? Gone. Never sent. Invisible to GA4.

😰 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

The 5-Minute Fix

Step 1: Check Your Campaign URLs

Go to wherever you store your campaign URLs:

  • Ad platforms (Facebook Ads Manager, Google Ads)
  • Email marketing tool (Mailchimp, Klaviyo, etc.)
  • Social media schedulers (Buffer, Hootsuite)
  • QR code generators

Look for any URL that has # before ?.

Step 2: Fix the Structure

The correct URL structure is:

https://domain.com/path?utm_parameters#anchor

Example:
https://shop.com/products?utm_source=facebook&utm_medium=cpc#featured-items

NOT:

https://domain.com/path#anchor?utm_parameters

Wrong:
https://shop.com/products#featured-items?utm_source=facebook&utm_medium=cpc

Remember: Question mark ? always comes before hash #.

Step 3: Update All Your Campaigns

  • Active ads: Update URLs immediately
  • Email templates: Fix for future sends
  • Social posts: Edit scheduled posts
  • QR codes: Regenerate if printed

Step 4: Verify It's Working

  1. Open Google Analytics 4
  2. Go to Reports → Acquisition → Traffic acquisition
  3. Visit your corrected URL in an incognito browser
  4. Check Real-Time reports (⚡️ icon in left menu)
  5. Verify your campaign appears with correct Source/Medium

If you see your campaign name, congratulations! You've fixed it.

Other Common Reasons UTMs Don't Work

The fragment-before-query issue is the most common, but there are other culprits:

1. Missing the Question Mark Entirely

❌ yoursite.com utm_source=facebook
✅ yoursite.com?utm_source=facebook

2. UTM Parameters in the URL Path

❌ yoursite.com/utm_source/facebook/utm_medium/cpc
✅ yoursite.com?utm_source=facebook&utm_medium=cpc

3. Uppercase utm_medium

GA4 is case-sensitive. utm_medium=CPC won't match GA4's channel grouping patterns. Always use lowercase.

If you add UTMs to internal navigation, you overwrite the original traffic source. Never use UTMs on same-domain links.

Preventing This Forever

The best way to avoid UTM tracking issues? Use a validation tool.

Manual UTM building is error-prone. You're juggling 5 UTM parameters, URL encoding rules, GA4 channel grouping patterns, and 40+ ways tracking can break.

Even experienced marketers make mistakes. That's why we built UTMGuard.

UTMGuard automatically:

  1. Connects to your GA4 account (read-only)
  2. Scans 90 days of traffic data
  3. Identifies all 40+ types of UTM errors
  4. Shows exact sessions affected
  5. Prioritizes fixes by revenue impact
  6. Gives you step-by-step fix instructions

✅ 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

Frequently Asked Questions

Will fixing this affect my historical data?

No. Historical data with tracking errors will remain attributed incorrectly (usually as "Direct" traffic). Fixing the issue only corrects future tracking.

Can I test if my fix worked?

Yes! Use GA4's Real-Time reports:

  1. Visit your corrected URL in an incognito browser
  2. Open GA4 → Real-Time
  3. Check if your session appears with correct Source/Medium
  4. If it shows up correctly, your fix worked!

How long until I see results?

Immediately. GA4 Real-Time reports update within 60 seconds. Standard reports update within 24-48 hours.

Should I stop all my campaigns to fix this?

No! Just update the URLs. Active campaigns will start tracking correctly once you update the URLs—no need to stop and restart.

Conclusion

UTM parameters not working in Google Analytics? The most common cause is the # symbol appearing before the ? in your URLs.

The fix is simple:

  1. Ensure question marks ? come before hashes #
  2. Correct structure: domain.com?utm_params#anchor
  3. Test in GA4 Real-Time reports
  4. Update all active campaigns

But here's the thing: this is just one of 40+ ways UTM tracking breaks.


Technical Reference: Fragment Before Query Validation Rule