SteerAds
Free toolNo signupUTM & tracking

GA4 URL Tester — simuler la capture événement Google Analytics

GA4 assigns each session to a Default Channel Group (Paid Search, Paid Social, Email, Referral, Direct, Organic Search, etc.) by applying a deterministic rule matrix to the source + medium + other signals combination. That matrix is publicly documented, but it forgives little: a non-standard medium, an off-rule combination, an empty campaign, and the traffic drops into Unassigned or (other). On continuously benchmarked accounts, 8 to 25% of traffic ends up in (Other) or Unassigned because of off-rule UTMs — making channel acquisition reporting partially fictional. The GA4 tester above simulates classification in 5 seconds: paste a URL, see exactly how GA4 will bucket it before publishing.

Connect your Google Ads account to analyze these metrics on your actual account.

Free audit 2 min →
Matt
MattTracking & Data Lead
··8 min read

Simulez la capture GA4 d'un clic UTM-tagué : attribution Source / Medium / Campaign + classification Default Channel Group. Sert à valider en pré-prod qu'une URL UTM sera correctement bucketée.

Capture GA4 simulée
Source
google
Medium
cpc
Campaign
brand_2026_q3
GA4 Default Channel Group
Paid Search

Le Default Channel Group est calculé selon les règles GA4 officielles (utm_source + utm_medium + campaign). En cas de (other) ou Unassigned, le canal sera mal regroupé dans les rapports Acquisition.

Comment GA4 attribue-t-il le canal ?

GA4 utilise les paramètres UTM pour classer chaque session dans un Default Channel Group (Cross-network, Paid Search, Paid Social, Organic Search, Email, Referral, Direct, etc.). La classification suit des règles précises mais peu documentées : si votre utm_medium est non-standard ("paid", "newsletter_promo"), GA4 retombe sur Unassigned et casse le reporting Acquisition.

Cas typiques mal classés :

  • utm_medium=Newsletter (majuscules) → Unassigned au lieu de Email
  • utm_medium=paid (sans préciser social/search) → Unassigned
  • utm_source=google sans utm_medium → Direct
  • Performance Max sans utm_campaign contenant "pmax" → mal classé Paid Search au lieu de Cross-network

Pour générer une URL UTM-taguée correctement classée GA4, utilisez notre UTM Builder (qui force le slugify lowercase + medium standard). Pour valider une URL existante, voir notre UTM Checker.

GA4 assigns each session to a Default Channel Group (Paid Search, Paid Social, Email, Referral, Direct, Organic Search, Cross-network, and 10+ other categories) by applying a deterministic rule matrix to the source + medium + secondary signals combination. That matrix is publicly documented by Google and cannot be modified — it defines the standard rules that produce the Acquisition reports of every GA4 property. The catch: the matrix forgives little. A non-standard medium, an off-rule source/medium combination, an empty campaign with a source present, and the traffic drops into Unassigned or (other) — catch-all categories that make acquisition reporting partially fictional. Across aggregated 2025-2026 Google Ads data (public sources + Google Ads API), 8 to 25% of traffic ends up in (Other) or Unassigned on un-audited accounts because of off-matrix UTMs. The GA4 tester above simulates classification in 5 seconds — paste a URL, see exactly how GA4 will bucket it before publishing. What follows explains how the matrix works, the typical misclassified cases, the Performance Max / Cross-network case, and the method to test before prod.

For complete conversion tracking upstream of UTMs, see our Google Ads conversion tracking guide. For the migration to server-side that changes how UTMs are preserved through redirects, see 2026 server-side GTM guide. To generate a clean UTM-tagged URL from the start, use our UTM Builder.

GA4 Default Channel Group: automatic classification

GA4 introduced in 2020 (and has steadily evolved since) the Default Channel Group concept — an automatic categorization of traffic into 15-20 predefined buckets that makes Acquisition reporting readable. Without Channel Group, the Acquisition report would show 50 to 500 raw rows (every distinct source/medium combination), making any temporal or year-over-year analysis impossible. With Channel Group, those 500 rows are aggregated into 15 standard categories, and the report becomes readable in 30 seconds.

The standard GA4 2026 Channel Group categories:

The full matrix comprises 15-20 Channel Groups in total, including Affiliates, Display, Video, Audio, SMS, Push Notifications, and the infamous Unassigned (catch-all category for anything that matches no rule). The full official documentation is here: support.google.com GA4 Default Channel Group. The operational golden rule: any source/medium combination that does not match a rule in this matrix drops to Unassigned — that is the #1 cause of Acquisition report pollution.

How GA4 assigns Source / Medium / Campaign

The attribution mechanism breaks down into three steps, in this exact order, for every incoming session.

Step 1 — UTM parameter capture. GA4 reads the utm_source, utm_medium, utm_campaign, utm_content, utm_term parameters from the URL of the first page visited in the session. If those parameters are present, GA4 uses them as the source of truth. If Google Ads auto-tagging is active and a gclid is present in the URL, GA4 uses the gclid to reconstruct source=google, medium=cpc, campaign={campaign_name} via the Google Ads API. The gclid takes precedence over UTMs if both are present (Google prioritization).

Step 2 — Referrer URL capture. If neither UTM nor gclid is present, GA4 inspects the browser document.referrer — the URL of the previous page before arriving on the site. If the referrer is a known Google domain (google.com, google.fr, etc.), GA4 assigns source=google, medium=organic. If the referrer is an unclassified third-party domain, GA4 assigns source={third_party_domain}, medium=referral. If the referrer is empty or identical to the site domain, GA4 assigns (direct) / (none).

Step 3 — Channel Group matrix application. GA4 applies the deterministic rule matrix to the source/medium/campaign combination captured in steps 1-2. The first rule that matches (rules are evaluated in a fixed publicly documented order) assigns the Channel Group. If no rule matches, the Channel Group becomes Unassigned. This step is key because it is where off-matrix UTMs drop to (Other) — even if the technical UTM is valid, the source/medium combination may match no rule.

Here is a concrete example of the GA4 event payload GA4 receives during a session with valid UTMs:

{
  "event_name": "page_view",
  "event_timestamp": "1714329600000000",
  "user_pseudo_id": "abc123.xyz789",
  "traffic_source": {
    "source": "facebook",
    "medium": "paid_social",
    "campaign": "lancement_avril_2026"
  },
  "session_traffic_source_last_click": {
    "manual_campaign": {
      "source": "facebook",
      "medium": "paid_social",
      "campaign_name": "lancement_avril_2026",
      "content": "ad_creative_v3_video",
      "term": null
    }
  },
  "device": {
    "category": "mobile",
    "operating_system": "iOS"
  },
  "geo": {
    "country": "",
    "region": "Ile-de-France"
  }
}

This payload contains the UTM parameters in traffic_source and the full detail in session_traffic_source_last_click. The Default Channel Group matrix reads traffic_source.medium = paid_social + traffic_source.source = facebook and assigns Channel Group = Paid Social. If traffic_source.medium were influence instead of paid_social, no rule would match and the Channel Group would drop to Unassigned.

Typical misclassified cases: Unassigned, (other), Direct

Five typical cases observed across audited accounts, in decreasing order of frequency. Each case has a precise GA4 signature and a specific technical fix.

Case 1 — Google Ads traffic showing as Direct. The most frequent. Cause: Google Ads auto-tagging disabled without Tracking Templates as replacement. Symptom: 30 to 60% of Google Ads traffic drops to Direct instead of Paid Search. Fix: re-enable auto-tagging in Settings > Account-level settings > Auto-tagging, or add account-level Tracking Templates with standard UTMs.

Case 2 — Meta Ads traffic showing as Unassigned. Cause: incorrect utm_medium (paid instead of paid_social) or non-standard medium. Symptom: 100% of Meta Ads traffic drops to Unassigned. Fix: enforce utm_medium=paid_social in all Ads Manager URL parameters.

Case 3 — Newsletter traffic showing as (other). Cause: non-standard medium (utm_medium=newsletter instead of utm_medium=email). Symptom: newsletter traffic bucketed as (other) instead of Email. Fix: change the UTM generation template in the email tool (Mailchimp, Sendgrid, Brevo) to emit utm_medium=email.

Case 4 — Partnerships / influencer traffic showing as Unassigned. Cause: invented non-standard medium (utm_medium=influence, utm_medium=partnership). Symptom: 100% of partnership traffic drops to Unassigned. Fix: use utm_medium=referral (for press partnerships, podcasts, blogs) or utm_medium=affiliate (if revenue share).

Case 5 — Mobile app traffic showing as Direct. Cause: deep-link redirect that eats UTM parameters, or App + Web Stream not configured for cross-platform tracking. Symptom: 100% of in-app traffic drops to Direct. Fix: configure App + Web cross-platform tracking + Linker Parameter (_gl) on mobile redirects.

(Other) vs Unassigned: the difference that matters :

GA4 has two subtly different catch-all categories. Unassigned = no Default Channel Group rule matches the source/medium combination received (typically a non-standard medium). (Other) = the combination matches partially but with ambiguity (typically empty source or campaign). Both are problems, but the fixes diverge: Unassigned is fixed via Channel Group custom rules; (Other) is fixed by filling in the missing fields. The tester above distinguishes the two cases in its output to guide the fix.

The tester validates one URL. The audit identifies the systemic pattern across all your traffic.

Connect GA4 via OAuth and the audit identifies in 3 minutes the percentage of traffic in Unassigned or (Other), classifies it by origin source, and proposes the Channel Group custom rules or 301 redirects to apply to reconsolidate the Acquisition report.

Run a free UTM audit →

Performance Max + Demand Gen → Cross-network

Performance Max and Demand Gen introduced in 2022-2023 a specific classification case that surprises many advertisers: these campaigns appear under Channel Group = Cross-network instead of Paid Search or Paid Social. The reason is structural: Performance Max serves simultaneously across Search, Display, YouTube, Discover, Gmail, Maps — a single campaign touches 6 different surfaces. GA4 cannot assign a single channel category to traffic arriving from 6 surfaces, so Google introduced Cross-network specifically for these hybrid campaigns.

That classification is technically correct but makes budget arbitrage complex. Impossible to know what share of Cross-network traffic comes from Search vs. Display vs. YouTube vs. Discover. The Acquisition report shows 100% Cross-network with no breakdown. To break it down, two options.

Option 1 — GA4 BigQuery export. The GA4 BigQuery export contains the traffic_source.detailed_source field which breaks down Cross-network by secondary surface. A SQL query lets you split PMax traffic between Search, Display, YouTube. Requires active GA4 BigQuery Linking (free in standard GA4 since 2023) and a bit of SQL.

Option 2 — Native Google Ads reports. In Google Ads, the PMax campaign reports break down performance by surface (Search, Display, YouTube, Discover) via the "Asset Group" report. That breakdown is not pushed back to GA4 by default but stays accessible on the Google Ads side. Advantage: no need for BigQuery. Downside: does not cross-reference easily with the other channels (Meta, LinkedIn) that live in GA4.

// Example BigQuery to break down Cross-network by surface
SELECT
  event_date,
  traffic_source.source,
  traffic_source.medium,
  traffic_source.campaign,
  -- Secondary surface for Cross-network
  CASE
    WHEN traffic_source.medium = 'cpc' AND device.category = 'desktop'
      THEN 'Search'
    WHEN traffic_source.medium = 'cpc' AND geo.country IS NOT NULL
      THEN 'Search Maps'
    ELSE 'Display/YouTube/Discover'
  END AS pmax_surface_estimee,
  COUNT(DISTINCT user_pseudo_id) AS users
FROM `your_project.analytics_XXXXXX.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20260101' AND '20260331'
  AND traffic_source.campaign LIKE '%pmax%'
GROUP BY 1, 2, 3, 4, 5
ORDER BY users DESC;

This approach remains approximate — the real surface breakdown is in Google Ads, not GA4. For full context on Performance Max and Demand Gen attribution, see our Discovery Ads incremental — measured truth.

Test your UTMs before prod: the 5-minute method

Pre-flight method applicable before any UTM-tagged URL is published in a campaign. Allow 5 minutes per UTM, scalable if you validate a batch of 10-20 URLs at once.

Step 1 — Paste into the tester above (30 seconds). Paste the full URL with UTM parameters. The tester parses, simulates, displays the expected Channel Group and validation flags (standard medium or not, lowercase respected, spaces detected, reasonable value length). If Channel Group = Unassigned or (Other), fix before publishing.

Step 2 — Cross-check with GA4 DebugView (3 minutes). For critical UTMs (national campaign, product launch, strategic partnership), enable GA4 DebugView, navigate to the URL in private mode, verify the real hit in the Events panel. DebugView displays the full payload in real time — you see traffic_source.source, traffic_source.medium, traffic_source.campaign exactly as GA4 captures them. Compare with the tester to validate consistency.

Step 3 — Document in the master sheet (1 minute). Add a row to the master UTM sheet with URL, source, medium, campaign, expected Channel Group (from the tester), publication date, owner. This log becomes the source of truth for retrospective audit.

Step 4 — Publish (30 seconds). Once tester and DebugView are consistent and the master sheet is updated, publish the URL in the campaign (Google Ads Tracking Template, Meta Ads URL parameter, email template, LinkedIn post). The pre-flight discipline takes 5 minutes per UTM but prevents 90% of tracking incidents observed on undisciplined accounts.

Official Google documentation on GA4 DebugView: support.google.com GA4 DebugView.

Migrating from UA → GA4: important UTM changes

The Universal Analytics (UA) to GA4 migration introduced several subtle changes in how UTMs are handled — changes that silently broke the acquisition reporting of many accounts. Four important changes to know even though the UA → GA4 migration is theoretically over since July 2024.

Change 1 — Expanded Default Channel Group. UA had 8-10 default Channel Groups. GA4 has 15-20. That difference means certain source/medium combinations classified correctly in UA drop to (Other) or Unassigned in GA4 because of stricter rules. Verify your UTMs pass the GA4 matrix, not the UA matrix.

Change 2 — utm_medium=social deprecated. In UA, utm_medium=social was recognized and bucketed under Social. In GA4, you must distinguish paid_social (for paid Meta Ads, LinkedIn Ads) from organic_social (for unpaid posts). Accounts that used utm_medium=social in UA see their traffic drop to Unassigned in GA4.

Change 3 — New Cross-network campaign category. This category did not exist in UA. It appeared specifically for Performance Max and Demand Gen in GA4. If your UA historical report classifies PMax traffic as Paid Search, the GA4 report classifies it as Cross-network — year-over-year comparison impossible without normalization.

Change 4 — Session-based vs. Event-based. UA aggregated by session; GA4 aggregates by event. The definition of "Source / Medium" subtly changes: in UA it is the session source; in GA4 it is the source of the last event in the session (last-click within the session). That difference makes UA → GA4 comparisons approximate even with identical UTMs.

Practical recommendation: do not attempt year-over-year UA 2024 vs. GA4 2025+ comparisons on Acquisition reports — the data is not structurally comparable. Restart on GA4 as the new reference and accept a break in history. See also our 2026 Google Ads audit checklist for the full post-migration verification and our Google Ads reporting 10 KPI for consolidated post-GA4 reporting.

GA4 assigns each session to a Channel Group via a deterministic rule matrix that public documentation describes precisely, but which forgives little in practice. A non-standard medium, an off-rule combination, an empty campaign, and the traffic drops to Unassigned or (Other) — catch-all categories that make acquisition reporting partially fictional. The GA4 tester above simulates classification in 5 seconds and lets you validate every UTM-tagged URL before publishing. Pre-flight discipline takes 5 minutes per UTM but prevents 90% of tracking incidents. Combined with a quarterly UTM Checker audit and a shared naming standard, this mechanic ensures the GA4 Acquisition report reflects acquisition reality rather than a leaky fiction — regardless of the level of Smart Bidding sophistication or server-side put in place elsewhere in the stack.

FAQ

Why does my Google Ads traffic show up as Direct in GA4?

Five typical causes in order of frequency. First: Google Ads auto-tagging disabled without Tracking Templates as replacement — Google Ads transmits nothing, GA4 sees a referrer-less session and buckets it as Direct. Second: an intermediate redirect that eats the gclid (Cuelinks, Bitly, CMS shortcut that forces HTTPS on the landing URL). Third: Consent Mode v2 refuses analytics cookie storage, GA4 cannot tie the session to the gclid and falls back to Direct by default. Fourth: external subdomain not configured in GA4 cross-domain measurement. Fifth: Linker Parameter (_gl) absent on subdomain redirects. The tester above diagnoses causes 1, 2 and 5 by simulating capture without actually navigating.

Why does Performance Max show as Cross-network rather than Paid Search?

Because Performance Max serves simultaneously across Search, Display, YouTube, Discover, Gmail, Maps. GA4 cannot assign a single channel category to a campaign that touches 6 different surfaces — so it introduced the Cross-network Channel Group in 2022 specifically for PMax and Demand Gen. That classification is technically correct but makes budget arbitrage complex: impossible to know what share of Cross-network traffic comes from Search vs. Display vs. YouTube. Workaround: use GA4 BigQuery export to break down Cross-network by secondary source, or use the native Google Ads campaign reports that maintain the channel breakdown.

What does Unassigned mean in GA4 and how do you fix it?

Unassigned means no Default Channel Group rule matches the source/medium combination received. Typical cases: utm_medium=influence (non-standard), utm_source empty with utm_medium present, source/medium that do not form a pair recognized by the GA4 matrix. Fix: audit the sources/mediums ending up in Unassigned via Reports > Acquisition, identify the inconsistency pattern (typically a non-standard medium used by a partner or a poorly tagged newsletter), correct via 301 redirect on future URLs and via Channel Group custom rules in GA4 for the past (capped at 30 rules).

What is the difference between source/medium and Default Channel Group in GA4?

Source/medium are the raw values captured by GA4 from the UTM-tagged URL — typically 50 to 500 distinct values on a mid-size account. Default Channel Group is the automatic categorization of those values into 15-20 predefined buckets (Paid Search, Paid Social, Email, Referral, Direct, etc.). The aggregation rule is deterministic — Google applies its public rule matrix. The advantage of Channel Group: aggregating 50 sources into 15 categories makes reporting readable and enables stable temporal analysis. The downside: any off-matrix UTM falls into (Other) or Unassigned, polluting the report. Middle-ground solution: custom Channel Groups (up to 30 personalized rules) to reassign specific cases.

Is GA4 reliable for multi-touch attribution?

Partially. GA4 offers 4 attribution models: Last Click, First Click, Linear, Position-based, and Data-driven (recommended by default). Data-driven uses machine learning to weight journey touchpoints by their incremental contribution to the conversion — more reliable than Last Click but requires a minimum volume of 300 conversions over 30 days for the algorithm to converge. On accounts below that threshold, Data-driven silently falls back to Last Click. Reliability depends heavily on upstream UTM quality — if 25% of traffic is (Other) or Unassigned, multi-touch attribution remains structurally biased even with Data-driven.

How do you test a UTM URL before pushing it to production?

Three methods in increasing order of robustness. First: use the GA4 URL Tester above to simulate capture in 5 seconds — see how GA4 will classify the source/medium/campaign combination without navigating. Second: navigate to the URL in preview mode with GA4 DebugView active — see the real hit land in the Events panel with its full parameters. Third: for critical UTMs (national campaign, product launch), do both simultaneously and cross-check. The preview/DebugView method is more robust but requires GA4 admin access and 2 minutes; the tester above is instant and accessible without configuration.

Audit your account on 200+ checkpoints

Connect Google Ads via OAuth. Full audit in 2 minutes. No credit card. No commitment.

No credit card · Results in 2 minutes