UTM Parameters Explained for Paid Media
UTM parameters are five pieces of text you bolt onto a landing page URL so analytics can tell one click apart from another. They are trivially simple and they are also the single most common thing an ad account gets wrong, because nothing stops you from typing anything at all.
This is what each one is for, what belongs in it, and the convention that survives contact with more than one person.
The parameters
| Parameter | Required | Answers | Example |
|---|---|---|---|
utm_source | Yes | Which property sent the click | google, facebook, newsletter |
utm_medium | Yes | What kind of marketing it was | cpc, paid_social, email |
utm_campaign | Strongly advised | Which campaign it belongs to | spring_offer_2026 |
utm_content | Optional | Which creative or placement | hero_a, carousel_3 |
utm_term | Optional | The keyword on paid search | {keyword} |
utm_id | Optional | Campaign ID for cost data imports | 1234567890 |
Only the first two do real work. utm_source and utm_medium together decide the channel group, and without both of them the session is credited to the referrer instead of to you. Everything else adds detail inside a channel you have already earned.
Source is not medium
Half of all broken tagging is this one confusion. The source is a property. The medium is a type of spend. Facebook is a source, paid social is a medium. Google is a source, cpc is a medium. Putting facebook_ads in the medium field sends the session to Unassigned, which is covered in detail in why GA4 shows unassigned traffic.
A convention that holds up
A convention is not about elegance. It exists so that two people tagging the same campaign in different weeks produce strings that group together in a report. Four rules do almost all of the work.
- Lower case, always. Analytics is case sensitive on source, campaign, content and term.
Spring_Saleandspring_salebecome two rows, two conversion counts, and one argument. - Underscores, never spaces. A space arrives in the report as
%20or a plus sign, and it can truncate the URL entirely in some ad servers. - A fixed medium per channel. Decide once that paid social is
paid_socialand write it down. This is the value that decides the channel group, so it is the one that cannot drift. - Dates in the campaign, not the medium.
spring_offer_2026tells you when.cpcshould never carry a date, a market, or a client name.
A workable shape for the campaign field is market, then quarter, then theme, joined by underscores: uk_q2_spring_offer. It sorts sensibly, it filters with a wildcard, and it reads the same to whoever inherits the account.
Where each value shows up
Knowing where a parameter lands stops people putting information in the wrong field.
utm_sourceandutm_mediumappear as Session source / medium and drive the Default channel group.utm_campaignappears as Session campaign.utm_contentappears as Session manual ad content. This is where creative level reporting comes from, so it is worth filling in even though it is optional.utm_termappears as Session manual term. On paid search it is normally a macro rather than a typed value.utm_idis the join key for imported cost data. If you are not importing cost, you do not need it.
Six mistakes that cost real data
- Tagging internal links. A UTM on a link between two pages of your own site starts a brand new session and overwrites the original source. Never tag internal navigation.
- Tagging your own email signature or a QR code, then forgetting. Use a source that will still make sense in a year.
- A space or an ampersand inside a value. An unescaped
&ends the parameter and everything after it becomes a new one. - Duplicating a parameter the landing page already carries. The page reads the first occurrence and ignores the rest, and which one is first depends on how the redirect was written.
- Putting the tags after the fragment. Anything after
#is not part of the query string. The tags have to sit before it. - An http landing page. Most ad platforms reject an insecure final URL or silently rewrite it, and the rewrite is where parameters get lost.
Doing it for a whole launch at once
Tagging one link by hand is fine. Tagging a launch across search, social, display and email is where a spreadsheet starts producing typos, because the campaign name is retyped once per channel.
The UTM builder takes the campaign and the landing page once, then produces one row per channel with the source and medium already correct for that channel. It exports a CSV that opens cleanly in Excel, and it flags any row that would land in Unassigned before you hand the sheet to anyone. Everything runs in the browser, so client URLs never leave the machine.
Once the click URL is final, the clickTag generator wires it into HTML5 banners, and the banner validator checks the finished creative before it is trafficked.