UTM naming convention: a practical template and how naming changes break reports
A UTM naming convention is a fixed set of rules for the values in utm_source, utm_medium and utm_campaign (plus utm_id, utm_content and utm_term): lowercase only, one value per platform and channel, and a set pattern for campaign names. It keeps GA4 traffic in the right channel and stops one campaign splitting into several rows.
What is a UTM naming convention and why does it matter?
A UTM naming convention is the written rulebook your team follows every time it tags a link: which parameters to fill, which values are allowed and how campaign names are built. Without one, the same campaign shows up under three spellings and nobody trusts the acquisition report.
GA4 reads the UTM values literally. Google's help page on custom campaign URLs says parameter values are case sensitive, so utm_source=google and utm_source=Google are two different sources, and SpringSale and Spring_Sale are two different campaigns. Every inconsistent value becomes an extra row you have to add up by hand.
The second reason is channel grouping. GA4 decides whether a session counts as Paid Search, Paid Social, Email or Display by reading source and medium against fixed rules. A medium value that matches none of them sends traffic to the wrong channel or to Unassigned. So a naming convention is not tidiness for its own sake: it decides which channel gets the credit in every report your client sees.
Which UTM parameters should every link include?
Always set utm_source, utm_medium and utm_campaign; Google also strongly recommends utm_id and utm_source_platform. Missing parameters show up as (not set) in GA4 reports.
| Parameter | What it holds | Convention example |
|---|---|---|
utm_source | Where the click came from | google, facebook, instagram, newsletter |
utm_medium | The channel type | cpc, paid_social, email, display, affiliate |
utm_campaign | The campaign name | 2026-11_black-friday_uk |
utm_id | A campaign ID | bf26-uk-01 |
utm_content | The creative or link variant | video-15s_v2 |
utm_term | The paid keyword | running-shoes |
Two parameters exist but don't help reporting today: utm_creative_format and utm_marketing_tactic are, per Google, not currently reported in Google Analytics properties. You can add them for your own records, but don't build a report around them.
One more detail that trips people up: GA4 strips UTM parameters from the Page path + query string dimension. If you want to see the full tagged URL, look at Page location.
Read also: GA4 unassigned traffic: what causes it and how to find the change behind it · Marketing change log: what it is and how to keep one
What does a good UTM naming convention look like?
A good convention is short enough to remember, strict enough to leave no choice, and written down where everyone can see it. These rules cover most teams:
- Lowercase everything. Google recommends lowercase as standard practice because case differences create separate values.
- One source per platform. Pick
facebookorfb, never both. Google suggests separate sources for sub-platforms, such as Facebook and Instagram. - One medium per channel, chosen to match GA4's rules. GA4 puts manual traffic into Paid Search or Paid Social only when the medium matches the pattern
^(.*cp.*|ppc|retargeting|paid.*)$. Socpcandpaid_socialwork;facebook_adsorboosteddo not. - One separator, one order. For example:
date_name_market, with hyphens inside a part and underscores between parts. - Campaign name = the name in the ad platform. Google recommends the exact campaign name so one effort doesn't split across rows.
- No spaces or special characters. They get encoded and are easy to mistype.
Email is the forgiving channel: GA4 counts a session as Email when source or medium matches email, e-mail, e_mail or e mail. Display expects a medium such as display, banner or cpm, and Affiliates expects exactly affiliate. Write those values into the convention so nobody invents a new one.
Keep the convention in a shared sheet with an allowed-values list per parameter and a column that builds the URL. Google's own Campaign URL Builder is fine for one-off links, but a sheet with dropdowns stops free typing.
How do naming changes break your reports?
A naming change rarely looks like a naming change in the data. It looks like a performance change: one channel falls, another rises, or a campaign's results vanish.
The common patterns:
- Channel shift. Someone tags paid Meta links with
utm_medium=social. GA4's Organic Social rule accepts that medium, so paid traffic now looks organic and Paid Social seems to collapse. - Unassigned spike. A new medium like
influencerorsms-promomatches no channel rule, so GA4 files the sessions as Unassigned. - Split campaigns. A new team member writes
Black-Fridayinstead ofblack-friday. The campaign now has two rows, each looking half as good. - (not set) rows. A link template loses
utm_campaignduring a site or email tool change, and sessions arrive with no campaign. - Tracking template edits. In Google Ads, a tracking template can sit at keyword, ad, ad group, campaign or account level, and the most specific one wins. Google notes that template changes take 24–48 hours to be reflected in serving ads, so the effect starts a day or two after the edit.
All of these are invisible in the ad platform, which still reports the same clicks. The gap shows up only in GA4, which is why the cause is so often missed. If GA4 itself looks off, start with how to tell a tracking problem from a real traffic loss.
How do I prove which change caused the jump in Unassigned or (not set)?
Find the first day the odd value appeared, then line up every change made in the days before it: UTM templates, new campaigns, email tool settings, tracking templates, site releases. The cause is almost always a change that went live on that day or one to two days earlier.
- Find the first day of the shift
- Pull the new source/medium values
- Line up the changes from that week
- Match the new value to one change
- Fix it and log the fix
In GA4, open Acquisition > Traffic acquisition, switch the dimension to Session source/medium and compare the week before and after the shift. A new value that appears on the exact day traffic moves between channels is your lead. Then check the campaign names in Session campaign for duplicates in different spellings.
With every change on one timeline, you would see that the Meta ad sets relaunched on Tuesday carried a new URL parameter, the same day Paid Social fell and Organic Social rose. In Changeline, Google Ads edits are imported automatically with before and after values, and the team logs the rest (a new UTM template, an email tool switch, a convention update) with date, owner and reason, so the match takes minutes instead of a day of guessing.
Example: A client asks why Paid Social sessions fell 40% in March while Organic Social doubled. Spend and clicks in Meta Ads Manager were flat. Lining up the changes from that week showed one entry on 4 March: a freelancer had launched new ad sets withutm_medium=socialinstead ofpaid_social. The traffic never left; it moved channel. Fixing the medium restored the split from the next day. (Names and numbers are illustrative.)
- 4 MarMeta AdsNew ad sets with utm_medium=social
- From 4 MarPaid Social −40%, Organic Social ×2
Paid Social sessions per day4 Mar: −40%
Once the cause is confirmed, record it with an annotation in GA4 so the dip doesn't get re-investigated next quarter.
How do I enforce the convention across the team?
Remove free typing wherever you can, and make the convention the only easy path.
- Use dynamic values where the platform supports them. Google recommends dynamic UTMs to reduce manual errors. In Google Ads, ValueTrack parameters such as
{campaignid},{adgroupid},{keyword}and{device}fill in values at click time. - Set templates at the broadest sensible level. An account-level tracking template covers every campaign unless a more specific one overrides it, so audit lower-level templates before you rely on the account one.
- One owner for the convention. New values are added by that person only, and the change is logged.
- A builder sheet with dropdowns. Source, medium and market come from lists; only the campaign descriptor is typed.
- A monthly check. Export source/medium from GA4 and flag any value not on the allowed list.
Treat every convention update as a change like a bid or budget edit: date, owner, what changed, why. A simple marketing change log template is enough to start.
How do I change a UTM convention without losing comparability?
Change it on a fixed date, in one go, and keep a mapping from old to new values. A convention rolled out gradually leaves weeks of mixed data that no report can line up.
- Write the old-to-new mapping (for example
fb→facebook,social-paid→paid_social). - Pick a switch date at the start of a week or month and update every template, sheet and saved link on that day.
- Log the switch in your marketing change log, with the mapping attached.
- In reports that span the switch, group old and new values together, or compare channels rather than raw source/medium rows.
The log entry matters most a year later. When someone compares this November with last November and sees a channel shift, the switch date explains it in one line instead of a week of digging.
Know which tag change broke your conversions
Changeline puts your team’s changes, imported Google Ads changes and site, tracking and CRM edits on one timeline per client.
Free plan: 1 project, 2 editors, 15 days of history. No card.
FAQ
Are UTM parameters case sensitive in GA4?
Yes. Google states that parameter values are case sensitive, so utm_source=google and utm_source=Google are reported as two different sources. Use lowercase for every value and keep an allowed-values list so the same platform or campaign is always written the same way.
What should utm_medium be for paid social ads?
Use a value that matches GA4's paid pattern, such as paid_social or cpc. GA4 counts manual traffic as Paid Social only when the source is a social site and the medium matches ^(.*cp.*|ppc|retargeting|paid.*)$. A medium like social is read as Organic Social instead.
Why is my traffic showing as Unassigned in GA4?
Unassigned is what GA4 uses when a session matches none of its default channel rules. With manual tagging this usually means a medium value GA4 doesn't recognise, such as influencer or sms-promo. Map those to an accepted medium, or create a custom channel group.
Where do I see UTM values in GA4?
Open Acquisition > Traffic acquisition and set the table dimension to Session source/medium, Session source, Session medium or Session campaign. GA4 removes UTM parameters from Page path + query string, so if you need the full tagged URL, use the Page location dimension instead.
How do I fix old UTM data that used the wrong names?
You can't rewrite past GA4 data, but you can group it. Keep an old-to-new mapping, combine both values in Looker Studio or exploration filters, and log the date of the convention switch so anyone comparing periods knows why the values changed.