UTM Naming Convention 2026: GA4 Source and Medium Rules
The UTM values GA4 maps to each default channel, the tags that land in Unassigned or the wrong channel, and a lowercase naming convention your team can copy, QR codes included.
GA4 decides each visit's channel from your utm_source and utm_medium, and its reports treat those values as case sensitive. Use lowercase, join words with hyphens, pick mediums Google's default channel rules recognize (email, cpc, paid-social, display, affiliate, referral) and name campaigns yyyy-mm-name. Invented mediums such as qr or print land in Unassigned unless you add a custom channel group, so write the convention down and reuse saved templates.
- Values are case sensitive in GA4 reports, so use lowercase.
- Pick utm_medium values from Google's default channel rules.
- utm_medium=qr or print lands in Unassigned without a custom channel group.
- By our reading of the rules, paid ads tagged utm_medium=social land in Organic Social.
- With Google Ads auto-tagging on, skip manual source, medium and campaign tags.
Our UTM naming convention for GA4 comes down to four rules: use lowercase, join words with hyphens, pick utm_medium from values Google's default channel rules already recognize, and name campaigns yyyy-mm-name. GA4 uses your source, medium and campaign values to decide which channel each visit belongs to. A capital letter splits one campaign across report rows, and an invented medium like qr sends it to Unassigned, unless you add a custom channel group, as we recommend below.
The rules below come from Google's help pages and the ad platforms' own docs, checked September 2026. Where a point is our reading of how the rules apply, rather than something Google states, we say so.
Which UTM parameters does GA4 support?
GA4 reads nine UTM parameters, and Google's URL builder page sorts them by how much you need them:
| Parameter | What it's for (Google's examples) | Google's status |
|---|---|---|
utm_source | The referrer: google, newsletter4, billboard | Always use |
utm_medium | The marketing medium: cpc, banner, email | Always use |
utm_campaign | Product, slogan or promo code: spring_sale | Always use |
utm_id | Campaign ID | Recommended |
utm_source_platform | Platform sending the traffic: Search Ads 360 | Recommended |
utm_term | Paid keyword | Optional |
utm_content | Which creative: toplink | Optional |
utm_creative_format | display, native, video, search | Not reported |
utm_marketing_tactic | remarketing, prospecting | Not reported |
Google says the last two "are not currently reported in Google Analytics properties" (traffic-source dimensions), so don't build your convention around them. Any parameter you leave out shows as "(not set)". And once you set one UTM parameter, Google "strongly recommend[s]" setting all the relevant ones, especially source, medium, campaign, id and source platform.
How does GA4 turn utm_source and utm_medium into channels?
GA4 puts every session into a default channel group using rules on source, medium and campaign name. Google says these definitions "aren't case sensitive and can't be edited." Most rules hinge on the medium, plus a list of known sites that Google classes as social, video, search or shopping.
This is the UTM source and medium list that matters. The rules are summarized from Google's page; the last column is the medium we'd use.
| Channel | Google's rule for tagged traffic | Medium to use |
|---|---|---|
| Paid Shopping | Source on the shopping list or campaign name matches the shop pattern, and medium matches the paid pattern | Only on purpose |
| Paid Search | Source on the search list, medium matches the paid pattern | cpc |
| Paid Social | Source on the social list, medium matches the paid pattern | paid-social |
| Paid Video | Source on the video list, medium matches the paid pattern | cpc |
| Display | Medium is display, banner, expandable, interstitial or cpm | display |
| Paid Other | Medium matches the paid pattern (in practice, when no Paid Search, Shopping, Social or Video rule caught it first; Google doesn't publish the order) | Only on purpose |
| Organic Social | Source on the social list, or medium is social, social-network, social-media, sm, social network or social media | social |
| Organic Search | Source on the search list, or medium is exactly organic | Leave to GA4 |
| AI Assistant | Medium is exactly ai-assistant, which GA4 sets itself when the referrer is on its list of AI assistants | Leave to GA4 |
| Organic Video | Source on the video list, or medium contains video | Only on purpose |
| Source or medium is email, e-mail, e_mail or e mail | email | |
| Affiliates | Medium is affiliate | affiliate |
| Referral | Medium is referral, app or link | referral |
| SMS | Source or medium is exactly sms | sms |
| Audio | Medium is exactly audio | audio |
| Mobile Push | Medium ends with push or contains mobile or notification, or source is firebase | push |
| Organic Shopping | Source on the shopping list, or campaign name matches the shop pattern | Only on purpose |
| Cross-network | Campaign name contains cross-network | Only on purpose |
| Unassigned | No other rule matches | Fix with a custom group |
The "paid pattern" is the regex ^(.*cp.*|ppc|retargeting|paid.*)$. So cpc, ppc, retargeting and anything starting with paid count as paid. So does any medium containing the letters cp.
The "shop pattern" is the campaign-name regex ^(.*(([^a-df-z]|^)shop|shopping).*)$. It matches a campaign name containing shopping, or shop at the start of a word (shop-local, shopify) or right after an "e" (eshop).
The site list is short. Social includes fb, facebook, ig, instagram, linkedin, lnkd.in, tiktok, twitter, t.co, pinterest, reddit, whatsapp and messenger. Video is youtube. Search is google and bing. When we read the file in September 2026, x, x.com, threads, bluesky and chatgpt.com were missing. The file is undated, so check it again before relying on this. ChatGPT visits have their own route now: Google's AI Assistant channel covers referrals from assistants like ChatGPT, Gemini and Copilot.
One gap: Google doesn't say what order the rules run in. cpm fits both Display and the paid pattern, so use display for banner ads and skip the question.
Why should UTM values be lowercase?
GA4 treats UTM values as case sensitive in reports. Google's own example: "utm_source=google is different from utm_source=Google" (URL builders), and it recommends lowercase. TikTok's UTM best practices say the same.
Channel matching is different, because the channel rules aren't case sensitive. Our reading of the two statements together: utm_source=Facebook still lands in Organic Social, but your Source report shows Facebook and facebook as separate rows. The channel totals look right while the campaign detail quietly splits. Lowercase everything and the problem never starts.
What lands in Unassigned, and how do you fix it?
Google defines Unassigned as the value "Analytics uses when there are no other channel rules that match the event data" (default channel group). For tagged links, that usually means a medium no rule recognizes, like qr, print, flyer or newsletter, paired with a source that isn't on Google's list.
Sometimes the fix is a better value. utm_source=newsletter&utm_medium=email lands in Email. utm_medium=newsletter lands in Unassigned unless the source is on Google's list (our reading).
When you want a channel Google doesn't have, create a custom channel group. Standard properties get 2 custom groups (360 properties get 5), each with up to 50 channels. Rules are first-match: "Traffic is included in the first channel whose definition it matches given the current order of channels in the group." Custom groups apply retroactively, and you can set one as your primary channel group.
Which UTM values put traffic in the wrong channel?
These traps come from checking common tagging habits against Google's rules. Google doesn't state any of them; each is our reading of the rules above.
utm_source=xwith a paid medium lands in Paid Other. X isn't on the social list. Google's Source platform dimension does mapxwith a paid medium to X Ads, so the two classifiers disagree. Organic posts are fine:utm_medium=socialalone puts them in Organic Social.- LinkedIn's paid ad sample lands in Organic Social. LinkedIn's dynamic UTM docs use
utm_medium=socialfor paid ads. Useutm_medium=paid-socialwithutm_source=linkedinto match Google's Paid Social rule. utm_medium=qrorprintlands in Unassigned, unless the source is on Google's list or the campaign name triggers Shopping or Cross-network.- Some words in a medium change the channel.
mobile-qrbecomes Mobile Push, as does anything ending inpush.qr-videobecomes Organic Video. A medium containingcp, such ascpa, counts as paid. - Some words in a campaign name change the channel. A campaign name containing
shopping, orshopat the start of a word (2026-11-shop-local,shopify) or right after an "e" (eshop), can land in Organic Shopping, or in Paid Shopping with a paid medium. A name containingcross-networklands in Cross-network.
Should you use auto-tagging or manual UTMs for Google Ads and Microsoft Ads?
For Google Ads, keep auto-tagging on. Google says that when manual and auto-tagging are used together, "Google analytics uses the auto-tagged values." The same page adds a catch: "if any UTM parameter is present on the URL, Google Analytics will derive all cross-channel traffic source dimension values from UTM parameters, exclusively." It also says you can add utm_content and utm_term alongside the gclid.
Our reading: let auto-tagging supply source, medium and campaign on Google Ads, and don't add those three by hand. If you do add utm_content or utm_term, check your cross-channel reports afterwards.
Microsoft Advertising auto-tagging writes real UTMs into the URL: utm_source=bing, utm_medium=cpc, the campaign in utm_campaign, the ad group in utm_content and the keyword in utm_term. By the rules above, that lands in Paid Search. You choose whether auto-tagging replaces existing tags or only adds missing ones, and Microsoft warns that manual UTMs plus auto-tagging can produce duplicates. Pick one method per account.
What do LinkedIn, TikTok and Meta fill in automatically?
LinkedIn supports the dynamic values ACCOUNT_ID, ACCOUNT_NAME, CAMPAIGN_ID and CAMPAIGN_NAME, set at account or campaign level (LinkedIn help). The old CAMPAIGN_GROUP_* and CREATIVE_* names became AD_SET_* and AD_* from October 2025, and new or edited ad sets must use the new names. Set the medium yourself, as paid-social.
TikTok's UTM macros include __CAMPAIGN_NAME__, __CAMPAIGN_ID__, __AID_NAME__, __ADID_V2_NAME__ and __PLACEMENT__. Its auto-attach option fills "campaign source (TikTok), medium ('Paid'), ID, and name" (TikTok). We couldn't confirm the exact casing it writes into the URL. By the rules, tiktok plus paid should reach Paid Social in any case, but capitals would add rows to your Source report. Check a live ad URL.
We couldn't verify Meta's dynamic parameters on Meta's own help page, which didn't load for our check. Secondary sources such as Jon Loomer list {{campaign.name}}, {{adset.name}}, {{ad.name}}, {{placement}} and {{site_source_name}}, and say the last one returns fb, ig, msg or an. If that's right, msg and an aren't on GA4's social list, so paid clicks carrying them would land in Paid Other. Confirm in Ads Manager before relying on it.
One point applies to every platform: a name macro inserts the name you typed in the ad platform. Call a campaign "Fall Sale – Retargeting" and that's what reaches GA4. Renaming a campaign later may not change what the macro sends. Name campaigns inside each platform using your convention.
Should you put UTMs on internal links?
We found no current GA4 help page that says "never." The rule is common practitioner advice, from sites like Loves Data. Google's campaigns and traffic sources page explains the mechanics: when a new campaign value arrives mid-session, GA4 attaches it to those events, but it is "not associated with the existing session."
Our reading: tag a homepage banner and the session keeps the ad that brought it, while events after the click, including a purchase, carry your internal tag. Your campaign reports can then credit the banner. To measure internal promotions, use Google's recommended events view_promotion and select_promotion.
How should you tag QR codes and print?
Google has no official guidance on QR codes. Its only offline example is utm_source=billboard (URL builders). Analytics Mania suggests mediums like print, billboard, outdoor or packaging with the placement as the source, says the traffic will "probably" be Unassigned, and recommends a custom channel group. Practitioners also say an untagged QR code probably shows as Direct, because a scan usually arrives without a referrer.
The setup we recommend:
utm_medium=qron every printed code, so scans are one value you can filter.utm_sourceset to the placement:menu,flyer,packaging,billboard.utm_campaignin your normal format, withutm_contentfor versions or locations (table-tent-a).- A custom channel group with a channel called QR, rule "medium exactly matches qr", moved to the top.
The GA4 consequence: in the default channel group, these scans stay in Unassigned. In your custom group they show as QR, past data included, because custom groups apply retroactively. If you'd rather report all print as one channel, use utm_medium=print and match that instead. Either way, avoid mobile-qr and qr-video, and don't put utm_source=instagram on a poster, or the scans count as Organic Social.
A dynamic QR code lets you fix a tag after printing, because the tagged URL sits behind a redirect. A static code prints the tags into the pattern for good.
A UTM naming convention you can copy
Here's the whole convention in one block. Paste it wherever your team keeps its playbook.
``` UTM naming convention (GA4)
Format lowercase only; hyphens between words; no spaces one spelling per source: facebook, never Facebook or fb
utm_source where: google, bing, facebook, instagram, linkedin, tiktok, newsletter, menu, flyer utm_medium how, from this list only: cpc | paid-social | display | social | email affiliate | referral | sms | qr utm_campaign yyyy-mm-name, e.g. 2026-10-fall-menu utm_content creative or placement, e.g. carousel-b, table-tent-a utm_term paid keyword (search only) utm_id your campaign ID, if you track one
Never tag internal links hand-tag Google Ads (auto-tagging on) add a medium that isn't on the list put shop, shopping or cross-network in a campaign name by accident ```
Give the list one owner, and check the Unassigned channel once a month. A new row there usually means someone typed a value that isn't on the list.
Whooshly's UTM builder can save templates (up to 1,000 on Core), so everyone on a Core or Business team starts from the same source, medium and campaign values, and a tagged URL can go straight to a short link or QR code. A shared spreadsheet or any other builder can do the job too. What counts is that every link follows the same list, every time.