Skip to content
ZeroServer.tools

UTM Link Builder

Build UTM-tagged URLs for Google Analytics campaigns — source, medium, campaign, term, content.

Campaign Source: googleCampaign Medium: cpcCampaign Name: spring_sale

The destination URL

Who sends traffic (e.g. google, newsletter)

Marketing channel (e.g. cpc, email, social)

Identify a specific campaign

Paid search keywords (optional)

Differentiate ads or links (optional)

How UTM parameters work

UTM parameters are query-string tags appended to URLs so Google Analytics can track where your traffic comes from. utm_source identifies who sent the traffic (e.g. a search engine or newsletter), utm_medium describes the marketing channel (cpc, email, social), and utm_campaign names the specific campaign. The optional utm_term and utm_content fields help differentiate paid keywords and ad variations.

To encode a UTM URL for safe use in HTML attributes, use URL Encoder. For other link tools, try URL Parser.

Built and maintained by Meet Shah · Last updated

What this tool is used for

  • Building a tagged link for a campaign with consistent naming.
  • Producing one link per channel so the report separates them.
  • Adding term and content parameters for a paid or a test variant.
  • Checking a link's parameters before it goes into a send.
  • Producing links for a partner to use so attribution stays consistent.

How it works in practice

A worked example

A newsletter editor at an outdoor-gear shop is tagging the link to an autumn sale page whose URL already carries a filter and an anchor, and both have to survive the tagging.

Input
Website URL        https://shop.example.com/sale?category=trail%20shoes#sizes
Campaign Source    newsletter
Campaign Medium    email
Campaign Name      autumn-sale-2026
Campaign Term      (left empty)
Campaign Content   header-banner
Output
https://shop.example.com/sale?category=trail+shoes&utm_source=newsletter&utm_medium=email&utm_campaign=autumn-sale-2026&utm_content=header-banner#sizes

The tags joined the existing query with ampersands and went in before #sizes, which is where they have to be, since nothing after a hash reaches the server. The change people miss is the filter: it came back as trail+shoes instead of trail%20shoes. The builder does not append text to the end of your URL; it parses the whole address and writes the query out again in form encoding, where a space is a plus sign. A server decoding a normal form-style query reads the same value, but the string is no longer byte-for-byte the one you pasted, and anything comparing raw URLs will see a different link.

The edge case that catches people

The Campaign Term box suggests running+shoes as its placeholder, and typing exactly that gives utm_term=running%2Bshoes. The field expects the plain words, not an encoded query string, so the plus sign is treated as a character in its own right and escaped, and it decodes back to a literal plus: the term arrives as running+shoes, one token with a plus in it, rather than two words. Type running shoes with an ordinary space instead and the builder writes running+shoes into the link, which decodes to the space you meant. The same applies to any value you paste already encoded, since the builder encodes it a second time.

When not to use this tool

Not for tagging links in bulk. A campaign that runs across a dozen placements needs a dozen links, and a spreadsheet with the values in columns and one formula that assembles each URL keeps them consistent and leaves a record of exactly what was sent, which a form that builds one link at a time cannot. It is also the wrong tool for a signed or expiring link, such as a presigned download URL: the signature typically covers the query string, so adding any parameter at all, tracking or otherwise, makes the link fail.

Frequently Asked Questions

What order do the parameters go in?
Any order — they are query parameters, so nothing depends on position. Keeping a consistent order across a campaign is still worth doing, because it makes the URLs comparable at a glance and makes a missing parameter obvious in a list of hundreds.
Should I use hyphens or underscores in values?
Hyphens. Underscores are harder to see in an underlined link, and lower-case with hyphens is the convention most analytics teams settle on. What matters most is picking one and never deviating, since the values are case- and character-sensitive strings that will not be merged for you.
What happens if the URL already has a query string?
The parameters are appended with & rather than a second ?, which is the difference between a working link and one that 404s. A URL with an existing fragment needs more care — the tracking parameters must go before the #, or they become part of the fragment and never reach the server.
Do UTM parameters work on any analytics platform?
They are a Google Analytics convention that most platforms now recognise, including Matomo, Plausible and Adobe. The five names are effectively universal; anything beyond them, like utm_id or platform-specific extras, is not, and will be dropped silently rather than reported.
Should the link be shortened afterwards?
It can be — shorteners preserve the query string through the redirect, so the parameters still arrive. What you lose is the ability to see the tagging in the link itself, which means a mistake is invisible until it shows up as unattributed traffic days later.

Common errors and gotchas

  • Mixing case between links, which splits one source into several in every report.
  • Tagging internal navigation, which restarts the session and destroys the original attribution.
  • Including an email address or an identifier in a parameter, which puts personal data in analytics.
  • Leaving the parameters on the page's canonical URL, which can fragment indexing.
  • Inventing a new naming convention per campaign, which makes historical comparison impossible.

Related Web & SEO tools

Private & free — this tool runs entirely in your browser.

Namecheap — Register a domain for your next project — from $1.98/yr.affiliate