Why it happens
Wrong report or scope
Wrong report or scope
User acquisition shows first user source, not the session. A returning visitor from your new campaign shows under the old source there.
gclid overrides UTMs on Google clicks
With auto-tagging on, GA4 takes campaign data for Google Ads clicks from gclid, not from your utm_campaign.
utm_medium does not match a channel rule
GA4 builds the Default Channel Group from utm_source and utm_medium. A medium like "paid-social" or "Paid" that no rule matches lands in Unassigned.
The tag reads a cleaned URL
A redirect or a client-side route change removed the UTMs before the first page_view fired.
Data still processing
Standard reports can take 24 to 48 hours. Realtime shows the visit sooner.
How to line them up, step by step
Open Traffic acquisition
In GA4 go to Reports, then Acquisition, then Traffic acquisition, and switch the primary dimension to Session source / medium or Session campaign.
Watch one tagged visit live
Open Admin, then DebugView, load a tagged URL with the Google tag debugger on, and check page_location on the first page_view includes your UTMs.
Use standard medium values
Use cpc, paid_social, email and similar values GA4 recognizes. Check your channel groups under Admin, then Data display, then Channel groups.
Check the Google Ads link
Under Admin, then Product links, then Google Ads links, confirm the link is active. Google Ads clicks get their campaign from gclid through it.
Steps checked against Google Analytics Help: Collect campaign data with custom URLs; Google Analytics Help: Default channel group; Google Analytics Help: Traffic acquisition report.
Sprites diagnoses this
Sprites diagnoses it
Sprites reads your GA4 property and its traffic so you see which campaigns land unattributed.
What Sprites does
- Reads the GA4 property setup: key events, linked Google Ads accounts and data streams, and names anything missing.
- Breaks sessions down by channel, source and medium and by landing page, so Unassigned and (not set) traffic shows where it lands.
- Splits GA4 conversions by linked Google Ads campaign beside the totals.
What it doesn't do
- It does not edit GA4 settings, channel groups or your tags.
- It does not rewrite your UTMs.
Questions
Why does GA4 show (not set) for my campaign?
The session had no campaign value GA4 could read, often because the UTMs were stripped before the tag fired or because the event was not tied to a session.
Why is my traffic Unassigned in GA4?
Your utm_source and utm_medium values did not match any rule in the Default Channel Group. Use standard medium values like cpc or paid_social.
Are UTMs case sensitive in GA4?
Yes. Facebook and facebook show as two sources. Pick lowercase and stick to it.
How long until UTMs show in GA4 reports?
Realtime shows them within minutes. Standard reports can take 24 to 48 hours.
- UTM parameters being stripped
- GA4 vs Google Ads conversions: why the numbers don't match
- GA4 vs Meta Ads conversions: why Meta reports more
- What is gclid?
- What is fbclid?
- gclid missing from your URLs
- PostHog UTM tracking
- Multi-touch attribution
- PostHog vs Google Analytics for paid ads
- Attribution window
- Cross-channel attribution
- Google Ads attribution model
- Meta ads attribution settings
See where it breaks
Connect your accounts. Sprites reads them side by side and shows you exactly where the numbers split.