UTM parameters are five labels you append to a URL — utm_source, utm_medium, utm_campaign, and optionally utm_term and utm_content — so your analytics tool can attribute each visit to the exact link that produced it. A correct tagged URL looks like this: https://example.com/page/?utm_source=newsletter&utm_medium=email&utm_campaign=october_launch. Three rules decide whether the data stays usable: use lowercase consistently, replace spaces with underscores, and let a builder encode the values for you instead of typing special characters into a URL by hand. Our free UTM Campaign Builder enforces all three, warns on inconsistent case or spaces, and has a bulk mode — up to 50 rows at a time — that turns a table of campaigns into finished URLs. This guide defines each parameter, sets out a naming convention, and shows tested URL output — including exactly what goes wrong when the rules are broken.

The five parameters, defined

UTM parameters are query parameters: they follow a ? after the page address, are joined by &, and do not change which page loads. Google Analytics reads them on arrival and files the session under the values you supplied.

Parameter Question it answers Example values
utm_source Where did the visitor come from? newsletter, google, partner_blog
utm_medium What kind of channel was it? email, cpc, referral, social
utm_campaign Which effort was this part of? october_launch, spring_sale
utm_term Which keyword was bought? (paid search) merge+pdf
utm_content Which variant was clicked? header_banner, text_ad_v1

Source and medium are a pair: source is the specific origin, medium is the category it belongs to. google is a source; cpc (cost-per-click) is its medium. Campaign is the name of the initiative that ties links across channels together — the same campaign name should appear on the email, the ad, and the partner post for one launch, with source, medium, and content distinguishing the individual links. Term is mainly for paid-search keywords, and content exists to separate links that are otherwise identical: two banners in one email, an A/B variant, a header link versus a footer link. Of the five, source, medium, and campaign carry almost all reporting value; term and content earn their place when you genuinely have keywords or variants to separate — leaving them off is better than filling them with noise.

A naming convention that holds up

Reports fail at the naming layer, not the technology layer. Adopt these rules before the first campaign, write them down, and apply them to every link:

  1. Lowercase everything. Analytics treats values as case-sensitive text: Newsletter and newsletter are two sources in the report. (What this costs you is demonstrated in the tested examples below.)
  2. Underscores instead of spaces. october_launch, never October Launch. A raw space in a URL is invalid and gets encoded as %20, producing campaign names nobody can read in a spreadsheet.
  3. One name per thing, every time. Pick email as the medium for email and never alternate with mail, newsletter (that is a source), or e-mail. Pick the campaign format month_purpose or purpose_month — either works; alternating does not.
  4. Keep a registry. A simple shared table of approved source and medium values, plus the campaign names in use, prevents every variant below. The builder's saved presets, stored in your browser, encode the same discipline per person.
  5. Tag only links you control. UTMs belong on inbound links from emails, ads, and partners. Never add them to internal links between your own pages — doing so can overwrite the original campaign attribution mid-session in analytics tools that credit the most recent campaign.

Tested examples: correct output, and the mistakes

Every URL below was produced in a test run with Node's standard URL and URLSearchParams APIs — the same encoding machinery browsers and our builder use — so the output is byte-for-byte what a correctly built link looks like.

A correct, complete build. Paid search, with term and content:

https://atoztools.pro/tools/pdf-toolkit/?utm_source=google&utm_medium=cpc&utm_campaign=pdf_tools_launch&utm_term=merge%2Bpdf&utm_content=text_ad_v1

Note utm_term=merge%2Bpdf: a literal + in a query value means "space" to a parser — our test confirmed that reading ?utm_term=merge+pdf back returns the value merge pdf — so a builder must encode a real plus sign as %2B. Hand-typed links get this wrong silently; nothing errors, the data just lands under the wrong keyword.

Mistake 1: capitals and spaces, typed by hand. This is what a hand-assembled link looks like:

https://atoztools.pro/tools/pdf-toolkit/?utm_source=NewsLetter&utm_medium=Email&utm_campaign=October Launch Sale

The space makes it an invalid URL; when a browser or URL parser repairs it, the campaign is stored as October Launch Sale and re-serialised as utm_campaign=October%20Launch%20Sale (both verified in our run). The capitals are the quieter problem: nothing repairs them, so the campaign is simply recorded under a different name from every correctly built link.

Mistake 2: three spellings of one campaign. Our test built the same newsletter link three ways, as three different team members plausibly would:

?utm_source=newsletter&utm_medium=email&utm_campaign=October+Launch
?utm_source=newsletter&utm_medium=email&utm_campaign=october_launch
?utm_source=newsletter&utm_medium=email&utm_campaign=October_Launch

In the analytics report these are three separate campaigns with three separate rows of traffic. The launch did not underperform — its numbers were fragmented across spellings, and the totals nobody summed were the real result. This is the single most common UTM failure, and it is entirely a convention problem: the lowercase, underscore form in the middle is the one to standardise on.

Mistake 3: an ampersand inside a value. A campaign honestly named "tips & tricks" breaks a hand-built URL, because & is the separator between parameters — everything after it is parsed as a new parameter. Built properly with URLSearchParams, the same value came out of our test as utm_campaign=tips+%26+tricks: the & safely encoded as %26, the spaces as +. The lesson is not "avoid ampersands in names" (although simple names are still better) — it is "never assemble tagged URLs by string-typing; always let a builder encode".

Bulk output, built the same way. Three links for one launch, generated in one pass in the same Node test run, using URLSearchParams for every row — the same encoding the builder's bulk mode applies to a pasted table (CSV in, CSV out, maximum 50 rows at a time):

Link purpose Generated URL
Email, header banner https://atoztools.pro/tools/pdf-toolkit/?utm_source=newsletter&utm_medium=email&utm_campaign=october_launch&utm_content=header_banner
Email, footer link https://atoztools.pro/tools/pdf-toolkit/?utm_source=newsletter&utm_medium=email&utm_campaign=october_launch&utm_content=footer_link
Partner blog, inline link https://atoztools.pro/tools/pdf-toolkit/?utm_source=partner_blog&utm_medium=referral&utm_campaign=october_launch&utm_content=inline_link

Source, medium, and campaign stay identical where they should; only utm_content and the partner's source/medium vary. That consistency is the whole game, and it is far easier to keep in a bulk table than in hand-edited links.

Tracking: reading the report you built

In Google Analytics 4, tagged traffic appears in the Traffic acquisition report under session source, session medium, and session campaign — the dimensions named after the parameters you set. Check a new campaign's links within a day of launch: open the report filtered to your campaign name and confirm the source/medium rows match your registry exactly, with no capitalised or spaced variants. A variant discovered on day one is a link to fix; discovered at quarter-end, it is a footnote in every conclusion drawn from that data. Where a short link is needed for print or spoken media, tag the full destination URL first, then shorten the finished URL — never tag after shortening, and test the final link in a private window to watch the parameters survive every redirect between the click and the page.

Campaign tracking pairs with the money side of the same campaign: the ad cost per sale that UTM discipline helps you attribute is an input to pricing, worked through in How to Calculate Profit Margin and Break-Even Price. For the pages those links land on, How to Perform a Website SEO Audit Step by Step covers verifying that each landing URL returns the right status and carries the right tags once it arrives.

Limits and honest notes

  • UTMs do not work everywhere. They do nothing inside an app that strips query parameters, nothing on a link that is copied without its query string, and nothing for traffic that arrives after a redirect chain drops the parameters. Treat UTM data as a strong sample of campaign traffic, not a census.
  • They are visible to everyone. Parameters sit in the address bar and in server logs; never put personal data, email addresses, or internal codenames you would not publish into a UTM value.
  • Consistency beats cleverness. A short, boring, enforced convention outperforms a detailed taxonomy that each person applies differently — the fragmentation example above is what "creative" naming costs.

Frequently asked questions

Which UTM parameters are required?

None are technically required for a link to work, but source, medium, and campaign are the working minimum for meaningful reporting. Term is for paid keywords and content for distinguishing otherwise-identical links; add them when you have something real to record, not by default.

Are UTM parameters case-sensitive in Google Analytics?

Yes — values are recorded as typed, so Newsletter, newsletter, and NewsLetter appear as separate sources. Our tested examples show the same effect for campaign names. Standardise on lowercase for every value.

Should I use spaces, hyphens, or underscores in campaign names?

Underscores are the safe convention: spaces get percent-encoded (October%20Launch%20Sale in our test output) and fragment reports, while hyphens read as word separators to some tools. Whatever you choose, the rule that matters is using it identically every time.

Can I put UTM parameters on links between my own pages?

Do not. Internal links with UTMs can replace the visitor's original campaign attribution with your internal campaign name, erasing the record of how they actually arrived. Reserve UTMs for inbound links from outside your site.

Why does my campaign show up as several different campaigns?

Almost always spelling variants: case, spaces versus underscores, or a renamed campaign mid-flight. Filter the report by each variant to see the fragments, fix the offending links to the standard spelling, and record the correct name in your registry so the next link starts clean.

References