UTM parameters exist for one reason: to answer the question of which specific link someone clicked before they arrived on your site. Without them, a visit from a paid social post and a visit from an organic tweet mentioning the same URL look identical to your analytics tool, both folded into a generic referral or social bucket. With them, every campaign, every placement and every piece of creative can be measured against the others.
Everything happens in your browser, so drafting links for a campaign that has not launched yet never touches a server before you are ready to use them. Used as a campaign url builder for one link or a full utm parameter generator for a whole channel list in bulk mode, the output is the same well formed google analytics utm tracking link either way.
The five parameters and what each one answers
utm_source answers where the traffic came from, such as newsletter, google or facebook. utm_medium answers what kind of traffic it was, such as email, cpc or social. utm_campaign names the specific initiative the link belongs to, such as summer-sale or product-launch. utm_term and utm_content are more specific still: term is traditionally used for paid search keywords, while content distinguishes between two links pointing at the same place within the same campaign, such as a header link versus a footer link in the same email.
Source and medium are effectively required for the data to be usable at all, since most analytics tools group traffic by that pair first. Campaign is required for anything you intend to compare against other campaigns later. Term and content are genuinely optional, useful specifically when you need to distinguish between two links that would otherwise be indistinguishable.
Why this utm link builder lowercases everything
Analytics platforms treat UTM values as case sensitive strings, which means Newsletter and newsletter are recorded as two different sources even though a human reading the report would never separate them intentionally. This happens constantly when a parameter is typed fresh each time rather than copied from a fixed list, and the result is a campaign report that looks like it has half the traffic it actually received, split silently across two rows.
Lowercasing every value before it is appended to the URL removes this failure mode entirely. It costs nothing, since a UTM parameter is never displayed to a visitor, and it means two people building links for the same campaign on different days produce identical parameters even if one of them typed Email and the other typed email.
Validation that catches a broken link before you share it
A campaign link with a malformed base URL, a missing required parameter, or a value containing a raw space or an unencoded special character can silently fail to track, or in the worst case send someone to a broken page. This tool checks that the base URL is a valid, absolute address before allowing you to build a link from it, flags source, medium and campaign as required, and encodes any character in a value that would otherwise be invalid in a query string.
A parameter containing a space becomes a plus sign or a percent encoded sequence rather than breaking the URL at that point, and a value that already contains an ampersand or an equals sign is escaped so it cannot be mistaken for the start of a new parameter.
Bulk mode for a whole campaign at once
A single campaign often needs the same tracking structure repeated across many sources, for example the same product launch link shared through email, four different social platforms and a partner newsletter. Building each one individually is repetitive and is exactly the kind of repetitive task where a copy paste error introduces the case mismatch described earlier.
Bulk mode takes one base URL, one campaign and one medium, then a list of sources, one per line, and produces a complete link for each source in a single pass. The output is one link per line, ready to paste into a spreadsheet or a link shortener queue, with every value normalised the same way as in single link mode. Each finished row is a complete utm tracking link on its own, so the whole batch can be pasted straight into a campaign spreadsheet.
| Parameter | Answers | Example |
|---|---|---|
| utm_source | Where the click came from | newsletter |
| utm_medium | What kind of channel | |
| utm_campaign | Which initiative | summer-sale |
| utm_term | Which paid keyword | running-shoes |
| utm_content | Which specific link or creative | header-cta |
How to use the utm link builder
- 1
Paste your base URL
Enter the destination URL, including https, that the campaign link should ultimately lead to.
- 2
Fill in source, medium and campaign
These three are effectively required. Term and content are optional and only needed to distinguish similar links.
- 3
Check the validation messages
Fix any flagged field, such as a missing required parameter or an invalid base URL, before generating.
- 4
Generate and copy your link
Copy the finished link, or switch to bulk mode to generate one link per source from a pasted list.
Related tools worth bookmarking
Sources and further reading
- Google Analytics: Custom campaign trackingGoogle's own documentation of the utm_source, utm_medium, utm_campaign, utm_term and utm_content parameters.developers.google.com
- RFC 3986: Uniform Resource Identifier syntaxThe internet standard defining valid URL structure and query string encoding that this tool's validation follows.rfc-editor.org
- MDN: URLSearchParamsThe browser API used to append and encode query parameters correctly when building each campaign link.developer.mozilla.org
Frequently asked questions
Common questions about the utm link builder.
Technically none of them are enforced by the URL standard itself, but source, medium and campaign are effectively required for the data to be usable, since most analytics platforms group and report on that combination first. Term and content are genuinely optional and only add value when you need to tell apart two links that would otherwise look identical.
Analytics tools treat UTM parameters as case sensitive text, so Email and email are recorded as two separate sources even though they mean the same thing to a person reading the report. Lowercasing every value before it reaches the URL prevents that split from happening, since parameters are never shown to a visitor and lowercasing them costs nothing.
utm_term was originally built for the paid keyword that triggered a search ad and is still commonly used that way. utm_content is broader, used to tell apart two links that share the same source, medium and campaign, most often two calls to action in the same email or two ad variations in the same set, so you can see which one performed better.
No. They are a standard part of the URL's query string and are read by analytics scripts on page load, with no effect on how the page itself renders or performs. Some pages redirect or canonicalise away the parameters after reading them, which is normal and does not indicate anything is broken.
You can type them, but they need to be encoded before they reach a real URL, and this tool does that automatically. A space becomes a plus sign or percent encoded sequence rather than breaking the link. Even so, it is good practice to use hyphens instead of spaces in campaign names, since that is what shows up more readably in most analytics reports.
Bulk mode takes one base URL, one campaign and one medium that stay fixed, then a list of source values you paste in, one per line, and produces one complete tracking link per source. It is built for the common case of sharing the same campaign across several channels at once without repeating the same form entry for each one.