UTM parameters

Tags stapled onto a link (?utm_source=...) so analytics can tell which post, ad, or email actually sent that visitor.

the ?source= stuff on linkscampaign tags in the linkutm tagsutm_source utm_mediumlink tracking codesthose long messy links from adsthe tracking bit at the end of a URLcampaign link builder

See it

Live demo coming soon

What it is

UTM parameters are labels you staple onto the end of a link so your analytics tool knows where the click came from: ?utm_source=newsletter&utm_medium=email&utm_campaign=spring-launch. The browser ignores them, the analytics script reads them and files the visit. The name is a fossil: Urchin Tracking Module, from the company Google bought and turned into Google Analytics.

Five traditional parameters, three that matter. utm_source is the specific place (newsletter, producthunt, partner-blog), utm_medium is the type of channel (email, cpc, social, referral), utm_campaign is the push they belong to. utm_content separates two links in the same email, utm_term carries a paid keyword. Modern analytics platforms read extra campaign parameters beyond those five (GA4 picks up utm_source_platform, utm_creative_format and utm_marketing_tactic, and ad platforms add their own click ids), so check what your tool actually parses. Tag inbound campaign links that arrive from a surface outside your site, including your own email and social posts, since 'we own it' is not the test. Do not tag navigation between your own pages.

Gotchas that bite everyone: values are case sensitive, so Facebook and facebook become two rows in your report forever. Never tag internal links between your own pages, because that overwrites the visitor's original source and can start a fresh session. And UTMs are visible in the address bar and get shared onward, so keep client names and anything private out of them, and strip them before writing canonical URLs.

Ask AI for it

Write me a UTM tagging convention plus a link builder. The convention should define allowed values for utm_medium (email, cpc, paid_social, organic_social, referral, affiliate, qr), a lowercase-and-hyphens rule for every value, a campaign naming pattern of {yyyy-mm}-{campaign-slug}, and when to use utm_content versus utm_term. Then build a small client-side link builder: inputs for base URL, source, medium, campaign, content, term; it should lowercase and slugify every value, warn if the base URL is on my own domain, preserve any existing query string and hash, and output the finished URL with a copy button.

You might have meant

attribution modelsource mediumacquisition channellast click first touch attributioncross domain tracking