UTM Tracking Best Practices: Stop Polluting Your GA4 Data

Dirty UTM parameters are the number one cause of unusable source and medium reports in GA4. Follow these rules to keep your campaign data clean and your channel groupings accurate.

Updated 7 min read

UTM parameters are the simplest, most powerful, and most frequently botched part of any analytics setup. They are just five query string parameters appended to a URL. There is nothing technically complex about them. And yet, a typical agency's GA4 source/medium report ends up looking like this: google / cpc, Google / CPC, google / Cpc, google / paid, adwords / cpc, (not set) / (not set).

That is one channel — Google Ads — appearing as five different sources because five different people used five different naming conventions. Every variant splits the data into a separate row, and no amount of post-hoc cleanup fully fixes it.

UTM hygiene is not glamorous work. But dirty parameters compound every month you do not fix them, and they undermine every report that depends on source and medium data.

What UTM parameters actually do

UTM parameters tell GA4 where a visitor came from when the referrer alone is not enough. GA4 automatically detects organic search, direct traffic, and standard referrals. UTMs are for everything else: paid campaigns, email newsletters, social posts, QR codes, partner links, and offline-to-online bridges.

The five parameters, in order of importance:

  • utm_source (required): the platform or sender. Where did the click come from? Examples: google, facebook, newsletter
  • utm_medium (required): the marketing medium. What type of channel is this? Examples: cpc, email, social, display
  • utm_campaign (recommended): the campaign name. Examples: spring-sale-2026, brand-awareness-q3
  • utm_term (optional): the paid keyword. Mostly legacy since Google Ads auto-tags through gclid
  • utm_content (optional): content differentiation for A/B testing. Examples: hero-banner, sidebar-cta

Rule 1: Lowercase everything

UTM parameters are case-sensitive in GA4. utm_source=Google and utm_source=google are different sources. utm_medium=CPC and utm_medium=cpc are different mediums. One uppercase letter splits your data into two rows.

The fix is simple and absolute: lowercase every UTM value, always. No exceptions. If you are building URLs in a spreadsheet, add a formula that forces lowercase. If you are generating UTMs programmatically, apply a lowercase function before appending. If you are trusting humans to remember, you will be cleaning up the data in six months.

Rule 2: Use GA4's recognized medium values

GA4 has a built-in channel grouping that maps source/medium combinations to channels like Paid Search, Email, and Display. This mapping depends on specific medium values. If you use a non-standard medium, your traffic lands in "(Other)" instead of the correct channel.

Medium valueGA4 channel group
cpc or ppcPaid Search
display or bannerDisplay
social or social-mediaOrganic Social
paid-social or paidsocialPaid Social
emailEmail
affiliateAffiliates
referralReferral
videoVideo

If you use utm_medium=paid instead of utm_medium=cpc, your Google Ads traffic falls out of Paid Search and into (Other). If you use utm_medium=newsletter instead of utm_medium=email, your email traffic disappears from the Email channel. Stick to the standard values.

Rule 3: Source is the platform, medium is the type

The most common mistake is conflating source and medium. The distinction:

  • Source answers "where": google, facebook, mailchimp, linkedin
  • Medium answers "how": cpc, email, social, display

Wrong: utm_source=paid-search&utm_medium=google (reversed).

Wrong: utm_source=google-ads&utm_medium=search (medium encoded into source).

Right: utm_source=google&utm_medium=cpc. Google is the platform; CPC is the channel type.

When you follow this convention, GA4's source/medium report becomes genuinely useful: filter by medium to see all email traffic regardless of platform, or filter by source to see everything from a specific partner.

Rule 4: Campaign names need a convention

The utm_campaign field is where naming conventions matter most. Without one, the same campaign ends up as "Spring Sale", "spring-sale", "spring_sale_2026", and "springsale" — four separate rows in GA4.

A useful convention includes the information you will want to filter on later:

[year]-[quarter]-[channel]-[campaign-name]

Examples: 2026-q1-search-brand-terms, 2026-q2-social-product-launch, 2026-q3-email-retention-series.

Use hyphens as separators, never spaces (they become %20 in URLs), never underscores (hard to distinguish from hyphens in reports). Keep everything lowercase. The specific convention matters less than having one, documenting it, and enforcing it.

Rule 5: Do not UTM Google Ads links

Google Ads has its own click tracking parameter: gclid (Google Click Identifier). When auto-tagging is enabled (it is by default), Google appends gclid to every ad click, and GA4 uses it to attribute the session to the correct campaign, ad group, and keyword.

If you also add UTM parameters to your Google Ads URLs, you create a conflict. GA4 sees both gclid and UTMs and has to choose. The result is unpredictable and often wrong. Let gclid handle Google Ads attribution. Reserve UTMs for channels that do not have their own click tracking: email, organic social, partner links, QR codes. For details on how the gclid and UTM interaction works, see Google's documentation on campaign data sources.

Common mistakes and how to spot them

The (not set) problem. This means GA4 received UTM parameters but could not parse them. Common causes: misspelled parameter names (utm_souce), malformed URLs (double question marks), or UTMs placed after a URL fragment (#). Check the (not set) / (not set) row in your source/medium report — if it has significant volume, some URLs are broken.

Parameter sprawl. Different team members create different values for the same thing: fb, facebook, Facebook, instagram. Each variant fragments the data. The fix: maintain a controlled vocabulary that lists every approved source, medium, and campaign pattern. New values need approval.

Redirect stripping. URL shorteners, email service providers, and some social platforms can strip query parameters during redirect. Test every distribution channel by creating a UTM-tagged URL, sending it through the actual delivery mechanism, clicking it, and verifying the parameters arrive intact in GA4's Realtime report.

Cross-domain issues. If the client's site spans multiple domains, UTM parameters can get re-triggered on cross-domain navigation. Set up cross-domain measurement in GA4 so sessions persist across domains without re-triggering attribution.

  • All UTM values are lowercase with no exceptions

  • Medium values match GA4's recognized channel groupings (cpc, email, social, display)

  • Source is the platform (google, facebook), medium is the channel type (cpc, email)

  • Campaign names follow a documented convention (year-quarter-channel-name)

  • No internal site links carry UTM parameters

  • Google Ads URLs rely on gclid auto-tagging, not manual UTMs

  • A controlled vocabulary document exists and is accessible to everyone who builds URLs

  • Monthly audit of the source/medium report for variants and (not set) entries

Why this matters for reporting

Clean UTM data is the foundation of every source/medium report you build. When parameters are consistent, you can answer questions like "How much traffic did email drive this quarter?" or "Which social platform produces the most engaged visitors?" by simply filtering on medium or source.

When parameters are dirty, none of those queries work. Email traffic is split across email, Email, newsletter, and eblast. Social traffic is fragmented. Campaigns are named inconsistently and cannot be compared.

The fifteen minutes you spend setting up a UTM convention and URL builder saves hours of data cleanup every month for the life of the engagement. Clean UTM hygiene means clean source/medium data in tools like SyncingBeam, which pulls from GA4 daily — garbage in at the UTM level means garbage out in every downstream dashboard and report. It is the highest-ROI analytics task you can do, and it requires zero technical skill. Just discipline. When your UTMs are clean, cross-source comparisons become far more reliable because GA4 can correctly attribute traffic to each channel.

Are UTM parameters case-sensitive in GA4?
Yes. GA4 treats utm_source=Google and utm_source=google as two different sources. Always use lowercase for all UTM values to avoid splitting your data.
Should I add UTM parameters to Google Ads URLs?
No, not if auto-tagging (gclid) is enabled, which it is by default. Adding UTMs alongside gclid creates a conflict that can produce incorrect attribution. Let gclid handle Google Ads tracking.
What happens if I use utm_medium=newsletter instead of utm_medium=email?
Your email traffic will fall into GA4's (Other) channel group instead of the Email channel, because GA4's default channel grouping does not recognize newsletter as a standard medium value.
How do I track clicks on internal site links without UTMs?
Use GA4 custom events with parameters that identify the click location and destination. This tracks internal engagement without overriding the visitor's original traffic source attribution.
How often should I audit UTM parameters?
Monthly. Pull the source/medium report and look for variants of the same source, non-standard medium values, convention violations in campaign names, and (not set) sessions that indicate broken URLs.

← All articles