100% Private & Browser Based

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

ParameterRequiredAnswersExample
utm_sourceYesWhich property sent the clickgoogle, facebook, newsletter
utm_mediumYesWhat kind of marketing it wascpc, paid_social, email
utm_campaignStrongly advisedWhich campaign it belongs tospring_offer_2026
utm_contentOptionalWhich creative or placementhero_a, carousel_3
utm_termOptionalThe keyword on paid search{keyword}
utm_idOptionalCampaign ID for cost data imports1234567890

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.

  1. Lower case, always. Analytics is case sensitive on source, campaign, content and term. Spring_Sale and spring_sale become two rows, two conversion counts, and one argument.
  2. Underscores, never spaces. A space arrives in the report as %20 or a plus sign, and it can truncate the URL entirely in some ad servers.
  3. A fixed medium per channel. Decide once that paid social is paid_social and write it down. This is the value that decides the channel group, so it is the one that cannot drift.
  4. Dates in the campaign, not the medium. spring_offer_2026 tells you when. cpc should 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.

Six mistakes that cost real data

  1. 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.
  2. Tagging your own email signature or a QR code, then forgetting. Use a source that will still make sense in a year.
  3. A space or an ampersand inside a value. An unescaped & ends the parameter and everything after it becomes a new one.
  4. 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.
  5. Putting the tags after the fragment. Anything after # is not part of the query string. The tags have to sit before it.
  6. 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.