GA4’s default channel grouping rules misclassify a frustrating amount of real-world traffic. Email campaigns get assigned to Direct. Affiliate traffic shows as Organic Search. Paid social appears as Referral. YouTube pre-roll shows as Unassigned. These misclassifications happen because GA4’s default rules are designed for a generic site and cannot know about your specific UTM conventions, affiliate partners, or custom traffic sources. This guide shows you how to diagnose misclassifications and fix them with custom channel groups.

How GA4 Default Channel Grouping Works

GA4 assigns sessions to channel groups using a waterfall of rules evaluated in order. The first rule that matches wins. The rules check combinations of session_source, session_medium, session_campaign_name, and session_default_channel_group. GA4’s default rules are: Direct (source = direct AND medium = none), Paid Search (medium matches cpc/ppc AND source is a known search engine), Organic Search (medium = organic), Email (medium contains email/e-mail), Paid Social (specific social platform sources), Organic Social, Video, Display, Affiliates, and Referral as the catch-all.

The catch-all Referral rule is the most common source of misclassification. Any traffic that does not match an earlier rule falls into Referral, including: affiliate traffic (if utm_medium is not set to “affiliate”), influencer links (if utm_source is not a recognized social domain), podcast links (if no UTM parameters are used), and any custom traffic source you created without following GA4’s expected utm_medium conventions.

Diagnosing Misclassifications in BigQuery

-- Find Referral sources that might be misclassified
SELECT
  traffic_source.source,
  traffic_source.medium,
  traffic_source.name AS campaign,
  COUNT(DISTINCT user_pseudo_id) AS users,
  COUNT(DISTINCT CONCAT(user_pseudo_id, 
    CAST((SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS STRING))) AS sessions
FROM `your_project.analytics_XXXXXX.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20240101' AND '20240131'
  AND traffic_source.medium = 'referral'
GROUP BY 1, 2, 3
ORDER BY sessions DESC
LIMIT 50

Run this query to see all Referral traffic broken down by source. Look for sources that should logically be in a different channel: if you see affiliate network domains (shareasale.com, impact.com, awin.com), those are affiliate traffic being misclassified as Referral. If you see email service provider domains (mailchimp.com, klaviyo.com), those are email clicks where UTM parameters were stripped. If you see media buying platforms (taboola.com, outbrain.com), those are native advertising being classified as Referral.

img

Creating Custom Channel Groups in GA4

Navigate to Admin → Channel Groups → Create new channel group. GA4 lets you create custom channel group definitions that override the default grouping for specific traffic. Each channel in your custom group has one or more conditions using AND/OR logic. You can match on session_source, session_medium, session_campaign_name, or any combination.

For affiliate traffic: create an “Affiliates” channel with condition session_source matches regex “shareasale\.com|impact\.com|awin\.com|cj\.com” OR session_medium exactly matches “affiliate”. For email with missing UTM: create an “Email” channel with condition session_source contains “email” OR session_source matches regex “mailchimp|klaviyo|sendgrid|campaign-monitor”.

UTM Standardization as the Long-Term Fix

Custom channel groups fix the reporting view but do not fix the underlying problem: UTM parameters are inconsistent across your organization. The permanent fix is a UTM convention document and a URL builder tool that enforces the conventions. Every email must use utm_medium=email. Every affiliate link must use utm_medium=affiliate. Every paid social campaign must use utm_medium=paid_social (not “social”, “paidsocial”, “paid social”, or “cpc”).

Audit your UTM usage monthly using the BigQuery query above filtered to the previous 30 days. Count how many sessions arrived with each utm_medium value. Any value that appears fewer than 10 times is likely a typo or one-off deviation that should be corrected. Any value that belongs to a channel different from what GA4 groups it into is a UTM standardization failure that needs to be fixed at the source before it creates months of misattributed data.

Custom Channel Groups in Google Ads

If you have linked GA4 to Google Ads and are using GA4 channel groups in cross-channel reports, custom channel groups in GA4 also affect how Google Ads channel data appears in those integrated reports. This is generally positive — it means your Google Ads and non-Google Ads channels appear consistently labeled across your reporting. But it can cause confusion if stakeholders are used to seeing different channel labels in Google Ads versus GA4 reports. Communicate channel group changes before publishing them to avoid questions about why channel names changed in familiar reports.

guide

Leave a Comment