UTM Link Builder
Campaign links with utm_source, medium, campaign, term, content and id encoded correctly: existing query kept, fragment kept last, case and spacing checked.
A tagged URL ready to paste, every value percent-encoded to RFC 3986, with warnings for the mistakes that split analytics reports.
Example: example.com/page + newsletter / email / launch-2026 → https://example.com/page?utm_source=newsletter&utm_medium=email&utm_campaign=launch-2026; a space becomes %20.
Six parameters,
one URL that survives copy-paste.
What each utm_ parameter is for, how values are encoded, what happens to an existing query or fragment, and why case matters.
The parameters
UTM parameters are plain query-string names that analytics tools read to attribute a visit: utm_source (where it came from: newsletter, linkedin, partner-site), utm_medium (the channel: email, social, cpc, referral), utm_campaign (the campaign name), utm_term (the paid-search keyword), utm_content (which link or variant) and utm_id (a campaign identifier for imported cost data). Source is required; the page warns when medium or campaign is empty because reports group by them and file the visit as "(not set)". The names come from the Urchin Tracking Module convention documented by Google Analytics and read by most other tools.
Encoding and assembly
Every value is percent-encoded per RFC 3986: anything outside letters, digits and -._~ becomes %XX of its UTF-8 bytes, including the characters !'()* that JavaScript's encodeURIComponent leaves alone. A space becomes %20, never +. The destination's own query parameters are kept in place; any utm_ parameter already on it is replaced by yours with a warning, so a link is never double-tagged. A fragment (#section) stays at the very end, because anything after # is not sent to the server or seen by analytics. A URL typed without a scheme gets https:// and a note.
Why case and spelling matter
Analytics tools compare values byte for byte: "Newsletter" and "newsletter" become two rows in a report, as do "e-mail" and "email". The page warns about capital letters and spaces; the fix is a naming convention your team keeps (lower case, hyphens, the same medium names every time), which no tool can enforce for you.
What the tool does not do
It does not shorten links, store them, or check that the destination exists; nothing you enter is sent anywhere. It does not validate values against your analytics property's channel groupings — that is configuration in the tool, not the link. Other vendors' click identifiers (gclid, fbclid, msclkid) are appended by their platforms, not built here. The same four anonymous usage counts as the rest of the site apply.
SOURCES
- RFC 3986 — Uniform Resource Identifier: Generic Syntax (percent-encoding, query, fragment)
- Google Analytics Help — Collect campaign data with custom URLs (the utm_ parameter names)
Last reviewed 19 September 2026. How results are checked: How we verify.