Table of Contents
- The GA4 Attribution Diagnostic Flowchart
- Issue 1: Traffic Showing as Direct Instead of Paid Campaign
- Issue 2: Traffic Showing as "Unassigned"
- Issue 3: Campaign and Source Showing as "(not set)"
- Issue 4: Payment Gateway & Social Webview Referral Hijacking
- Issue 5: Server 301/302 Redirects Stripping Query Strings
- Issue 6: Consent Mode v2 Delays and Cookieless Pings
- Live Testing Protocol: Realtime & DebugView
- Frequently Asked Questions
If a campaign appears under the wrong source or does not appear at all, follow the click from the original link to the final page. Check the tags, redirects and analytics collection in that order. The sections below cover common symptoms and how to investigate them.
The GA4 Attribution Diagnostic Flowchart
When campaign data fails to appear correctly in GA4, follow this symptom triage table:
| Observed Symptom | Primary Suspect | Definitive Test |
|---|---|---|
| Campaign traffic shows as Direct | HTTP 301/302 redirect dropping query string; mobile webview; HTTPS to HTTP downgrade | Inspect Network tab in DevTools; check if query parameters survive final URL |
| Traffic shows as Unassigned | utm_medium does not match GA4 Default Channel Group regex rules |
Examine Session source / medium in GA4 Explorations against Google channel rules |
| Campaign shows as (not set) | Measurement Protocol hits without campaign parameters; session timeout; page_view fired before config | Verify session_start event payload in DebugView |
| Paid social shows as Referral | UTM parameters stripped or missing; link wrapper stripped fbclid / utm_* |
Check if utm_medium=paid_social was included in ad destination URL |
Issue 1: Traffic Showing as Direct Instead of Paid Campaign
GA4 uses Direct / (none) when there is no clear referral source. Missing campaign information can contribute, but the presence or absence of referrer, campaign, and advertising click information affects processing. If paid clicks appear as Direct, inspect the click URL, redirect chain, landing page, and analytics data before settling on a cause.
If you enter https://example.com/signup?utm_source=meta and a redirect sends the browser to https://example.com/signup/, check whether that redirect preserves the query string. The response's Location header shows the next URL requested:
# BROKEN REDIRECT (Query string stripped)
GET /signup?utm_source=meta -> 301 Moved Permanently
Location: https://example.com/signup/ <-- UTMs LOST!
# CORRECT REDIRECT (Query string preserved)
Location: https://example.com/signup/?utm_source=meta
Issue 2: Traffic Showing as "Unassigned"
GA4 uses "Unassigned" when the available traffic-source information does not meet an applicable Default Channel Group definition. Check the values collected and compare them with Google's current rules. For example:
utm_medium=paidsocialvsutm_medium=paid_social(both may match paid-social medium patterns; check the source and other available values against Google's current definitions).utm_source=newsletter&utm_medium=email_blast(check whether the custom medium matches a current channel definition; the result depends on the available traffic-source data).
Issue 3: Campaign and Source Showing as "(not set)"
In GA4, (not set) indicates that GA4 collected an event, but the associated dimension has no recorded value. Common causes include:
- Partial tagging: Include source, medium and campaign together, plus relevant campaign identifiers. Missing values can produce missing dimensions; check the specific field and reporting scope.
- Measurement Protocol Mismatch: Backend offline conversion events sent via the GA4 Measurement Protocol without an attached
client_idorsession_idto link to the original campaign session. - Session inactivity: GA4 uses a configurable inactivity timeout, typically 30 minutes. Midnight or a new campaign value does not by itself restart a GA4 session. Inspect session continuity before diagnosing campaign loss.
Issue 4: Payment Gateway & Social Webview Referral Hijacking
An external payment journey can introduce an unwanted referral or interrupt measurement. Check whether client and session identifiers survive checkout, whether tags run on the return page, and whether the payment provider appears in your acquisition reports. For a practical test, use the ecommerce tracking audit.
In your web stream’s tag settings, review List unwanted referrals and add payment providers when appropriate. This tells GA4 to ignore those referrers; it does not repair historical records or replace cross-domain measurement. Follow Google’s unwanted-referral guidance and retest checkout.
Issue 5: Server 301/302 Redirects Stripping Query Strings
Redirect chains can affect campaign attribution if a redirect drops the incoming query string. Check each redirect response and the final landing URL. In Apache mod_rewrite, the [QSA] flag is an Apache-specific option for appending an incoming query string when a substitution already creates one. Nginx uses different configuration; consult the documentation for the server in use.
Issue 6: Consent Mode v2 Delays and Cookieless Pings
Consent behavior depends on the implementation: basic consent mode blocks Google tags until consent, while advanced mode can send cookieless pings under denied consent. Test the landing page and consent transition separately; do not infer a second session solely from a consent update. Follow Google’s consent-mode concepts and your applicable consent requirements.
Live Testing Protocol: Realtime & DebugView
Never debug campaigns by waiting 24 to 48 hours for standard GA4 acquisition reports. Follow this real-time verification process:
- Use a complete test link such as
?utm_source=newsletter&utm_medium=email&utm_campaign=qa_audit. Enable debug mode for your own device through Tag Assistant or GTM Preview. - Open the URL in an Incognito browser window.
- In GA4, go to Admin > DebugView. Select your active device stream.
- Click on the
page_viewandsession_startevents.
Frequently Asked Questions
Why does my campaign traffic show up as (Unassigned) in GA4?
GA4 uses (Unassigned) when the available traffic-source information does not meet an applicable Default Channel Group definition. Check for missing or unexpected values and compare them with Google's current definitions. Those definitions are not case-sensitive, so uppercase CPC alone does not automatically cause Unassigned.
Why are my paid campaign clicks showing as Direct traffic?
A redirect that removes campaign parameters can contribute, especially when no usable referrer or other campaign information remains. Other implementation or browser conditions can also affect attribution. Inspect the redirect chain, final URL, and data received by the analytics tag before identifying a cause.
How long does GA4 take to show UTM campaign data in standard reports?
Use Realtime and DebugView to confirm collection, then use processed acquisition reports for attribution. Enable debug mode through Tag Assistant, GTM Preview or your tag configuration; an arbitrary debug_mode=true URL parameter does not enable it in every implementation.
Do URL shorteners strip UTM parameters?
Query-string behavior depends on the shortener and redirect chain; an intermediate hop can remove campaign parameters. Test the complete shortened URL in a browser or network inspector and verify the final destination. The UTMCraft UTM Checker checks URL structure but does not follow live redirects.
Keep an evidence trail before changing settings
Record the published campaign link, final destination, consent state, collected page URL and exact report dimension. If the destination loses tags, investigate redirects first. If the destination is correct but no landing event arrives, inspect collection. If events arrive but the report looks different, compare scopes, processing and attribution settings.
Use the worked launch test and downloadable QA record. For additional instruction, Google’s official GA4 Tutorials YouTube series covers setup and integrations. For specific journeys, continue with the checkout audit, delivered email audit or LinkedIn lead audit.
Choose a focused guide
Use these guides when you need to investigate a specific part of this topic.
- Why UTMs Don't Appear in GA4: 9 Causes and Step-by-Step Fixes
UTM parameters missing in Google Analytics 4? Review possible causes and steps for checking campaign data in GA4 reports.
- Why Campaign Traffic Shows as Direct in GA4 (and How to Fix It)
Why might paid traffic show as Direct in GA4? Review likely causes, including missing campaign data and redirects, and steps to investigate attribution.
- How to Fix "Unassigned" Traffic in GA4: Complete Diagnosis Guide
Why does GA4 show Unassigned traffic? Check source and medium values against current channel definitions, then inspect the traffic-source data GA4 collected.
- How to Fix (not set) Campaign and Source Data in GA4 Reports
Why do you see (not set) for campaigns, sources, or landing pages in GA4? Learn the technical causes behind (not set) and how to resolve missing attribution.
- Why HTTP Redirects Strip UTM Parameters (and How to Preserve Query Strings)
Learn how HTTP 301 and 302 redirect rules can affect UTM parameters and campaign reporting, and how to inspect query-string handling on your server.
- How to Test and QA UTM Parameters in GA4 DebugView and Realtime
Check that a UTM link works before launch: validate the parameters with a free UTM checker, then confirm the visit in GA4 Realtime and DebugView. Step by step.
- GA4’s New Hostname Include Filters: How to Keep Spam Out of Campaign Reports
Learn how GA4 hostname Include filters work, build an approved-domain list, test before activation, and understand the Measurement Protocol exception.
- How to Track AI Assistant Traffic in GA4: ChatGPT, Gemini and Claude
Track ChatGPT, Gemini and Claude traffic in GA4. Find the AI Assistant channel, audit missing referrals, test UTMs and measure leads without overclaiming.
References
- GA4 Default Channel Grouping (Google Analytics Help)
- Verify Your Tag Implementation with DebugView (Google Analytics Help)
- Manage Unwanted Referrals in GA4 (Google Analytics Help)