ULTRO NOTES Published

UTM Parameters: GA4 Guide, Builder and Naming Conventions

All nine UTM parameters from utm_source to utm_marketing_tactic, a naming convention table you can use per channel, how they map to GA4's channel groups, and what to watch for with Google Ads and Shopify.

In shortUTM parameters need three values: utm_source, utm_medium and utm_campaign. Keep every value lowercase, and choose utm_medium to match the rules of GA4's default channel groups so email, social and ads land in the right channels in your reports.

You send emails, post on social and run ads, yet GA4’s reports are topped by Direct and Unassigned. Most of the time, that comes down to how UTM parameters are added and how their values are chosen.

This guide covers the nine UTM parameters, a naming convention you can use as is for each ecommerce channel, how values map to GA4’s default channel groups, and what to watch for with Google Ads and Shopify. Screen names are as of October 2026.

What are UTM parameters?

UTM parameters are a string you add to the end of a link to say where the visit came from. Google Analytics reads the values and records them as source, medium and campaign.

https://example.com/lp/?utm_source=klaviyo&utm_medium=email&utm_campaign=2026_autumn_sale

Everything after ? is parameters, joined with &. You add them to links you control: emails, social posts, ads, QR codes, and links in guest posts on other sites.

The 9 UTM parameters and their GA4 names

GA4’s help lists nine parameters for manual tagging. In practice you use the top three every time, and most teams never touch the last four.

Here’s how the three required ones travel from the URL to GA4.

How GA4 records the three UTM values. At the end of the URL, utm_source=klaviyo becomes Manual source (where the visit came from), utm_medium=email becomes Manual medium (the type of channel), and utm_campaign=2026_autumn_sale becomes Manual campaign name (the name of the campaign). GA4 uses the utm_medium value to assign a channel: email lands in the Email default channel group, while a made-up value matches no channel and falls into Unassigned. Keep every value lowercase
The three UTM values and how GA4 records them (As of October 2026. Created by ULTRO Inc. based on Google Analytics Help. Click the image to enlarge.)

All nine are listed below.

ParameterGA4 dimensionRequiredWhat goes in it
utm_sourceManual sourceYesWhere the visit came from (klaviyo, instagram, bing)
utm_mediumManual mediumYesThe type of channel (email, cpc, social)
utm_campaignManual campaign nameYesThe campaign name (2026_autumn_sale)
utm_termManual termNoThe search keyword
utm_contentManual ad contentNoVariations within a campaign (hero_banner, text_link)
utm_idManual campaign IDNoAn ID to join with data import
utm_source_platformManual source platformNoThe platform used to run the campaign
utm_creative_formatNot currently reported in GA4NoThe format, such as video or carousel
utm_marketing_tacticNot currently reported in GA4NoThe tactic, such as retargeting

The three marked required are the ones Google’s help says you should always use: utm_source, utm_medium and utm_campaign.

utm_content tends to get ignored, but it’s what tells you whether people clicked the header image or the text link in the same email. Starting it after someone asks “which creative worked?” is too late, so it’s easier to include it from the start.

Naming conventions: three rules

1. Use lowercase for everything

GA4 treats values as case-sensitive; its help says utm_source=google and utm_source=Google are different. If Facebook, facebook and FB are mixed, the same platform shows up as three rows in your source and medium reports, and adding them up takes manual work. (GA4’s channel definitions aren’t case-sensitive, so the channel still comes out right. It’s the source and medium rows that split.)

If several people create links, don’t rely on “lowercase only” as a verbal rule. Keep one sheet that builds the tagged URLs, and have everyone copy from it.

2. Use only letters, numbers and underscores

Spaces and special characters get URL-encoded into something hard to read. Pick either underscores (_) or hyphens (-) as your separator and don’t mix them.

3. Don’t make up utm_medium values

This is the most important rule. GA4 uses the utm_medium value directly to assign a channel. A value you invent matches no channel and falls into Unassigned.

UTM parameters and GA4 default channel groups

Here are the GA4 channel rules ecommerce stores use most, taken from GA4’s help. Put one of these values in utm_medium and traffic lands in the channel you intend.

Channel you wantValue for utm_mediumCondition on source
EmailemailSource or medium is email (or e-mail and similar)
SMSsmsSource or medium is exactly sms
Paid SearchContains cp (such as cpc), starts with paid, or is ppc or retargetingSource matches GA4’s list of search sites
Paid SocialSame as Paid SearchSource matches GA4’s list of social sites
Organic Socialsocial, social-network, social-media, smOr source matches the list of social sites
Displaydisplay, banner, cpm—
Affiliatesaffiliate—
Referralreferral, app, link—
Cross-network—Campaign name contains cross-network

Paid Search and Paid Social are the ones to watch: utm_medium alone doesn’t decide them. GA4 also checks whether utm_source is a search site or a social site. If you tag Meta ads with utm_source=meta, meta isn’t guaranteed to be on GA4’s list of social sites, so the traffic may land in Paid Other instead of Paid Social. A value close to the platform’s domain, such as utm_source=facebook or utm_source=instagram, is safer.

Here’s the same logic as a flowchart:

Decision flow for which GA4 channel paid traffic lands in. If utm_medium doesn't contain cp, start with paid or equal ppc, it isn't Paid Search or Paid Social and other channel rules such as Email or Display apply. If it does, and utm_source is on GA4's list of search sites, it's Paid Search; if it's on the list of social sites, it's Paid Social. If neither, it may land in Paid Other. utm_source=meta may not be on the list of social sites, so values close to the platform's domain, such as facebook or instagram, are safer
How paid traffic is sorted into channels (As of October 2026. Created by ULTRO Inc. based on Google Analytics Help. Click the image to enlarge.)

One more trap for stores: GA4’s Paid Shopping and Organic Shopping rules also match a campaign name containing shop or shopping. A paid campaign named summer_shop_launch with utm_medium=cpc can end up in Paid Shopping rather than Paid Social. Avoid those words in campaign names unless you mean it.

UTM naming convention cheat sheet for ecommerce

Where the link goesutm_sourceutm_mediumNotes
Email (Klaviyo, Shopify Messaging, etc.)Tool nameemailTools can often add these automatically
SMSTool namesmsKeep separate from email
Instagram posts and storiesinstagramsocialAdd them to your profile link too
TikTok poststiktoksocial—
Meta adsfacebook / instagramcpcSo they land in Paid Social
Google AdsDon’t addDon’t addLeave it to auto-tagging (see below)
AffiliatesNetwork nameaffiliate—
QR codes on print and package insertsprintqr or anythingFree choice if Unassigned is fine; use referral to classify it
Press and other publicationsPublication namereferral—

QR codes are the one row marked “anything” because GA4’s default channel groups have no channel for print. Rather than forcing it into an existing channel, create a custom channel group and view it separately.

UTM builder

Enter the destination URL and the three values to build a tagged URL. You’ll see a warning if there are uppercase letters or other characters. The defaults are the example from the top of this article.

Destination
The three required values

The URL is built entirely in your browser, and nothing you enter is sent anywhere. Don't use this for Google Ads links (the reason is in a section below).

If the destination URL already has a ?, the builder joins with &, and anything after # (a position on the page) stays at the end. The utm_medium warning only checks whether the value appears in the tables above.

First, a common explanation that’s wrong: “UTMs on internal links split sessions and break tracking” was true of Universal Analytics. It doesn’t happen in GA4.

How GA4 handles a click on an internal link with UTMs. Clicked mid-session, the source isn't overwritten, because a session's source comes from its session_start event, and nothing is added to your reports. Clicked after a 30-minute gap ended the session, the new session's source becomes that UTM value, so you record your own site as the traffic source. Either way, leave them off, and measure on-site banner clicks with events using GA4's enhanced measurement or a GTM click trigger
How GA4 handles UTMs on internal links (As of October 2026. Created by ULTRO Inc. based on Google Analytics Help. Click the image to enlarge.)

Google’s help spells this out as a difference between UA and GA4.

How sessions are handled
Universal AnalyticsPicking up new campaign parameters on the site starts a new session
GA4A session doesn’t restart at midnight or when new campaign parameters are encountered

Session attribution lives on the session_start event, which Google’s help says carries the information that determines a session’s attribution, such as the GCLID parameter, UTM parameters and the referring URL. In other words, clicking an internal link with UTMs mid-session doesn’t overwrite that session’s source.

Even so, leave them off, for two reasons.

First, they don’t tell you anything. The source doesn’t change, so nothing is added to your reports.

Second, they cause real damage when clicked after a session ends. If 30 minutes pass, the session times out, and the visitor resumes through that link, the new session’s source becomes that UTM value: your own site. You end up recording yourself as the traffic source.

To find out which on-site banner was clicked, use events (click tracking), not UTMs. GA4’s enhanced measurement or a GTM click trigger does the same job without touching sessions. See GA4 events and Google Tag Manager for how.

What happens when you add manual UTMs to Google Ads

GA4’s reports don’t change. If you look at sales in Shopify, add them anyway. Most guides stop at “it’s pointless, don’t,” and miss what happens on the Shopify side.

Auto-tagging wins in GA4

Google’s help says that when you use manual tagging and auto-tagging together, GA4 uses the auto-tagged values for traffic-source dimensions such as source and medium.

With auto-tagging on, Google Ads adds a gclid to the URL at click time. From the gclid, GA4 receives the campaign, ad group and keyword, which is more than manual UTMs carry, so those values are used. Adding utm_source=google&utm_medium=cpc to your Google Ads URLs doesn’t change source / medium in GA4. Google’s help says manually tagged values are still used for the Manual ad content and Manual term dimensions. For how the click ID works, see What Is GCLID?

Shopify doesn’t read the gclid

This is the catch. Open Shopify’s UTM-based reports and Google Ads traffic is missing. GA4 reconstructs campaign information from the gclid, but Shopify doesn’t, so visits without UTMs in the URL don’t show up in those reports.

Side by side with GA4:

How GA4 and Shopify's UTM reports read a Google Ads click with auto-tagging on. Without UTMs, GA4 reads the gclid and gets the campaign, ad group and keyword, but the click doesn't appear in Shopify's UTM reports because Shopify doesn't read the gclid. With UTMs added, GA4 doesn't change because auto-tagged values are used and nothing doubles or breaks, and the click appears in Shopify's UTM reports so you can see sales by UTM
How GA4 and Shopify read a Google Ads click (As of October 2026. Created by ULTRO Inc. based on Google's help and checks in the Shopify admin. Click the image to enlarge.)

Shopify’s help doesn’t describe how it determines traffic sources, so we can’t point to official confirmation. It’s behavior we’ve verified in the Shopify admin of our client stores.

If you want Shopify sales by UTM, add UTMs through Google Ads’ final URL suffix or tracking template. GA4 still uses the auto-tagged values, so having both doesn’t double or break anything in its reports.

Check other platforms’ click IDs before deciding

For other click IDs, such as Microsoft Advertising’s msclkid or Meta’s fbclid, we couldn’t find anything in GA4’s help that describes them the same way. Don’t assume they behave like the gclid. Look at how source / medium actually appears in your reports, and add UTMs where a platform’s traffic isn’t classified the way you want.

When checkout or forms run on another domain

A common reason UTMs stop working on ecommerce sites is a cart, checkout or form on a different domain.

When the buyer returns from the payment page, GA4 treats that domain as a new referral, and the conversion is credited to the payment provider’s domain. Top-ranking guides rarely mention it, but however carefully you design your UTMs, leaving this gap open makes your ad results disappear.

There are two fixes in GA4 Admin:

  1. List unwanted referrals: add the payment or form domains so they aren’t counted as sources.
  2. Configure your domains: treat visits across several domains you own as one visit.

Both are under Admin > Data collection and modification > Data streams > your web stream > Configure tag settings. Configure your domains appears in the Settings list; List unwanted referrals appears once you click Show more.

The Settings list of the Google tag in GA4, fully expanded. It includes Manage automatic event detection, Configure your domains, Define internal traffic, List unwanted referrals, Adjust session timeout and Override cookie settings. List unwanted referrals and Adjust session timeout are highlighted
The Google tag's Settings list, with Configure your domains and List unwanted referrals (Screen as of October 2026. Click the image to enlarge.)

For the steps and which domains to add, see GA4 Referral Exclusion.

These two settings fix the source of purchases that reach GA4. A purchase where the buyer never came back from the external payment provider doesn’t reach GA4 at all. To check how many are missing, see GA4 Not Tracking All Shopify Purchases? We built a Shopify app, GapFill, for this. It’s our own product, so keep that in mind. It recovers missing GA4 purchase events server-side, works alongside your existing tags, and the missing purchases report is free.

Our Shopify appGapFill: Recover missing GA4 purchase events server-sideWorks alongside your existing tags. Free missing purchases report.See GapFill →

How to check UTM parameters in GA4

Check your reports the day after you send.

Open the Traffic acquisition report (under Reports > Business objectives > Generate leads, or under Life cycle > Acquisition, depending on your property’s setup). The table shows Session primary channel group (Default Channel Group).

GA4 Traffic acquisition report with Session primary channel group (Default Channel Group) as the dimension. The rows list Direct, Organic Social, Unassigned, Paid Other, Organic Search, Referral, AI Assistant, Organic Shopping, Email and Paid Social, and the AI Assistant row is highlighted. Numbers are hidden
Traffic acquisition by Session primary channel group. Unassigned and Paid Other appear here too (Screen as of October 2026. Click the image to enlarge.)

Check that traffic landed in the channels you intended. If Unassigned is growing, suspect your utm_medium values. Switch the dimension at the top left of the table to Session source / medium to see the values that were actually sent.

GA4 Traffic acquisition report with Session source / medium as the dimension. The rows include (direct) / (none), product_page / (not set), google / organic and others, and near the bottom a row that is (not set) for both. Numbers are hidden
The same report by Session source / medium, showing the values that were actually sent (Screen as of October 2026. Click the image to enlarge.)

If you see (not set) here, GA4 (not set) covers the causes. To break results down by utm_campaign or utm_content, create an exploration and search for the dimension names in the table above (Manual campaign name, Manual ad content and so on) to add them. See GA4 Explorations for how.

To check a URL right after sending, don’t wait for the standard reports: the Realtime report shows it within minutes.

For why GA4’s numbers don’t match your ad platforms or Shopify, see Attribution. Even with correct UTMs, a purchase that never reaches GA4 gets no credit; see GA4 Not Tracking All Shopify Purchases? for how to check.

The AI Assistant channel and UTMs

In 2026, GA4 added AI Assistant to its default channel groups. It automatically sorts traffic from generative AI such as ChatGPT and Gemini based on the referrer. According to GA4’s help, when the referrer matches the list of AI assistants, the medium is set to ai-assistant and the campaign to (ai-assistant).

We see AI Assistant in the channel list of our own property too (it’s in the screenshot above). For how to tell AI-driven visits and orders apart in GA4 and Shopify, see GA4 AI Assistant Channel.

The thing to avoid: don’t write utm_medium=ai-assistant yourself. GA4’s rule also matches a medium of exactly ai-assistant, so hand-tagged links get mixed in with real AI traffic and you can no longer tell which is which.

Common UTM mistakes

SymptomCommon cause
Lots of Unassignedutm_medium is empty or made up
The same platform shows up on two rowsInconsistent case or spelling (Facebook and facebook)
More sessions than you’d expectUTMs on internal links
Ad results land in DirectRedirects or link shorteners dropping the parameters
Conversions credited to the payment domainUnwanted referrals list not set up
Paid campaigns in Paid Shoppingshop or shopping in the campaign name
UTMs on Google Ads have no effect in GA4Auto-tagging takes priority (working as designed)

Some link shorteners don’t pass the query string through on redirect. Before you use one, click it and check that the parameters are still on the landing URL.

If you track email performance over time, make sure your email tool’s automatic UTMs don’t clash with your manual naming rules.

When you’re deciding what to improve across the site, look at the traffic breakdown alongside Ecommerce Conversion Rate.

Naming conventions can’t be unified retroactively: past data stays inconsistent. Settle them before you launch campaigns.

Sources

FAQ

Do I need all three UTM parameters?

Google's help says you should always use utm_source, utm_medium and utm_campaign. utm_medium in particular feeds directly into GA4's channel assignment, so leaving it out tends to put traffic in Unassigned.

Are UTM parameters case-sensitive?

Yes. Google's help says utm_source=google and utm_source=Google are different values. If Facebook and facebook are mixed, they show up as two separate sources in source and medium reports. GA4's channel definitions themselves aren't case-sensitive, so channel assignment still works, but keeping everything lowercase is the safe choice.

Can I use UTM parameters on internal links?

Don't, but not for the reason usually given. GA4 doesn't start a new session when campaign parameters change, so clicking one mid-session doesn't overwrite the source (sessions splitting was Universal Analytics behavior). You learn nothing from them, and if a session has timed out after 30 minutes and the visitor resumes through that link, the new session's source becomes your own site. Track on-site navigation with events instead.

If I add UTMs to Google Ads, which wins: auto-tagging (gclid) or the UTMs?

In GA4, auto-tagging wins. Google's help says that when you use both, the auto-tagged values are used for traffic-source dimensions such as source and medium. But Shopify's admin doesn't read the gclid, so Google Ads traffic without UTMs doesn't appear in Shopify's UTM-based reports. If you want Shopify sales by UTM, add manual UTMs even though GA4's reports won't change.

What is utm_id for?

It's an ID that identifies a campaign, used to join data when you upload ad costs or other campaign data to GA4. It should match the campaign ID in the data you import. If you don't use data import, you don't need it.

I launched a campaign with the wrong UTMs. Can I fix it afterwards?

You can't rewrite UTM values in data GA4 has already collected. Fix the URLs that are still live, then use a GA4 custom channel group to group the inconsistent values into the same channel so your reports read correctly again.

Key takeaways
  • utm_source, utm_medium and utm_campaign are required. utm_medium drives GA4's channel assignment.
  • Keep every value lowercase and stick to letters, numbers, underscores and hyphens. Different cases are counted as different values in source and medium reports.
  • Don't add UTMs to internal links. GA4 doesn't split the session, but they tell you nothing, and clicking one after a session times out makes your own site the source.
  • For Google Ads, auto-tagging wins in GA4 so its reports don't change. Shopify doesn't read the gclid, so add manual UTMs if you look at sales in Shopify.
  • If checkout or forms run on another domain, set up the unwanted referrals list as well.

Written byRyushi Nagata

CEO, ULTRO Inc. (Tokyo)

Shopify Partner. Ryushi handles Shopify store builds, maintenance, advertising and CRM end to end, and has managed more than ¥4 billion in ad spend over his career. He holds Google Ads certifications (Search, Display, Video, Shopping, Apps, Performance Max, Measurement) and the Google Analytics certification.

How many purchases is GA4 missing in your store?

GapFill matches your Shopify orders against GA4 purchases, shows what GA4 missed, and recovers those purchase events server-side. It works alongside your existing tags, and the missing purchases report is free.

See GapFill →