UTM parameters: what they are and how to name them
UTM parameters are tags on the end of a link that tell Google Analytics where a visit came from.
Click a link ending in ?utm_source=newsletter&utm_medium=email and GA4 records that session as coming from your newsletter, by email, instead of guessing.
They matter most for traffic analytics cannot identify on its own: emails, social posts, QR codes, and ad platforms that aren't linked to your GA4 property. An untagged visit from an email app often arrives with no referrer at all and lands in Direct.
The parameters
Google Analytics 4 reads these (Google Analytics Help, Collect campaign data with custom URLs):
| Parameter | What it holds | Example |
|---|---|---|
| utm_source | Who sent the visit | newsletter, google, partner-blog |
| utm_medium | The kind of traffic | email, cpc, social |
| utm_campaign | The campaign or promotion | autumn-sale |
| utm_term | The paid keyword | running+shoes |
| utm_content | Which link or ad version | header-button |
| utm_id | A campaign ID, used to match imported cost data | au-2026-01 |
GA4 needs at least one, but Google's advice is to always set utm_source, utm_medium and utm_campaign together. A full link looks like this:
https://www.example.com/sale?utm_source=newsletter&utm_medium=email&utm_campaign=autumn-sale
How utm_medium decides the channel
GA4 sorts every session into a default channel group (Organic Search, Paid Search, Email, Organic Social and so on) by rules that look mostly at source and medium (Google Analytics Help, Default channel group). The rules can't be edited, so your tags have to fit them. A medium of email lands in Email; cpc from a search engine lands in Paid Search. A medium the rules don't recognise, such as newsletter-2026 sent with a source of newsletter, lands in Unassigned, where it helps nobody.
The channel rules ignore case, but the values in your reports don't: Google notes that parameter values are case sensitive, so utm_source=google and utm_source=Google show up as two sources.
Where it goes wrong
Inconsistent spelling. autumn-sale, Autumn Sale and autumn_sale are three campaigns in GA4. Pick lowercase, pick one separator, and write the rules down where the whole team can see them.
Inventing mediums. The medium is a category, not a description. Put the detail (which list, which post) in utm_campaign or utm_content and keep utm_medium to a short, fixed list that matches the channel rules.
Tagging links on your own site. UTM tags are for links that bring people in from elsewhere. Tag a banner on your own homepage and the sale can end up credited to your homepage instead of the place the visitor came from.
Build links in a spreadsheet
A tab with one row per link keeps the naming consistent. With the page URL in A2, source in B2, medium in C2 and campaign in D2:
=A2&"?utm_source="&ENCODEURL(LOWER(B2))&"&utm_medium="&ENCODEURL(LOWER(C2))&"&utm_campaign="&ENCODEURL(LOWER(D2))
LOWER removes the capitals problem and ENCODEURL makes spaces and symbols safe in a link. If a page URL already contains a ?, join with & instead.
Keeping it current
A scheduled Fresh Sheets report can keep Google Analytics 4 Sessions by Channel group, Session source and Session campaign in a tab of its own, for example one called GA4. It replaces that tab's contents on every refresh, so keep checks like this one on a separate tab. It finds each column by its heading, so it still works if a field is added and the columns move, and it shows how many sessions this period fell into Unassigned:
=SUMIF(INDEX('GA4'!A:Z, 0, MATCH("Channel group", 'GA4'!1:1, 0)), "Unassigned", INDEX('GA4'!A:Z, 0, MATCH("Sessions", 'GA4'!1:1, 0)))
A number that grows is a tag somebody invented.