How to Fix UTM ID Platform Click ID Issues (Step-by-Step)

UTMGuard Team
8 min readattribution

Rachel Kim discovered her GA4 cost reports showed $0 for $312,000 in quarterly ad spend. Sessions were tracked. Conversions recorded. But all campaign costs were missing.

The diagnosis took 20 minutes: Her campaigns used utm_id but lacked platform click IDs (gclid, fbclid). GA4 couldn't match sessions to ad platform costs without them.

The fix took 2 hours and restored complete ROI visibility for all future campaigns.

🚨 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

Diagnosing the Problem

Step 1: Confirm Cost Data Missing

GA4 → Reports → Acquisition → Traffic Acquisition

Add metric columns:

  • Advertiser ad cost
  • Advertiser ad clicks
  • Advertiser ad impressions

Look for this pattern:

SourceMediumSessionsCostDiagnosis
googlecpc45,223$0.00❌ Problem
facebookcpc23,112$0.00❌ Problem
linkedincpc8,445$0.00❌ Problem

If paid campaigns show $0 cost: Cost import is broken.

Step 2: Check Click ID Presence

GA4 → Explore → Create Free Form

Dimensions:

  • Session source
  • Session medium
  • Google Click ID (gclid)

Filter: Source = google, Medium = cpc

What to look for:

Source | Medium | Sessions | gclid     | Problem
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
google | cpc    | 45,223   | (not set) | ❌ Missing

If gclid shows (not set): Click IDs aren't being captured.

Step 3: Test Active Campaigns

Click test ad and inspect URL:

What you see:

https://site.com?utm_id=brand_search&utm_source=google&utm_medium=cpc&utm_campaign=brand

What you need:

https://site.com?gclid=CjwKCAiA...&utm_id=brand_search&utm_source=google&utm_medium=cpc

Missing: gclid parameter

😰 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

Complete Fix Process

Phase 1: Enable Platform Auto-Tagging

Enable auto-tagging:

  1. Google Ads → Settings → Account settings
  2. Find "Auto-tagging"
  3. Toggle to ON
  4. ✅ "Tag the URL that people click through from my ad"
  5. Save changes

Verify setup:

  • Create test campaign
  • Click test ad
  • URL should contain ?gclid=...

Important: Auto-tagging works with manual UTMs. Both coexist:

?gclid=abc123&utm_id=brand&utm_source=google&utm_medium=cpc

Facebook/Meta Ads

Facebook auto-enables fbclid by default.

Verify it's working:

  1. Click test Facebook ad
  2. Check URL contains ?fbclid=...
  3. If missing, check ad account settings:
    • Business Settings → Data Sources → Pixels
    • Ensure Facebook Pixel is active

Microsoft Ads

Enable UET auto-tagging:

  1. Microsoft Ads → Campaigns
  2. Settings → Tracking
  3. Enable Auto-tagging with UET tag
  4. Save

Verify:

  • Click test ad
  • URL should contain ?msclkid=...

LinkedIn Ads

Install LinkedIn Insight Tag:

  1. LinkedIn Campaign Manager → Account Assets → Insight Tag
  2. Copy tag code
  3. Install in site <head>
  4. Verify installation

Insight Tag adds li_fat_id automatically.

TikTok Ads

Auto-enabled by default (ttclid).

Verify:

  • Click test TikTok ad
  • URL contains ?ttclid=...

Phase 2: Update Active Campaigns

For each platform with active campaigns:

Keep auto-tagging ON, add utm_id:

  1. Go to campaign settings
  2. Campaign URL options → Final URL suffix
  3. Add (without overwriting gclid):
utm_id=`{"{"}{"{"}campaignid{"}"}{"}"}}`&utm_campaign=`{"{"}{"{"}campaign{"}"}{"}"}}`&utm_content=`{"{"}{"{"}adgroupid{"}"}{"}"}}`

Result URL:

https://site.com?gclid=abc...&utm_id=12345&utm_campaign=brand&utm_content=67890

Facebook Ads Campaigns

Update URL parameters:

  1. Ads Manager → Select campaign
  2. Edit ad creative
  3. Add URL parameters (Facebook auto-adds fbclid):
utm_id={"{"}{"{"}campaign.id{"}"}{"}"}}&utm_source=facebook&utm_medium=cpc&utm_campaign={"{"}{"{"}campaign.name{"}"}{"}"}}

Result URL:

https://site.com?fbclid=IwAR...&utm_id=23456&utm_source=facebook&utm_medium=cpc

LinkedIn Ads Campaigns

Update destination URLs:

  1. Campaign Manager → Campaigns → Ads
  2. Edit ad
  3. URL parameters:
utm_id={"{"}{"{"}campaign.id{"}"}{"}"}}&utm_source=linkedin&utm_medium=cpc&utm_campaign={"{"}{"{"}campaign.name{"}"}{"}"}}

Insight Tag adds li_fat_id automatically.

Phase 3: Configure GA4 Data Import

Even with click IDs working, you must link platforms:

  1. GA4 → Admin → Product Links → Google Ads links
  2. Click "Link"
  3. Choose Google Ads account
  4. Link configuration:
    • ✅ Enable personalized advertising
    • ✅ Import cost data
    • ✅ Import clicks and impressions
    • ✅ Enable auto-tagging override
  5. Save

Verify link:

  • Link status: Active ✅
  • Import enabled: Yes ✅
  1. GA4 → Admin → Product Links → Meta Ads links
  2. Click "Link"
  3. Authenticate with Meta Business Manager
  4. Select ad account
  5. Configure import:
    • ✅ Import cost data
    • ✅ Import clicks and impressions
  6. Save

Verify:

  • Connection status: Connected ✅
  • Import active: Yes ✅
  1. GA4 → Admin → Product Links
  2. Follow similar process for Microsoft Ads
  3. Enable cost data import

Phase 4: Validate Complete Setup

End-to-end validation checklist:

# Campaign: Google Ads Brand Search
 
Pre-launch checks:
- [x] Auto-tagging enabled in Google Ads
- [x] utm_id parameter added to Final URL suffix
- [x] Test ad clicked
- [x] Landing URL contains gclid ✅
- [x] Landing URL contains utm_id ✅
- [x] GA4 Realtime shows both parameters ✅
- [x] Google Ads linked to GA4 ✅
- [x] Cost import enabled ✅
 
Post-launch checks (after 48 hours):
- [ ] GA4 shows campaign cost data
- [ ] Cost matches Google Ads spend
- [ ] ROAS calculations working

Test for each platform (Google, Meta, Microsoft, etc.)

Phase 5: Fix Historical Data Gaps (Manual Import)

For campaigns that already ran without click IDs:

Historical data can't retroactively get click IDs, but you can manually import costs:

  1. GA4 → Admin → Data Import → Create data source
  2. Type: Offline event data or Cost data
  3. Download template CSV
  4. Fill with historical campaign costs:
Date,Campaign,Source,Medium,Cost,Clicks,Impressions
2024-10-01,brand_search,google,cpc,1234.56,890,12340
2024-10-02,brand_search,google,cpc,1456.78,921,13200
  1. Upload CSV to GA4
  2. Match on: Date + Campaign + Source + Medium

Limitations:

  • Manual process (not automatic)
  • Must repeat monthly
  • Less granular than click ID matching

Prevention: Maintain Click ID Health

1. Pre-Launch Campaign Checklist

Before launching ANY paid campaign:

## Click ID Validation
 
Platform: ___________
 
- [ ] Auto-tagging enabled on platform
- [ ] utm_id parameter configured
- [ ] Test ad clicked
- [ ] URL contains platform click ID
- [ ] URL contains utm_id
- [ ] Both captured in GA4 Realtime
- [ ] Platform linked to GA4
- [ ] Cost import enabled
- [ ] Documented in campaign tracking sheet

2. Monthly Click ID Audit

Check these monthly:

# Click ID Health Audit
 
## Google Ads
- [ ] Auto-tagging: ON
- [ ] gclid capture rate: >95%
- [ ] Cost import: Working
- [ ] Cost data delay: &lt;48 hours
 
## Meta Ads
- [ ] fbclid auto-appended: Yes
- [ ] fbclid capture rate: >95%
- [ ] Cost import: Working
 
## Microsoft Ads
- [ ] UET auto-tagging: ON
- [ ] msclkid capture rate: >95%

3. Alert on Cost Import Failures

GA4 custom alert:

Condition:

  • Metric: Advertiser ad cost
  • Condition: Decreases more than 80%
  • Comparison: Previous day

Action: Email marketing team

Why: Catches auto-tagging failures or link breaks immediately.

4. Redirect Testing

Ensure redirects preserve click IDs:

Test script:

# Test if gclid preserved through redirect
curl -I "https://site.com?gclid=test123" | grep -i location
 
# Expected: Location header contains gclid=test123
# If not: Redirect strips parameters (fix needed)

Common redirect fixes:

Apache .htaccess:

# Preserve query parameters through redirect
RewriteCond %{"{"}{"{"}QUERY_STRING{"}"}{"}"}} .
RewriteRule ^old-page$ /new-page?%{"{"}{"{"}QUERY_STRING{"}"}{"}"}} [R=301,L]

Nginx:

# Preserve query string
rewrite ^/old-page$ /new-page permanent;

5. Documentation

Maintain platform-specific docs:

# Click ID Requirements by Platform
 
| Platform | Click ID | Parameter | Auto-Tagging Setting |
|----------|----------|-----------|---------------------|
| Google Ads | gclid | ?gclid=... | Account Settings → Auto-tagging |
| Meta Ads | fbclid | ?fbclid=... | Auto-enabled (verify in test) |
| Microsoft Ads | msclkid | ?msclkid=... | Settings → UET Auto-tagging |
| LinkedIn Ads | li_fat_id | ?li_fat_id=... | Insight Tag installation |
| TikTok Ads | ttclid | ?ttclid=... | Auto-enabled |
| Twitter Ads | twclid | ?twclid=... | Auto-enabled |

✅ 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

FAQ

Do I need to add utm_id manually if I have gclid?

For basic tracking: No. gclid alone provides cost import.

For advanced cases: Yes.

  • Campaign grouping across platforms
  • Custom cost reporting
  • Multi-campaign aggregation

What if I can't enable auto-tagging?

You can't get automatic cost import without platform click IDs.

Alternative: Manual cost data upload via GA4 Data Import (tedious).

Can I add gclid manually instead of auto-tagging?

No. gclid values are unique per click, generated by Google. You can't create valid gclid values manually.

Must use: Auto-tagging to get real gclid values.

How long until cost data appears after enabling?

Typical timeline:

  • Enable auto-tagging: Immediate effect on new clicks
  • Link GA4 to platform: Immediate
  • Cost data import: 24-48 hours
  • First data in reports: 48-72 hours total

What if cost shows in Google Ads but not GA4?

Check:

  1. GA4-Google Ads link active
  2. Cost import enabled in link settings
  3. Auto-tagging enabled (gclid present)
  4. Wait full 48 hours

If still missing: Re-link accounts.

Can I use utm_id to track offline campaigns?

Yes, but it won't auto-import costs.

For offline (QR codes, print ads):

  • Use utm_id for campaign identification
  • Manually upload costs via GA4 Data Import
  • Match on utm_id or campaign name

Related: UTM ID Without Platform Rule