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 value | GA4 channel group |
|---|---|
| cpc or ppc | Paid Search |
| display or banner | Display |
| social or social-media | Organic Social |
| paid-social or paidsocial | Paid Social |
| affiliate | Affiliates |
| referral | Referral |
| video | Video |
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.