Developer UTM link builder
Build correctly tagged campaign URLs, with existing UTM parameters replaced rather than duplicated and casing normalised.
Start from a preset
Where the traffic comes from, such as google or newsletter.
The channel type, such as cpc, email or social.
One name reused across every link in the campaign.
Paid keyword. Optional.
Distinguishes two links in the same email or ad. Optional.
GA4 treats Email and email as two different sources, which silently splits one campaign into two rows. Lowercasing everything avoids it.
Tagged link
https://example.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=spring-launch| Parameter | Value |
|---|---|
| utm_source | newsletter |
| utm_medium | |
| utm_campaign | spring-launch |
Ready. Runs locally on your device.

Your files stay on your device. The tool works directly in your browser, using your device to process your files. Nothing is sent to our servers, and we never receive, store, or see your files or figures.
Share result
Cite
Cite this page
Reembun. (2026, July 28). UTM link builder. https://reembun.com/utm-builder
How to use it
Paste the destination
The page the link should land on, before any tracking is added to it.
Fill in the three that matter
Source is where the traffic comes from, medium is the type of channel, campaign is the name you reuse across every link in the same push.
Add term and content if you need them
Term for a paid keyword, content to tell two links inside the same email or ad apart.
Copy the link
Force lowercase keeps analytics from splitting one campaign into several because of a capital letter. Copy link gives the finished URL.
The five parameters
| Parameter | Purpose | Example |
|---|---|---|
utm_source | Where the traffic came from | newsletter, google |
utm_medium | The channel type | email, cpc, social |
utm_campaign | The campaign name | spring-launch |
utm_term | Paid keyword | pdf+merge |
utm_content | Which link, within one campaign | header-cta |
Source, medium and campaign are the three that matter. Term and content exist to disambiguate: two buttons in the same email, or two creatives in the same ad set.
A tagged link
https://example.com/pricing
?utm_source=newsletter
&utm_medium=email
&utm_campaign=spring-launch
&utm_content=header-cta
Conventions that prevent problems
Always lowercase. GA4 is case-sensitive on these values. Facebook, facebook and FaceBook become three separate sources, splitting one campaign across three rows.
Pick one separator and keep it. Hyphens or underscores, not both. spring_launch and spring-launch are different campaigns as far as analytics is concerned.
Keep medium to a short controlled list. cpc, email, social, paid_social, organic, referral, affiliate, display. Inventing a new medium per campaign makes channel-level reporting useless.
Reuse the campaign name across every link in the campaign. That is what lets you total the campaign rather than reading it link by link.
Document the convention somewhere shared. Most UTM chaos comes from two people tagging the same campaign differently, not from anyone being careless.
Standard source and medium pairs
| Channel | Source | Medium |
|---|---|---|
| Google Ads | google | cpc |
| Meta paid | facebook | paid_social |
| Meta organic | facebook | social |
| LinkedIn organic | linkedin | social |
| Email newsletter | newsletter | email |
| Transactional email | system | email |
| Affiliate | partner name | affiliate |
| Printed QR code | flyer | qr |
That last row is worth noting: a QR code on print material is otherwise indistinguishable from direct traffic, and tagging it is the only way to measure offline campaigns at all.
Mistakes worth avoiding
Tagging internal links. This resets the session and overwrites the original acquisition source. If you want to know which internal button was clicked, use an event, not a UTM.
Duplicating parameters. A link that passes through two builders can end up with utm_source twice. Analytics keeps one, arbitrarily. This tool replaces existing UTM keys rather than appending, so a link can safely be re-tagged.
Putting personal data in a parameter. UTM values appear in URLs, browser history, referrer headers and server logs. An email address or customer ID in utm_content is a data protection problem, not a clever hack.
Forgetting the canonical tag. Tagged URLs can be crawled and indexed. A self-referential canonical on every page consolidates them back to the clean URL.
Common questions
Which UTM parameters are required?
Source, medium and campaign in practice. GA4 will record a visit without them, but it falls back to the referrer or to "direct", which is usually the outcome you were trying to avoid by tagging the link. Term and content are optional and only worth adding when you need to distinguish two links within the same campaign.
Does case matter?
Yes, and it causes a surprising amount of trouble. GA4 treats "Email" and "email" as two different sources, so one campaign silently reports as two rows that neither sum nor sort together. Force everything lowercase and use one separator convention consistently.
Should I tag internal links?
No. A UTM parameter on an internal link starts a new session and attributes the rest of the visit to that campaign, overwriting the real acquisition source. It is one of the most common ways to corrupt attribution data. Use internal link tracking or events instead.
Do UTM parameters hurt SEO?
They can create duplicate URLs if a tagged link gets indexed, which is why every page should carry a self-referential canonical tag. With canonicals in place the risk is minimal. Never use UTM parameters on internal navigation or in a sitemap.
Last reviewed
