How to Fix Campaign Details in UTM Source (Quick 5-Min Guide)
Stop fragmenting your GA4 data by putting campaign names in utm_source. Here's the exact fix to consolidate your traffic data and restore accurate reporting.
You're staring at your GA4 Traffic Acquisition report. Instead of seeing "Facebook" with 12,000 sessions, you see this nightmare:
- facebook_spring_sale: 847 sessions
- facebook_summer_promo: 623 sessions
- facebook_black_friday: 1,243 sessions
- facebook_january_2024: 512 sessions
- facebook_new_product: 389 sessions
- ... 27 more rows ...
Your Facebook traffic is shattered across 32 different rows. You can't see total performance. You can't compare platforms. You can't make budget decisions because your data is fragmented beyond recognition.
The problem? Someone put campaign names in utm_source instead of utm_campaign. Here's how to fix it in 5 minutes and prevent it from ever happening again.
Table of contents
- Quick Diagnosis: Do You Have This Problem?
- The 5-Minute Fix (Step-by-Step)
- Step 1: Identify All Problematic utmsource Values (2 min)
- Step 2: Create Source-to-Platform Mapping (1 min)
- Step 3: Update All Active Campaigns (2 min)
- Step 4: Verify in GA4 (24-48 hours)
- Prevention: Never Fragment utmsource Again
- Rule 1: utmsource = Platform Name Only
- Rule 2: Campaign Details Go in utmcampaign
- Rule 3: Use utmcontent for Creative Variations
- Rule 4: Document Your UTM Structure
- Rule 5: Validate Before Launch
- Real Example: $47,000 Budget Recovery
- What About Historical Data?
- Option 1: Manual Consolidation in Reports
- Option 2: GA4 Custom Dimensions (for future)
- Option 3: Accept and Move Forward
- Common Questions
- What if I need to track different Facebook account IDs?
- Can I use hyphens or underscores in utmsource?
- Will fixing utmsource affect my Google Ads auto-tagging?
- How do I fix utmsource in bulk across hundreds of links?
- FAQ
- Will this fix affect my ad platform reporting?
- How long until I see consolidated data in GA4?
- What if I have different teams managing different campaigns?
- Can I use utmsource to differentiate paid vs organic traffic?
- What's the difference between utmsource and utmcampaign?
- Should I delete old campaigns with wrong utmsource values?
🚨 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
Quick Diagnosis: Do You Have This Problem?
3-minute test:
- GA4 � Reports � Traffic acquisition
- Click on a paid traffic source (like Facebook, LinkedIn, Google)
- Count the rows for that platform
Results:
- 1-3 rows: You're good (maybe seasonal variations)
- 5-10 rows: Minor issuereview UTM naming
- 10+ rows: Critical problemcampaign details in utm_source
Example of the problem:
Instead of this (CORRECT):
utm_source=facebook
utm_campaign=spring_sale
You have this (WRONG):
utm_source=facebook_spring_sale
utm_campaign=promo
The 5-Minute Fix (Step-by-Step)
Step 1: Identify All Problematic utm_source Values (2 min)
- GA4 � Explore � Free Form
- Add dimensions:
- Session source
- Session medium
- Session campaign
- Add metric: Sessions
- Filter: Session medium contains "cpc" or "social" or "email"
- Export to CSV
Look for patterns like:
facebook_[campaign_name]linkedin_[date]email_[newsletter_type]google_[product_name]
These are all wrong. The campaign details belong in utm_campaign, not utm_source.
Step 2: Create Source-to-Platform Mapping (1 min)
For each fragmented source, identify the actual platform:
| Current utm_source | Correct Platform | Move to utm_campaign |
|---|---|---|
| facebook_spring_sale | spring_sale | |
| facebook_summer_promo | summer_promo | |
| linkedin_jan_2024 | jan_2024 | |
| email_newsletter_weekly | newsletter_weekly | |
| google_product_launch | product_launch |
Rule: utm_source = WHERE the traffic came from (platform)
Step 3: Update All Active Campaigns (2 min)
For each active campaign link, restructure the UTM parameters:
Before (wrong):
utm_source=facebook_spring_sale&utm_medium=cpc&utm_campaign=promo
After (correct):
utm_source=facebook&utm_medium=cpc&utm_campaign=spring_sale
Where to update:
- Ad platforms: Edit destination URLs in active ads
- Email templates: Update link templates in your ESP
- Social schedulers: Modify link presets (Buffer, Hootsuite, etc.)
- URL builders: Fix your team's UTM generator template
- Documentation: Update campaign brief templates
Step 4: Verify in GA4 (24-48 hours)
After updating links:
- Wait 24-48 hours for new data to flow in
- GA4 � Traffic acquisition
- Check your main platforms (facebook, linkedin, google, etc.)
- Verify:
- Old fragmented rows (facebook_spring_sale) stop growing
- New consolidated row (facebook) accumulates all new traffic
- Total sessions = sum of all old rows + new consolidated row
Prevention: Never Fragment utm_source Again
Rule 1: utm_source = Platform Name Only
Always use the bare platform name:
-
facebook(not facebook_ads, facebook_campaign, facebook_2024) -
linkedin(not linkedin_sponsored, linkedin_jan) -
google(not google_ads, google_search, google_brand) -
email(not email_newsletter, email_promo) -
twitter(not twitter_ads, twitter_organic)
utm_source answers: "Which platform sent this traffic?"
Rule 2: Campaign Details Go in utm_campaign
All campaign-specific information goes here:
- Campaign name
- Promotion name
- Product name
- Time period
- Audience segment
Examples:
utm_campaign=spring_sale_2024
utm_campaign=product_launch_beta_users
utm_campaign=black_friday_returning_customers
utm_campaign=newsletter_weekly_edition_45
Rule 3: Use utm_content for Creative Variations
If you need even more specificity (like testing different ad creatives):
utm_source=facebook
utm_medium=cpc
utm_campaign=spring_sale
utm_content=video_ad_30sec
Or:
utm_source=facebook
utm_medium=cpc
utm_campaign=spring_sale
utm_content=carousel_products
Never put this in utm_source.
Rule 4: Document Your UTM Structure
Create a one-page reference guide:
UTM PARAMETER GUIDE
utm_source: Platform name only
facebook, linkedin, google, email, twitter
L facebook_ads, linkedin_jan_2024, email_newsletter
utm_medium: Marketing channel type
cpc, email, social, display, affiliate
L paid-social, facebook, newsletter
utm_campaign: Campaign/promo/product name
spring_sale, product_launch, newsletter_weekly
L facebook (this is source, not campaign)
utm_content: Creative/audience variation (optional)
video_30sec, carousel, audience_segment_A
Rule 5: Validate Before Launch
Before any campaign goes live:
- Build test URL with your UTM parameters
- Click the test link
- Check GA4 Realtime (1-2 minutes later)
- Verify:
- Source = platform name only (no campaign details)
- Campaign = campaign/promo name
- No underscore-separated values in source
This 2-minute check prevents weeks of fragmented data.
😰 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
Real Example: $47,000 Budget Recovery
Client: E-commerce company Problem: Facebook traffic fragmented across 47 different utm_source rows
Before fix:
- facebook_summer_sale: 1,240 sessions
- facebook_back_to_school: 890 sessions
- facebook_holiday_promo: 2,103 sessions
- facebook_clearance: 567 sessions
- ... 43 more rows ...
Total Facebook sessions: 18,920 (impossible to see without manual sum)
Impact:
- Couldn't compare Facebook vs Google performance
- No idea which Facebook campaigns worked
- Nearly cut Facebook budget based on incomplete data
Fix: Changed all active Facebook ads from:
utm_source=facebook_[campaign_name]
utm_campaign=promo
To:
utm_source=facebook
utm_campaign=[campaign_name]
After fix (30 days later):
- facebook: 23,405 sessions (all campaigns consolidated)
- Easy to compare: Facebook (23,405) vs Google (18,230) vs LinkedIn (4,890)
- Can drill down into campaigns with secondary dimension
Result: Discovered Facebook actually had 28% higher conversion rate than Google. Shifted $12,000/month from Google to Facebook. Increased total conversions by 34% without increasing budget.
What About Historical Data?
Bad news: You can't retroactively fix historical data in GA4.
Once data is collected with fragmented utm_source values, those rows are permanent.
Workarounds:
Option 1: Manual Consolidation in Reports
When analyzing past data:
- Export to Google Sheets or Excel
- Create a mapping column that strips campaign details from source
- Pivot/summarize by cleaned source name
Example in Google Sheets:
Column A: Original Source
Column B: =IF(REGEXMATCH(A2,"facebook"), "facebook", A2)
Column C: Sessions
Then pivot on Column B to see consolidated totals.
Option 2: GA4 Custom Dimensions (for future)
Create a calculated field that extracts platform name:
- GA4 � Configure � Custom definitions
- Create custom dimension: "Clean Source"
- Use regex to extract platform name from Session source
This gives you a clean dimension going forward, but doesn't fix historical data.
Option 3: Accept and Move Forward
Most teams choose this:
- Historical data stays fragmented (use manual consolidation for big analyses)
- All new data flows correctly after the fix
- Set a cutoff date in your analysis to only use clean data
Example: "Analyzing data from February 2024 onward (after UTM fix)"
Common Questions
What if I need to track different Facebook account IDs?
Use utm_content or create a systematic naming:
Option 1 (recommended):
utm_source=facebook
utm_campaign=spring_sale
utm_content=account_id_123456
Option 2:
utm_source=facebook_business
utm_source=facebook_personal
Just don't do: utm_source=facebook_spring_sale_account_123
Can I use hyphens or underscores in utm_source?
Yes, but only if needed for multiple accounts/channels from same platform:
Acceptable:
utm_source=facebook-organic (vs facebook-paid)
utm_source=email_transactional (vs email_promotional)
L Not acceptable:
utm_source=facebook-spring-sale (campaign details)
utm_source=email_newsletter_jan_2024 (campaign + date)
Will fixing utm_source affect my Google Ads auto-tagging?
No. Google Ads auto-tagging uses gclid parameter, which overrides manual UTM parameters. Your manual utm_source fix won't conflict with auto-tagging.
How do I fix utm_source in bulk across hundreds of links?
For future campaigns:
- Update your URL builder template
- Update ad platform templates
- Update email platform templates
For existing links in the wild:
- You can't edit URLs that have already been shared (emails sent, social posts published, etc.)
- Focus on updating active campaigns (current ads, upcoming emails)
- Accept that historical data will remain fragmented
✅ 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
Will this fix affect my ad platform reporting?
No. Your ad platforms (Facebook Ads, Google Ads, LinkedIn Campaign Manager) track performance independently using their own click IDs and tracking pixels. Fixing utm_source only affects how traffic appears in GA4it won't change ad platform metrics or costs.
How long until I see consolidated data in GA4?
New traffic with corrected UTM parameters will appear in GA4 within 24-48 hours. However, you won't see fully consolidated reporting until old campaigns (with bad utm_source values) stop running. Pause old campaigns or let them expire naturally.
What if I have different teams managing different campaigns?
Create a shared UTM naming guide and require all teams to follow it. Store approved utm_source values in a shared document (Google Sheet, Confluence, Notion) that everyone references. Consider using a centralized URL builder tool that enforces correct formats.
Can I use utm_source to differentiate paid vs organic traffic?
No. Use utm_medium for this:
- Paid traffic:
utm_medium=cpcorutm_medium=paidsocial - Organic traffic: No UTM parameters (GA4 will auto-detect as organic)
Never use utm_source=facebook_paid vs utm_source=facebook_organic.
What's the difference between utm_source and utm_campaign?
utm_source: WHERE the traffic came from (platform/site)
- Examples: facebook, google, newsletter, partner_site
utm_campaign: WHY you're running this link (promotion/goal)
- Examples: spring_sale, product_launch, back_to_school
Simple rule: If you launched this same campaign on a different platform, would this value change? If yes � it's campaign, not source.
Should I delete old campaigns with wrong utm_source values?
If they're still active and generating traffic, yespause them and launch new campaigns with corrected UTM parameters. If they're historical/completed campaigns, leave them. You can't change historical data, and pausing completed campaigns won't improve reporting.