Missing Question Mark: Why Your UTMs Aren't Working
You copy your UTM parameters from a spreadsheet. You paste them into your Facebook ad. You launch the campaign.
Two days later: zero campaign data in GA4.
You check the URL. Everything looks right... except for one tiny detail.
There's no question mark before your UTM parameters.
🚨 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: GA4 Doesn't See Your UTMs
What You Built
https://shop.com/products&utm_source=facebook&utm_medium=cpc&utm_campaign=spring2024
↑
Missing ?
What GA4 Receives
Path: /products&utm_source=facebook&utm_medium=cpc&utm_campaign=spring2024
Query string: (empty)
UTM parameters: None detected
GA4 sees your UTM parameters as part of the URL path, not as query parameters.
Result: All traffic shows as "Direct" with no campaign attribution.
Why This Happens: URL Structure Rules
URLs have a specific structure defined in RFC 3986:
https://domain.com/path?query#fragment
↑
Question mark starts query string
The question mark is mandatory. It tells browsers: "Everything after this is a query string, not part of the path."
Without the Question Mark
https://shop.com/products&utm_source=facebook
Browser interprets as:
Path: /products&utm_source=facebook
Query string: None
The & ampersand becomes part of the path, not a parameter separator.
With the Question Mark
https://shop.com/products?utm_source=facebook
Browser interprets as:
Path: /products
Query string: utm_source=facebook
Now GA4 can extract the UTM parameters correctly.
😰 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
How This Mistake Happens
Scenario 1: Copy-Paste from Spreadsheet
Spreadsheet cell contains:
utm_source=facebook&utm_medium=cpc&utm_campaign=spring
You paste after domain:
shop.com/products utm_source=facebook&utm_medium=cpc&utm_campaign=spring
Missing: The ? separator
Scenario 2: URL Builder Confusion
URL builder outputs:
utm_source=facebook&utm_medium=cpc
You manually add:
shop.com/products + utm_source=facebook&utm_medium=cpc
Forgot: The ? before UTM parameters
Scenario 3: Automation Script Error
// ❌ WRONG - Missing ? separator
const url = `${"{"}{"{"}baseUrl{"}"}{"}"}}&${"{"}{"{"}utmParams{"}"}{"}"}}`;
// ✅ CORRECT
const url = `${"{"}{"{"}baseUrl{"}"}{"}"}}?${"{"}{"{"}utmParams{"}"}{"}"}}`;Scenario 4: Email Marketing Tool
Some email tools expect you to add the ? manually:
Template: {"{"}{"{"}website_url{"}"}{"}"}}{"{"}{"{"}utm_parameters{"}"}{"}"}}
You set:
website_url = https://shop.com/products
utm_parameters = utm_source=email&utm_campaign=weekly
Result: https://shop.com/products utm_source=email&utm_campaign=weekly
Missing ?
The Instant Fix
Step 1: Add the Question Mark (10 seconds)
Change this:
https://shop.com/products&utm_source=facebook&utm_campaign=spring
To this:
https://shop.com/products?utm_source=facebook&utm_campaign=spring
↑
Added ?
Step 2: Update Active Campaigns (2 minutes)
Replace broken URLs in:
- Social media posts
- Email campaigns
- Paid ads
- Anywhere you shared the link
Step 3: Verify (30 seconds)
- Visit corrected URL in incognito browser
- Open GA4 → Real-Time reports
- Check campaign appears with correct attribution
Done? Tracking restored.
Real Example: $8,000 Facebook Campaign Lost
Company: E-commerce supplement brand Campaign: Facebook carousel ads Budget: $8,000 over 2 weeks
URL used:
https://supplements.com/products&utm_source=facebook&utm_medium=cpc&utm_campaign=immune-boost
What happened:
- 15,000 clicks from Facebook
- GA4 showed 15,000 "Direct" sessions
- Zero attribution to Facebook
- Team thought Facebook wasn't working
- Almost killed the campaign
Investigation revealed:
- URL missing
?before UTM parameters - GA4 treating UTMs as part of path
- Server returned 404 errors (path doesn't exist)
- Users landing on custom 404 page
Fixed URL:
https://supplements.com/products?utm_source=facebook&utm_medium=cpc&utm_campaign=immune-boost
↑
Added ?
Results:
- Tracking restored immediately
- Remaining 10 days tracked correctly
- Campaign actually had 4.2x ROAS
- Increased budget based on real data
Cost of mistake: 4 days of lost attribution + nearly killing a profitable campaign.
How to Detect This Error
Visual Inspection
Look at your campaign URL. Does it have a ? before the first UTM parameter?
✅ CORRECT:
shop.com/page?utm_source=x
❌ WRONG:
shop.com/page&utm_source=x
shop.com/page utm_source=x
shop.com/pageutm_source=x
Browser Test
Visit your URL and check the browser address bar:
If browser shows:
shop.com/products&utm_source=facebook
The server might interpret this as a folder path, not query parameters.
GA4 Real-Time Test
- Visit your campaign URL
- Open GA4 → Real-Time
- Check if your session appears with campaign attribution
If it shows as "Direct" → you have a problem.
Server Log Check
Check your server logs:
✅ CORRECT (200 OK):
GET /products?utm_source=facebook HTTP/1.1 200
❌ WRONG (404 or weird path):
GET /products&utm_source=facebook HTTP/1.1 404
Common Variations of This Error
Variation 1: Ampersand Instead of Question Mark
❌ shop.com/page&utm_source=x
✅ shop.com/page?utm_source=x
Variation 2: Space Instead of Question Mark
❌ shop.com/page utm_source=x
✅ shop.com/page?utm_source=x
Variation 3: No Separator At All
❌ shop.com/pageutm_source=x
✅ shop.com/page?utm_source=x
Variation 4: Double Question Marks
❌ shop.com/page??utm_source=x
✅ shop.com/page?utm_source=x
✅ 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
Join 2,847 marketers fixing their tracking daily
FAQ
What if my URL already has query parameters?
Use & to add additional parameters:
✅ shop.com/page?existing=value&utm_source=facebook
Can I use & without a ??
No. The first parameter MUST start with ?. Additional parameters use &.
Do all browsers require the question mark?
Yes. The ? is defined in RFC 3986 and all browsers follow this standard.
What if my CMS or URL builder adds the ? automatically?
Test it! Paste the final URL in incognito mode and check if GA4 receives the UTM parameters.
Will fixing this affect historical data?
No. Historical data remains unattributed. The fix only applies to future traffic.
How do I prevent this mistake?
Use automated URL builders with validation, or create templates that include the ? by default.
Conclusion
Missing question mark before UTM parameters? GA4 treats them as part of the URL path, not query parameters.
The fix:
- Add
?before the first UTM parameter - Use
&to separate subsequent parameters - Structure:
domain.com/path?utm_source=x&utm_medium=y - Test in GA4 Real-Time
This single character makes the difference between perfect attribution and zero tracking.
Technical Reference: Missing Query Separator Validation Rule