Launch Offer2 free audits with all 229 checks. No credit card required.Start free audit

Auto-Tagging Conflicts: Google Ads vs Microsoft Ads vs Meta in GA4 (2026)

Intermediate

Why is my paid traffic showing as Direct?

Paid clicks land in Direct in GA4 when the click ID (gclid, msclkid, or fbclid) gets stripped between the ad click and the page load. The four most common causes: (1) intermediate redirects that don't preserve query parameters (link shorteners, email tracking, some affiliate platforms), (2) payment gateway redirects (Stripe, PayPal, Klarna) returning users without the original click ID, (3) manual UTMs added on top of auto-tagging which can override the click ID, and (4) browser-level click ID stripping in privacy-focused browsers.

The fix: audit your redirect chains and ensure every redirect preserves query parameters.

How auto-tagging works on each platform

Google Ads — gclid (and gbraid/wbraid)

When auto-tagging is enabled in Google Ads (default for new accounts), Google appends gclid=XXXX to the destination URL of every ad click. Google's GA4 ↔ Ads link uses this gclid to:

  • Match the ad click to the resulting GA4 session
  • Import Google Ads cost data into GA4
  • Attribute conversions back to Google Ads campaigns

Privacy variants: gbraid for iOS app campaigns where ATT is denied, wbraid for iOS web campaigns. Both behave like gclid for attribution but provide privacy-preserving aggregated data instead of user-level granularity.

Microsoft Ads — msclkid

Microsoft Ads uses msclkid as its equivalent click ID. Auto-tagging is opt-in (not default) — must be enabled in Microsoft Ads account settings. Once enabled, msclkid forces a session into Paid Search classification regardless of explicit UTMs.

Meta Ads — fbclid

Meta uses fbclid for Facebook and Instagram ad clicks. Different mechanism: fbclid doesn't change GA4 channel classification (you still need explicit utm_medium=paid_social), but it enables Meta's Conversions API for first-party data passing back to Meta.

TikTok Ads — ttclid

TikTok's click ID. Like fbclid, doesn't change GA4 channel classification — needs explicit UTMs alongside.

LinkedIn Ads — li_fat_id

LinkedIn's first-party identifier for ad clicks, used for conversion API. Doesn't change GA4 attribution; needs explicit UTMs.

The core distinction: gclid and msclkid forcefully classify the channel; fbclid, ttclid, li_fat_id are first-party data passes that complement explicit UTMs without overriding them.

How click IDs get stripped

Six common breakage patterns:

1. Email platform link tracking

Mailchimp, HubSpot, Marketo, Klaviyo wrap outbound URLs in their tracking domains (click.email.example.com/track?u=...&dest=...). When the user clicks, they redirect through the platform before landing on your site. If the redirect doesn't preserve the original query parameters (gclid, fbclid), they're lost.

Fix: Configure email platforms to append-rather-than-replace query parameters. Most modern platforms support this — check the link tracking settings.

2. Link shorteners

bit.ly, ow.ly, t.co (Twitter's), and custom shorteners often strip query parameters from the destination URL. The shortened URL stores only the destination path, not the parameters.

Fix: Use shorteners that preserve query parameters (Bitly Pro supports this; free tier doesn't). Or never shorten URLs that contain click IDs — share the full URL.

3. Affiliate networks

Some affiliate networks (especially older ones — CJ, Rakuten LinkShare, Awin) redirect through their tracking domain to attribute the affiliate. Click IDs get stripped in the redirect.

Want to see whether attribution loss is already distorting your channel data?

Fix: Configure deep-link or first-party tracking on the affiliate network. Most modern affiliate networks now support this; older configurations may need manual update.

4. Payment gateway returns

Stripe, PayPal, Klarna, Afterpay, Affirm — when the user completes payment off-domain and is redirected back, the return URL typically doesn't carry the original gclid. The post-payment session is a new session attributed to the payment provider as referral.

Fix: Either pass the click ID through the payment flow as metadata (if your gateway supports it), or use server-side conversion tracking (Google Ads' offline conversion import) so the conversion attribution doesn't depend on the post-payment session being correctly attributed.

5. Single-page app navigation

In a SPA (React, Vue, Angular), client-side navigation can drop the click ID after the initial page load. The first page view captures it; subsequent in-app navigations may not. If the conversion event fires after several SPA navigations, the click ID is gone.

Fix: Ensure your GA4 implementation captures the click ID at first page load and stores it in a session variable, then includes it in conversion event parameters. GTM has a Cookie-based click ID variable that handles this pattern.

6. CDN or WAF stripping

Some CDN and WAF configurations strip query parameters from URL patterns they consider non-essential. CloudFlare, Akamai, and AWS WAF can be configured to do this.

Fix: Audit your CDN/WAF rules. Whitelist gclid, msclkid, fbclid, ttclid as protected parameters that should always pass through.

The conflicts between auto-tagging and manual UTMs

Adding manual UTMs alongside auto-tagged click IDs creates conflicts:

Google Ads conflict: With auto-tagging on, manually added UTMs override the auto-tagged source/medium classification. The session shows as medium=cpc from your manual UTMs, but the gclid linkage to Google Ads cost data may break — leaving you with sessions but no cost data.

The rule: With auto-tagging enabled, never add manual UTMs to Google Ads destinations. Auto-tagging handles everything. If you need to track creative variants, use the campaign URL options to add custom parameters that don't conflict with UTMs.

Microsoft Ads: Same pattern — never add manual UTMs alongside msclkid auto-tagging.

Meta Ads: Different — fbclid doesn't override UTMs, so manual UTMs and fbclid can coexist. You need both: UTMs for GA4 channel classification, fbclid for Meta's Conversions API.

Multi-domain auto-tagging considerations

For sites spanning multiple domains (main site + checkout subdomain + blog on different TLD), auto-tagging needs cross-domain configuration in GA4:

  • Configure cross-domain tracking in GA4 Admin → Data Streams → Web → Configure tag settings → Configure your domains
  • Add all relevant domains that should be treated as the same property
  • Verify with the linker parameter_gl parameter should appear in URLs crossing domains
  • Test the click ID survives — click an ad, complete the cross-domain journey, check if gclid persists

Without proper cross-domain configuration, the click ID is captured on the first domain but lost when the user navigates to your secondary domain. The conversion attributes to the wrong channel.

How to audit click ID preservation

Three-step audit:

1. Pick a representative paid campaign. Click the ad yourself in incognito.

2. Open DevTools Network tab. Watch the URL through the journey.

  • Initial page load: gclid present?
  • Cross-domain navigation (if applicable): gclid persists via _gl parameter?
  • Any redirect chain: gclid present after every redirect?
  • Conversion page: gclid present in the URL or session storage?

3. Verify the GA4 session is attributed correctly. Check Realtime → Source/Medium for your click. Should show google / cpc (Google Ads) or bing / cpc (Microsoft Ads), not Direct.

If the click ID drops at any step, that's where attribution breaks. Fix the redirect at that point.

FAQ: Auto-Tagging Conflicts: Google Ads vs Microsoft Ads vs Meta in GA4

How close should auto-tagging conflicts: google ads vs microsoft ads vs meta in ga4 numbers be before I worry?

It depends on attribution scope, identity settings, and the systems being compared. The right question is not “Do they match perfectly?” but “Is the remaining gap explained, expected, and acceptable for the decision being made?”

What should I validate first when auto-tagging conflicts: google ads vs microsoft ads vs meta in ga4 numbers disagree?

Start with date range, attribution model, conversion/key-event definition, reporting identity, and cross-domain or consent effects. Those five variables explain most “mystery” mismatches.

When is a discrepancy a tracking bug instead of a reporting difference?

It becomes a tracking problem when the gap is unexplained after scope alignment, or when one source is clearly missing sessions, events, revenue, or campaign context that should be present.

Check Auto-Tagging Conflicts: Google Ads vs Microsoft Ads vs Meta in GA4 before campaign reporting gets blamed for the wrong issue

Run a free GA4 audit to spot attribution breaks, UTM governance issues, self-referrals, and source/medium loss fast.

These findings come from auditing thousands of GA4 properties. See how your property compares

GA4 Audits Team

GA4 Audits Team

Analytics Engineering

Specialising in GA4 architecture, consent mode implementation, and multi-layer audit frameworks.

Share