UTM Parameters Explained for Paid Media
UTM parameters are five, sometimes six, 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 Google documents that a missing parameter shows up in reports as (not set), a value none of the paid channel rules can match. 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 does not make the session paid: GA4 only counts a medium as paid when it contains cp, starts with paid, or is exactly ppc or retargeting. With utm_source=facebook the session is reported as Organic Social, and with a source GA4 does not list it lands in Unassigned. Both cases are 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. The channel rules ignore case, but the reports do not: Google treats every parameter value as case sensitive.
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. Together with the source, this is the value that decides the channel group, so it is the one that cannot drift. Check it against the paid pattern above:paid_socialandcpcqualify,social_paiddoes not. - 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, and the syntax each platform expects is listed in ad platform URL macros for UTM tracking.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 replaces the real source for everything that happens after the click, so conversions are credited to your own navigation. 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. Google does not document which copy GA4 records when a URL carries the same parameter twice. Practitioners report that the last one wins, but which copy ends up last depends on how the redirect was written, so remove the duplicate rather than rely on either.
- 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, or in an organic channel despite a paid medium, 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.