Data quality

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):

ParameterWhat it holdsExample
utm_sourceWho sent the visitnewsletter, google, partner-blog
utm_mediumThe kind of trafficemail, cpc, social
utm_campaignThe campaign or promotionautumn-sale
utm_termThe paid keywordrunning+shoes
utm_contentWhich link or ad versionheader-button
utm_idA campaign ID, used to match imported cost dataau-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.

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.

Start free trial

30 days of Plus, free from sign-up. No card needed.

Sign in with Google or a work or school Microsoft account.

Add to Google Sheets

Prefer to stay in Google Sheets? Add the add-on and start from the Extensions menu.