UTM Link Builder
Build campaign tracking URLs with UTM parameters, with the naming discipline that decides whether your analytics are usable later.
A fragment ends the URL, as far as the server is concerned
Parameters used to be joined onto the end of whatever you pasted, with a question
mark or an ampersand depending on whether there was already a query string. That is
correct as far as it goes, and it takes no notice of a #.
| Pasted | Server saw | Now |
|---|---|---|
https://example.com/page | newsletter | newsletter |
https://example.com/page?ref=x | newsletter | newsletter |
https://example.com/page#pricing | nothing | newsletter |
https://example.com/page?ref=x#pricing | nothing | newsletter |
https://example.com/#top | nothing | newsletter |
Everything after the # is the fragment, and a browser never sends it to
the server. So the whole tracking string arrived nowhere: reading the result back
with a URL parser gives no source at all — not a wrong value, an absent one.
3 of the 5 URLs above lost their parameters
completely.
It fails in the worst possible way: the link works, the page loads, and the campaign reports zero clicks. Parameters now go before the fragment, which is where a browser puts them if you add one by hand. URLs without a fragment come out byte-identical to before, and the fragment is still on the end where it belongs.
And the one that quietly splits your campaign in three
Parameter values are case-sensitive, because they are just text. Anything that
groups by exact value sees Google and google as two
different sources — and a campaign run by three people over six months tends to
acquire all of these.
| Typed | As a source | As a campaign name |
|---|---|---|
"Google" | ||
"google" | ||
"GOOGLE" | ||
"Google " |
4 spellings, 3 distinct values once trimmed, 1 after lowercasing. Nothing is broken and the report has 3 rows where it should have one.
There is no fixing this afterwards — the click is recorded with whatever string it carried. So the builder now lowercases the 2 fields reports group by, source and medium, and tells you when it did. Campaign, term and content keep whatever capitalisation you gave them: those often carry deliberate wording, and they are not what the grouping is done on.
The encoding, which was already right
Worth stating because it is the part people worry about. Every value survives the round trip out to a URL and back through a query parser.
| Typed | In the URL | Read back as |
|---|---|---|
spring sale | spring%20sale | spring sale |
spring+sale | spring%2Bsale | spring+sale |
50% off | 50%25%20off | 50% off |
a&b | a%26b | a&b |
café | caf%C3%A9 | café |
The pair worth noticing is the space and the plus sign. A space becomes
%20sale and a literal plus becomes
%2Bsale, so the two stay distinguishable — which
matters because in some older query conventions a plus is a space, and a
campaign called "spring+sale" would otherwise come back as "spring sale".
The characters left unescaped — !'()*-._~ — are all legal in a query
string and mean nothing special there.
How to use
- Enter the destination URL.
- Fill source, medium and campaign at minimum.
- Use lowercase consistently.
- Keep a shared record of the conventions you use.
Frequently asked questions
What do the five parameters mean?
Source is where the traffic came from, medium is the channel type, campaign names the initiative, term carries paid keywords, and content distinguishes variants of the same link. Source, medium and campaign are the three that matter for almost every use.
Why does capitalisation matter?
Because the values are case sensitive, so Newsletter and newsletter become two separate rows in your reports. This silently fragments a campaign's data across several entries and is the single most common way UTM tracking becomes useless.
Should I tag internal links?
No — and doing so causes real damage. UTM parameters on internal links start a new session in most analytics, which breaks the attribution of the original source and inflates your traffic counts. Internal link tracking is a different mechanism.
What conventions should I agree in advance?
A fixed vocabulary for source and medium, all lowercase, with hyphens rather than spaces, and a campaign naming pattern including a date or identifier. Writing it down and sharing it matters more than which convention you pick.
Are UTM parameters visible to users?
Yes, in the address bar, and they get shared and copied along with the link — which means a link tagged for one channel can end up recorded as that channel from somewhere else entirely. It also makes URLs ugly, which some sites strip after recording.
Do they affect SEO?
Potentially, through duplicate URLs, which is why a canonical tag pointing at the clean URL is worth having. Search engines generally handle it well, but tagged URLs appearing as separate indexed pages is a real if uncommon problem.
🔒 This tool runs entirely in your browser. Nothing you enter is uploaded, logged, or stored.