All posts
5 min readutm, ga4, attribution

UTM tagging that doesn't wreck your GA4 channel reports

Inconsistent UTM tags are the quiet reason your GA4 channel report is a mess of "(other)", duplicate sources, and campaigns that don't add up. The fix is boring and total: one convention, enforced.


Most broken GA4 channel reports are not a GA4 problem. They are a UTM problem: someone wrote Email where the convention was email, someone else used cpc where GA4 expects it in a specific combination, and a third person tagged internal links so returning visitors overwrite their own original source. GA4's default channel grouping is a set of rules matched against your parameter values — feed it inconsistent strings and it puts your traffic in the wrong buckets, permanently.

The five parameters, and what they are actually for

ParameterAnswersGood values
utm_sourceWhich platform sent them?google, facebook, newsletter
utm_mediumWhat kind of traffic is it?cpc, email, social, affiliate
utm_campaignWhich campaign?spring_sale_2026
utm_termWhich keyword?paid search only
utm_contentWhich creative or variant?hero_a, footer_link

utm_medium is the one that drives channel grouping. GA4 matches medium (in combination with source) against its default channel definitions. Get medium wrong and your traffic lands in "Unassigned" or the wrong channel, no matter how carefully you named the campaign.

Rule 1: Lowercase everything, forever

GA4 treats values case-sensitively. Email, email, and EMAIL are three distinct mediums, splitting one channel into three rows and matching the channel rules differently.

Lowercase every value, every time. This single rule fixes more channel reports than any other.

Rule 2: Use the mediums GA4 actually recognises

The default channel grouping expects specific medium values. The common ones:

  • cpc, ppc, paidsearch → Paid Search (with a search source)
  • email → Email
  • social, social-network, social-media → Organic Social
  • affiliate → Affiliates
  • referral → Referral
  • display, banner, cpm → Display
  • organic → Organic Search (do not set this manually)

Inventing newsletter as a medium is the classic mistake — it is a source; the medium is email. Traffic tagged with an unrecognised medium usually lands in Unassigned, which is where channel reports go to become useless.

Rule 3: Never tag internal links

Tagging a link from one page of your site to another restarts attribution. The visitor arrived from a Google ad, clicked your UTM-tagged internal banner, and GA4 now credits the banner instead of the ad.

Internal campaign tracking is a different job, done with different parameters and read separately. Never put utm_ on a link whose destination is your own site.

Rule 4: Never put UTMs on the wrong side of a redirect

If your link goes through a shortener or a redirect chain, confirm the parameters survive to the final URL. Parameters stripped by a redirect are simply lost, and the traffic arrives as direct — which is why one campaign in a set will sometimes show zero attributed sessions while the others look fine.

Rule 5: Do not tag what is already tagged

Google Ads with auto-tagging enabled appends gclid, which carries richer attribution than UTMs and enables Google Ads reporting integration. Adding manual UTMs on top can override that, and you lose the better signal.

Leave auto-tagging on. Do not manually tag Google Ads links unless you have a specific, understood reason.

Rule 6: Never put personal data in a UTM

An email address in utm_content, a customer ID in utm_campaign — both leak into the page URL, which is sent to every analytics and advertising tag on the page as the page location. It is a privacy failure and a hard fail on any tracking audit. Keeping PII out of GA4 covers the cleanup if it has already happened.

A convention that survives a team

Write it down, in a shared document, with examples:

Source:    lowercase, the platform:  google | facebook | klaviyo | partner_name
Medium:    from the approved list:   cpc | email | social | affiliate | display | referral
Campaign:  lowercase_snake_case with a date:  spring_sale_2026_03
Content:   variant identifier:       hero_a | footer_link | story_1
Term:      keyword, paid search only

Then enforce it with a builder rather than trust. A shared spreadsheet with dropdowns, or a small internal tool, eliminates the entire class of problem — nobody types a medium by hand, so nobody types Email.

Auditing what you already have

  1. Open GA4's Traffic acquisition report and switch the dimension to session source / medium.
  2. Look for near-duplicates — the same value in different cases, or plurals and synonyms. Each pair is a split channel.
  3. Look for Unassigned traffic. A material share means mediums that GA4's rules do not recognise.
  4. Check Direct traffic for spikes aligned with campaign launches. That is usually parameters being stripped by a redirect.
  5. Fix forward and annotate. Historical values cannot be rewritten in the interface — though you can normalise them in BigQuery if consistent history matters enough to query around.

FAQ

Why is my traffic showing as Unassigned in GA4?

Almost always a utm_medium value that GA4's default channel grouping does not recognise. Compare your mediums against the recognised list and normalise them.

Should I use UTMs on Google Ads links?

No, if auto-tagging is enabled — gclid carries better attribution and powers the Ads/GA4 integration. Manual UTMs on top can override it and lose signal.

Does UTM capitalisation really matter?

Yes. GA4 is case-sensitive, so Email and email are separate values that split your reporting and match channel rules differently. Lowercase everything.

Can I fix historical UTM data in GA4?

Not in the interface — collected values are immutable. You can normalise historical data in BigQuery, or accept the split and enforce a convention going forward with an annotation marking the change.

What is the difference between utm_source and utm_medium?

Source is the specific platform that sent the traffic (google, klaviyo, a partner site). Medium is the type of traffic (cpc, email, affiliate). Medium is what drives channel grouping, which is why getting it right matters more.

Campaign links are only half the picture — the free tracking audit checks whether your GA4 tag, consent signals, and conversion pixels are intact on any URL.


See where your tracking stands

Run the same 13-check audit referenced in this post against any URL. No signup, results in seconds.

Run a free audit