Skip to the tool
OnPageKit

UTM Builder

Tag campaign links without breaking the URL you started with.

required

Any query string and #fragment already in the URL is kept.

required
required
required
optional
optional

Everything runs in your browser. Nothing you type is sent to a server.

Found a bug in this tool? Report it.

Share this tool

What this tool does

This UTM builder assembles a campaign URL from a landing page and the five utm_ parameters, and it does the two things a text editor will not do for you: it encodes the values properly, and it leaves the rest of the URL alone. A query string that was already there stays, a #fragment stays at the end where it belongs, and a utm_source that was already in the link is replaced rather than duplicated.

Everything happens in the page you are reading — no link is shortened, logged or sent anywhere.

How to use it

  1. Paste the landing page URL. If you leave the scheme off, https:// is assumed and you are told.
  2. Fill in source, medium and campaign. The medium field suggests the values reports group by.
  3. Add term or content only if you will read those numbers separately.
  4. Keep Force lower case on unless you have a reason not to, and copy the result.

The three fields, in plain terms

The names are older than most of the people using them, and the labels do not help. What each one means in a report:

  • utm_source — the specific place the click came from: newsletter, linkedin, partner-blog.
  • utm_medium — the kind of link, from a small fixed list. This is the one people get wrong.
  • utm_campaign — the thing you are running, and the label you will search for in six months.

Medium is a closed vocabulary because its whole job is grouping. If half your links say social and the other half say Social Media, social-post and linkedin, the channel report stops being a summary of anything. The short list the tool suggests covers almost everything:

Where the link livesutm_sourceutm_medium
Your monthly newsletternewsletteremail
A post on your LinkedIn pagelinkedinsocial
A Google Ads text adgooglecpc
A banner on a trade publicationtrade-weeklydisplay
A partner writing about youpartner-blogreferral
An affiliate's tracked linkaffiliate-nameaffiliate
A printed flyer with a QR codespring-flyeroffline

The last row is the exception worth making: offline media has no referrer at all, and inventing a medium for it is better than letting the visit arrive as direct traffic.

Case sensitivity is not a style question

GA4 stores parameter values exactly as they arrive. Email and email are two mediums, and no setting in the interface merges them after the fact — you would be editing history in a data warehouse, not in the reports. The cheap fix is a rule everyone follows: lower case, hyphens between words, no spaces. The switch in the tool enforces it on the way out.

Spaces are the other avoidable mess. They survive as %20, which is valid but unreadable, and they break the moment somebody pastes the link into software that stops at the first space.

Never tag an internal link

This deserves its own heading because it is the mistake that quietly ruins attribution. Campaign parameters are how analytics recognises the start of a visit. Put them on a link from your home page to your pricing page and you have told GA4 that a brand new session began there, from a new source — so the original channel, the one that actually earned the visit, loses the conversion.

Use an internal promotion measurement instead, or nothing at all. The place to put tagged links is anywhere the click starts outside your domain.

Keep tagged URLs out of your site's plumbing

A campaign URL is for humans arriving once, not for the files that describe your site. Do not list tagged URLs in a sitemap — the sitemap generator has the rule and the reason — and do not use one as the target of an hreflang annotation. Both places want the canonical URL, and a tagged duplicate in either is a signal you have to spend effort undoing later.

Frequently asked questions

Which UTM parameters are actually required?

Source, medium and campaign. GA4 will accept a link with only utm_source, but the report groups by medium, so a visit without one is filed under (not set) and you lose the ability to compare channels. Term and content are optional and only worth adding when you will genuinely split the numbers by keyword or by creative.

Do UTM parameters hurt SEO?

Only if you point search engines at them. A tagged URL is a separate URL, so a crawler that finds one may index it alongside the clean version. Two defences, and you want both: a self-referencing canonical on the page, and never linking a tagged URL from anywhere a crawler walks.

Why did my campaign split into two rows in GA4?

Almost always case. GA4 does not normalise parameter values, so Facebook and facebook are two sources and Spring_Sale and spring-sale are two campaigns. Pick lower case with hyphens, write it into whatever brief your agency works from, and use the lower-case switch here so a slip never reaches a live link.

Should I tag links between pages on my own site?

No, and this is the expensive one. In GA4 an inbound campaign parameter starts a new session, so an internal tagged link ends the visit the user was already having and restarts it with a fresh attribution. The conversion is then credited to the internal banner rather than the channel that brought the person in.

What is the difference between utm_term and utm_content?

Term was built for paid search keywords and is usually populated automatically by the ad platform. Content is for distinguishing two links that are otherwise identical, such as the top and bottom call to action in the same email. If you are not going to read them apart, leave both empty.

Related tools

Updated