Glossary

How GA4 Channel Rules Settle utm_source vs utm_medium

Taras Shynkarenko
Taras Shynkarenko
•Updated: •8 min read
How GA4 channel rules settle utm_source vs utm_mediumHow GA4 channel rules settle utm_source vs utm_medium

TL;DR, Quick Answer

8 min read

Google's URL builder documentation defines utm_source as "Referrer" and utm_medium as "Marketing medium", which is not enough to tell them apart in practice. GA4's default channel group rules are the real specification: most channels are decided by medium alone, and source only narrows a paid or organic bucket that medium already opened. Source names the specific property that sent the click. Medium names the class of traffic, and it has to be one of the strings the channel regexes recognize.

What is the difference between utm_source and utm_medium?

Both parameters look interchangeable in a link builder, but utm_source vs utm_medium splits on one test: utm_source names the specific property that sent the click, and utm_medium names the class of traffic, which is the value Google Analytics 4 reads when it assigns a channel. The class has to be spelled the way GA4 expects, because the default channel group rules test utm_medium far more aggressively than they test utm_source.

Google's URL builder page defines the two as follows (support.google.com/analytics/answer/10917952, checked September 12, 2026):

  • utm_source: "Referrer, for example: google, newsletter4, billboard"
  • utm_medium: "Marketing medium, for example: cpc, banner, email"

That is the entire published definition. The distinction that matters to reporting lives in a different document.

What does Google mark as required?

The Campaign URL Builder treats utm_source and utm_medium as required fields and utm_campaign as optional, which contradicts the help center guidance sitting one click away.

In the builder's own source, the campaign source and campaign medium inputs carry required, while the campaign name input carries required={version === GAVersion.UniversalAnalytics}, meaning it is only enforced for the retired Universal Analytics mode. The parameter table rendered on that same page lists Campaign Source "Yes", Campaign Medium "Yes", Campaign Name "No", Campaign ID "No" (github.com/googleanalytics/ga-dev-tools, src/components/CampaignURLBuilder/Web/index.tsx).

The help center says the opposite about campaign name: "When you add parameters to a URL, you should always use utm_source, utm_medium, and utm_campaign." Both pages are live. Treat all three as mandatory in your own convention and the disagreement stops costing you anything.

Here is the full parameter list Google publishes, with its verbatim descriptions.

ParameterGoogle's descriptionReported in GA4
utm_idCampaign ID. Used to identify a specific campaign or promotionYes
utm_sourceReferrer, for example: google, newsletter4, billboardYes
utm_mediumMarketing medium, for example: cpc, banner, emailYes
utm_campaignProduct, slogan, promo code, for example: spring_saleYes
utm_source_platformThe platform responsible for directing traffic to a given Analytics propertyYes
utm_termPaid keywordYes
utm_contentUse to differentiate creativesYes
utm_creative_formatType of creative, for example: display, native, video, searchNo, "isn't currently reported"
utm_marketing_tacticTargeting criteria applied to a campaign, for example: remarketing, prospectingNo, "isn't currently reported"

A marketer reviews a spreadsheet of channel data, the kind of report GA4's channel rules sort traffic into.

Which parameter decides the GA4 channel?

Medium decides the channel on its own for most of the list, and source only chooses between a paid and an organic variant of a bucket that medium already opened. Google publishes the manual-traffic rules verbatim on its default channel group page (support.google.com/analytics/answer/9756891, checked September 12, 2026).

ChannelGoogle's rule for manual trafficReads source?Reads medium?
DirectSource exactly matches "(direct)" AND Medium is one of ("(not set)", "(none)")YesYes
Paid Shopping(Source matches a list of shopping sites OR Campaign Name matches regex ^(.*(([^a-df-z]|^)shop|shopping).*)$) AND Medium matches regex ^(.*cp.*|ppc|retargeting|paid.*)$YesYes
Paid SearchSource matches a list of search sites AND Medium matches regex ^(.*cp.*|ppc|retargeting|paid.*)$YesYes
Paid SocialSource matches a regex list of social sites AND Medium matches the same regexYesYes
Paid VideoSource matches a list of video sites AND Medium matches the same regexYesYes
Paid OtherMedium matches regex ^(.*cp.*|ppc|retargeting|paid.*)$NoYes
DisplayMedium is one of ("display", "banner", "expandable", "interstitial", "cpm")NoYes
Organic ShoppingSource matches a list of shopping sites OR Campaign Name matches regex ^(.*(([^a-df-z]|^)shop|shopping).*)$YesYes
Organic SearchSource matches a list of search sites listed under "SOURCE_CATEGORY_SEARCH" OR Medium exactly matches organicYesYes
Organic SocialSource matches a regex list of social sites OR Medium is one of ("social", "social-network", "social-media", "sm", "social network", "social media")YesYes
Organic VideoSource matches a list of video sites OR Medium matches regex ^(.*video.*)$YesYes
EmailSource = email|e-mail|e_mail|e mail OR Medium = email|e-mail|e_mail|e mailYesYes
ReferralMedium is one of ("referral", "app", or "link")NoYes
AffiliatesMedium = affiliateNoYes
AudioMedium exactly matches audioNoYes
SMSSource exactly matches sms OR Medium exactly matches smsYesYes
AI AssistantThe medium exactly matches "ai-assistant"NoYes
Mobile Push NotificationsMedium ends with "push" OR Medium contains "mobile" or "notification" OR Source exactly matches "firebase"YesYes
Cross-networkCampaign Name contains "cross-network"NoNo

Seven channels never look at source at all. Not one channel is decided by source alone. That asymmetry is the practical difference between the two parameters: a wrong utm_source gives you a messy report, and a wrong utm_medium gives you a wrong channel.

Google also notes that "Channel definitions aren't case sensitive and can't be edited", and that traffic matching no rule lands in Unassigned. If you have been staring at a large Unassigned row, the cause is almost always a utm_medium value nobody on the list recognizes, such as newsletter, partner or qr.

Same typo, different damage
Wrong utm_source
  • Produces a messy report, not a wrong channel
  • A source typo only splits a row
  • Never the sole reason a channel gets decided
Wrong utm_medium
  • Produces a wrong channel, not just a messy report
  • A medium typo moves revenue between channels
  • Decides most channels on its own
A typo in utm_source costs you a row; the same typo in utm_medium costs you a channel.

Where the two rules collide

A single link can satisfy two channel definitions at once, and Google does not publish the order in which the rules are evaluated.

Tag a Facebook newsletter promotion as utm_source=facebook&utm_medium=email and you meet the Organic Social condition (source matches the social list) and the Email condition (medium matches the email alternation) simultaneously. The published rules say which conditions match. They do not say which one wins.

The same trap appears in less obvious places:

  • utm_medium=banner lands in Display, not in Paid Other, even though the banner was a paid placement.
  • utm_medium=mobile lands in Mobile Push Notifications, because the rule is "Medium contains 'mobile'".
  • utm_medium=paid-video on a YouTube link satisfies both the Paid Video regex and the Organic Video regex ^(.*video.*)$.
  • utm_medium=organic on a paid link lands in Organic Search regardless of what you paid.

The defensive move is to pick one medium value per channel and never improvise, which is exactly what Google's own best practice table asks for: "Use only one unique utm_medium for each distinct channel." The companion rule for source is the same shape: "Use only one unique utm_source for each distinct platform such as Facebook, Instagram, TikTok." A shared naming sheet is the cheapest fix here, and the UTM tagging workflow covers who owns it.

Flowsery
Flowsery

Start Your 14-Day Free Trial

Real-time dashboard

Goal tracking

Cookie-free tracking

A phone screen shows a newsletter email open, the kind of link that goes untagged and shows up as (not set) in reports.

What happens when one parameter is missing?

Missing parameters do not fall back to something sensible. Google states plainly: "Missing UTM parameters will result in (not set) values being present in reporting."

That sentence explains two of the most common GA4 support questions. A link carrying only utm_medium produces a (not set) source, and a link carrying only utm_source produces a (not set) medium, so neither link can satisfy the Direct rule, which requires the literal pair "(direct)" and "(not set)" or "(none)". Untagged traffic that arrives with no referrer is what produces the direct / none row in GA4; partially tagged traffic produces the separate and more confusing (not set) values.

One more documented gap worth knowing: Google notes that UTM parameters are omitted from the "Landing page + query string" and "Page path + query string" dimensions and appear instead in "Page location". If you have been trying to audit tagging by eyeballing landing page reports, that is why the parameters vanished.

Does capitalization matter?

Values are case sensitive, and channel rules are not, which produces a specific and repeatable mess.

Google's documentation is explicit: "Parameter values are case sensitive, e.g. utm_source=google is different from utm_source=Google." Its naming guidance adds that "Keywords with different capitalization, such as Meta and meta, are treated as different values" and that "SpringSale and Spring_Sale are considered distinct". Meanwhile the channel definitions "aren't case sensitive".

The result: utm_medium=CPC and utm_medium=cpc both classify as Paid Search on a search source, and both appear as separate rows in every source and medium report. Your channel totals stay right while your campaign table quietly doubles. Lowercase everything and the problem disappears.

How to choose a value for each

Ask two different questions rather than one.

For utm_source, ask which property the click physically came from. That is a proper noun: linkedin, mailchimp, partner-blog-name, conference-badge. Keep it granular enough to tell sub-platforms apart, which is why Google suggests fb for Facebook and insta for Instagram rather than one shared value.

For utm_medium, ask what kind of traffic this is, then pick from the strings the channel rules already recognize: cpc, email, referral, affiliate, display, organic, social, sms, audio, ai-assistant. Inventing a new medium buys you nothing and costs you a channel.

Revenue reporting follows the same split. Because revenue rolls up by channel before it rolls up by source, a medium typo moves money between channels, and a source typo only splits a row. Flowsery reads the same utm_source and utm_medium values without setting cookies, with UTM campaign tracking and revenue tracking working from the parameters already on your links. The full parameter reference lives in the UTM parameters guide.

Frequently asked questions

Can I use utm_source without utm_medium?

You can, and Google will record a (not set) medium for that traffic. Since most default channel definitions test medium, the session will usually fall into Unassigned. Google's guidance is to set all relevant parameters together, "especially utm_source, utm_medium, utm_campaign, utm_id, and utm_source_platform".

Is utm_source the same as the referrer?

Google's definition literally says "Referrer", but the two are different signals. The referrer is sent by the browser and can be stripped by referrer policies or private browsing. utm_source is a label you wrote into the link, so it survives when the referrer does not, which is why email and app traffic need it.

What utm_medium values does GA4 actually recognize?

The ones named in the manual-traffic rules: organic, the social set (social, social-network, social-media, sm, social network, social media), email and its variants, referral, app, link, affiliate, audio, sms, ai-assistant, the display set (display, banner, expandable, interstitial, cpm), plus anything matching ^(.*cp.*|ppc|retargeting|paid.*)$ or ^(.*video.*)$.

Why does my campaign show up as Unassigned?

Unassigned is what Google uses "when there are no other channel rules that match the event data". In manually tagged traffic that almost always means the utm_medium value is not on the recognized list. Values like newsletter, qr, partner and blog are the usual culprits.

Flowsery
Flowsery

Start Your 14-Day Free Trial

Real-time dashboard

Goal tracking

Cookie-free tracking

Should utm_source be the platform or the specific placement?

The platform. Placement belongs in utm_content, which Google describes as the parameter to "differentiate creatives", and keyword-level detail belongs in utm_term. Pushing placement into source fragments the source report and makes the social and search site lists stop matching.

Do utm_source and utm_medium affect SEO?

They do not change rankings, but they do create multiple crawlable URLs for the same page when tagged links are published somewhere indexable. Keep UTM links out of sitemaps and internal navigation, and rely on a canonical tag for the clean URL.

Does utm_campaign influence which channel GA4 assigns?

Only for three channels. Cross-network reads Campaign Name for "cross-network", and Paid Shopping and Organic Shopping read it for names matching shop or shopping. Every other channel is decided by source and medium alone, so a utm_campaign value elsewhere does not move a session into a different bucket.

What is the difference between utm_source_platform and utm_source?

utm_source names the referrer, the specific site or app that sent the click, such as google or newsletter4. utm_source_platform names the platform responsible for directing that traffic to the Analytics property, a layer above the referrer. Google reports both in GA4, and neither substitutes for the other.

What is the difference between (not set) and Unassigned in GA4?

(not set) is a dimension value: Google fills it in when a parameter like utm_source or utm_medium is missing from the link entirely. Unassigned is a channel: GA4 puts a session there when the source and medium it does have match no default channel rule. A partially tagged link can produce both at once, a (not set) medium that then falls into Unassigned.

Does capitalizing utm_source or utm_medium differently create duplicate rows in GA4?

Parameter values are case sensitive, so utm_source=Google and utm_source=google post as two separate rows in the source and medium reports. The channel rules themselves are not case sensitive, so both variants still land in the same channel and the channel totals stay correct. The mess shows up one level down, in the campaign table, not in the channel report.

Was This Article Helpful?

Let us know what you think!

See us more often in Google

One click marks Flowsery as a preferred source, so our articles sit higher in your Top Stories, AI Mode, and AI Overviews.

Before you go...

Flowsery

Flowsery

Revenue-first analytics for your website

Track every visitor, source, and conversion in real time. Simple, powerful, and cookie-free.

Real-time dashboard

Goal tracking

Cookie-free tracking

Related Glossary Terms

Related Articles