Free tools
Paste a URL, fill in the fields, and get a tagged campaign link you can drop straight into an email, ad, or social post. Tag one link or a whole spreadsheet at once, with no account and no export limit.
Where people land after clicking.
Paste a column of URLs, or upload a CSV and the links are read from its first column. Everything runs in your browser; your list never leaves this page.
Where the traffic comes from: the specific site, publication, or list.
The type of channel: email, cpc, social, referral.
The initiative this link belongs to.
Paid search keyword. Leave blank for anything that isn't search advertising.
Which version or placement. Useful for A/B tests and multiple links in one email.
Ties this link to a campaign in your ad platform or GA4 imports.
Your tagged link
Add a destination URL above and your tagged link will appear here.
Sharing the builder copies a link to this page with your fields pre-filled, handy for passing a naming convention around your team.
Paste at least one URL above to get started.
A UTM parameter is a tag added to the end of a URL that tells your analytics where a visitor came from. It changes nothing about the page. The tag simply travels along with the click, so the arriving traffic can be attributed to the right campaign.
A tagged URL looks like this:
https://yoursite.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=spring-2026
The first parameter is joined with a ?, every one after it with an &.
That is the whole mechanism. The complexity isn't technical; it's in staying consistent with your
own naming across months and teammates.
utm_source is the specific origin. Not "email" but which email list; not "social"
but which network. Think proper noun: newsletter, linkedin,
partner-blog, google.
utm_medium is the type of channel, and the one that matters most, because
analytics tools use it to sort traffic into channel groups. Stick to a small controlled
vocabulary: email, cpc, organic-social,
paid-social, referral, affiliate, qr.
Inventing new mediums is how traffic ends up in an "Unassigned" bucket.
utm_campaign is the initiative: spring-2026,
webinar-replay, black-friday. Everything belonging to one push shares
one campaign name, across every channel.
utm_term is the paid keyword you bid on, and only relevant for search ads. If you're not running search ads, leave it empty rather than repurposing it for something else.
utm_content is the variant or placement, and the underrated one. If your
newsletter has three links to the same page, utm_content=header-cta,
body-link, and footer-button are the difference between "the newsletter
drove 400 clicks" and "the header CTA drove 380 of them, so move everything up".
utm_id is a single campaign identifier some ad platforms and GA4 data imports ask for. Optional unless your reporting pipeline needs it.
Source, medium, and campaign are effectively required. Skip source or medium and most analytics tools will file the visit as direct traffic, the same bucket as someone typing your URL from memory.
Capitals. utm_source=Facebook and utm_source=facebook
are two different sources in most analytics tools, and they will sit in your report as two
separate rows you have to merge by hand later. Lowercase everything, always.
This builder lowercases by default.
Spaces. A space becomes %20 in the URL and looks broken when someone
hovers the link. Use hyphens: spring-sale, not spring sale. Pick hyphens
or underscores as a house rule and never mix them.
Confusing source with medium. The most common version is
utm_source=email&utm_medium=newsletter, which has the two backwards. Medium is
the category, source is the specific thing inside it. Getting this the wrong way round scatters
your email traffic across the wrong channel group.
Tagging your own internal links. UTM parameters are for traffic arriving from outside. Tag a link on your own site and you start a fresh session mid-visit, overwriting the original source, so the ad that genuinely won you that visitor gets no credit. Use them on outbound placements only.
Write these down somewhere shared before you tag your second campaign, not after your fiftieth:
2026-04-spring-launch sorts chronologically in
every report you'll ever open.
newsletter, not newsletter and
email-list and mailing.
Tagged URLs get long and ugly fast, and a visible utm_medium=paid-social string in a
post tells your audience exactly how much you paid to reach them. Wrapping the tagged URL in a
branded short link on your own domain keeps the
tracking intact, because the parameters still arrive at your site, while what people see is
go.yourbrand.com/spring. It also means you can fix a typo in the destination without
reprinting whatever the link was on.
Not if you're only tagging inbound links from other places. Problems start when tagged versions of your own pages get crawled and indexed as duplicates, which is exactly what tagging internal links causes. Keep a canonical tag on your pages and don't tag internal navigation.
The parameter itself is just text in a URL and isn't personal data. What triggers consent obligations is what your analytics does after the click: whether it writes a cookie or profiles the visitor. Server-side click counting without cookies avoids the banner; a full analytics suite with cross-site tracking generally doesn't.
Yes, and you should. Set utm_medium to qr and use utm_source to name the physical placement, like poster-lisbon or packaging-insert. It's the only way to tell which piece of print actually worked.
Through a well-built short link, yes: the full query string is passed along to the destination. Some redirect services strip parameters, so test one link before committing a whole campaign to it.
GoGoLink wraps campaign URLs in short links on your own domain and measures every click with privacy-friendly analytics. Free to start, no credit card required.