UTM parameters are short tags added to the end of a URL that tell your analytics where a visitor came from. A link tagged with them looks like this:
https://example.com/services/?utm_source=newsletter&utm_medium=email&utm_campaign=spring-promo
When someone clicks it, Google Analytics reads those values and files the visit under that source, medium, and campaign instead of guessing. The parameters change nothing about the page; they exist purely to label the traffic.
The name is a leftover from Urchin Traffic Monitor, the analytics product Google acquired in 2005 and rebuilt into Google Analytics. The convention outlived the product and is now understood by essentially every analytics platform.
Why they are necessary
Analytics can identify referrers automatically when a browser passes one, which covers most links from one website to another. It cannot identify anything else. Traffic from an email client, a PDF, a QR code, a mobile app, or a link someone pasted into a message arrives with no referrer at all and lands in direct, the bucket where unexplained traffic goes.
That matters because direct traffic is where marketing attribution goes to die. A newsletter that drove three hundred visits and two sales looks like nothing happened. Tagging the link is the difference between knowing a channel works and guessing.
They are equally necessary when the same platform carries several different efforts. Without tags, every click from Facebook looks alike, whether it came from a paid ad, an organic post, or a comment. With tags, the paid campaign, the organic post, and the bio link are three separate lines in the report.
The five parameters
utm_source names where the traffic came from: newsletter, facebook, partner-site. Required.
utm_medium names the channel type: email, cpc, social, referral, qr. Required, and the one people get wrong most often.
utm_campaign names the specific effort: spring-promo, 2026-q3-webinar. Required in practice.
utm_term records a keyword. Mostly a legacy of manual paid search tagging, and rarely needed now that ad platforms link directly to analytics.
utm_content distinguishes variants within one campaign: header-cta versus footer-cta, or variant-a versus variant-b. This is the parameter that makes A/B comparisons and multi-placement campaigns readable.
Google Analytics 4 also recognizes utm_source_platform, utm_creative_format, and utm_marketing_tactic. Most organizations do not need them, and adding parameters nobody reads is its own kind of mess.
Medium is the one that breaks reports
GA4 groups traffic into default channels based largely on the medium value, using a fixed set of expected terms. Use one of them and your traffic lands in the right channel group. Invent your own and it lands in “Unassigned,” which is how a well-run campaign ends up invisible.
The values that behave predictably include email, cpc or ppc or paid for paid search, display, social or paid_social, affiliate, referral, and video. Avoid improvisations like e-mail, Email, newsletter as a medium, or facebook as a medium. Facebook is a source; social is the medium.
Naming conventions, and why you need one written down
UTM values are case sensitive. Newsletter, newsletter, and NEWSLETTER are three separate rows in your reports, and once they exist they stay in the historical data forever. The same is true of facebook versus fb, and of spring_promo versus spring-promo.
The rules that prevent this are simple and worth writing into a shared document before the first campaign, not after the reports are already fragmented:
Everything lowercase. No exceptions, ever.
Hyphens, not spaces or underscores. Spaces become %20 and look terrible.
One agreed word per thing. Decide whether it is linkedin or li and never use the other.
A campaign naming pattern. Something like yyyy-qn-topic keeps campaigns sortable and unambiguous a year later.
A shared spreadsheet. Every tagged link, who built it, and when. This is the least glamorous and most useful part of the whole practice.
Google’s Campaign URL Builder generates correctly encoded links, which removes one class of error, though it will happily let you enter inconsistent values.
Where not to use them
Never on internal links. Tagging a link between two pages of your own site starts a new session and overwrites the original source, so a visitor who arrived from Google and clicked a UTM-tagged internal button is recorded as having come from wherever that tag says. This destroys attribution and inflates session counts. Use GA4 events to measure internal clicks.
Not on Google Ads links, if auto-tagging is enabled. Google Ads appends its own gclid parameter, which carries far more detail than UTMs can. Manual tags can override it and lose data. Leave auto-tagging on.
Not on links you want to be shared cleanly. A tagged URL pasted into a forum spreads that tag to everyone who clicks it thereafter.
The other common problems
Duplicate content and canonical tags. Query parameters create URL variants, and search engines may treat them as separate pages. A self-referencing canonical tag on the clean URL resolves this. Do not block parameters in robots.txt as a fix; that prevents crawling rather than consolidating.
Caching. Some caching and CDN configurations treat each parameter combination as a different page, filling the cache with near-identical copies, or refuse to cache parameterized URLs at all. Worth checking if tagged links load slower than clean ones.
Redirects that strip parameters. If a tagged link passes through a redirect that drops the query string, the tagging is lost and the visit lands in direct. Test tagged links end to end before a campaign goes out, not after.
Never put personal data in them. Email addresses, names, and customer IDs in UTM values end up in analytics reports, server logs, and referrer headers sent to other sites. Use a non-identifying segment label instead.
Carrying the source through to the lead
Knowing that a campaign produced fifty sessions is useful. Knowing which of your actual leads came from it is much more useful, and that requires carrying the UTM values through the form submission and into wherever leads are recorded.
The usual approach captures the parameters on arrival, stores them in a cookie or in the session so they survive a visitor browsing several pages first, and writes them into hidden fields on the form. The lead record then carries its own source, and closed business can be traced back to the campaign that produced it. Our guide to passing UTM parameters through WordPress forms walks through the implementation.
This is what turns UTM tagging from a traffic-reporting habit into something that can answer the question that matters: what did this campaign earn? Without it, you can calculate traffic by channel but not return on investment. With it, and a CRM that records which leads closed, every channel can be judged on revenue rather than on sessions.
Where UTMs fit in attribution
UTM parameters record the click that brought someone to the site. They do not model journeys, they do not account for the four earlier touches that made this click happen, and the value they record is typically the last tagged source in the session. GA4’s attribution models distribute credit across touchpoints; UTMs simply make sure each touchpoint is labeled correctly in the first place. They are the input to good attribution rather than a substitute for it.
Tracking you can trust
We set up UTM conventions, form capture, and reporting that connects campaigns to leads and revenue as part of our marketing and analytics services. If most of your traffic is landing in direct and you cannot tell which efforts are working, book a discovery call.