UTM Link Builder
Build UTM-tagged URLs for Google Analytics campaigns — source, medium, campaign, term, content.
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.
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
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_idor 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.