Channel presets, bulk mode and automatic normalization - so one campaign never shows up as three. Free, no sign-up, nothing leaves your browser.
Start from a channel
Where the traffic comes from
Channel type - analytics groups by this
Which campaign this link belongs to
Paid keyword, usually filled in by the ad platform
Which creative or placement was clicked
Non-standard, supported for teams already using it
Your tagged URL
Enter a destination URL to see the result
Generated in your browser - the URL is never uploaded.
Build a link above and its QR code appears here.
Logo in the centre
Putting your logo inside the code is a paid Revolink feature.
Your presets
No presets yet. Fill in the fields above and save the combination you keep retyping.
These presets live in this browser only
They survive a refresh, but they do not follow you to another device and your teammates cannot see them. A free Revolink account stores three UTM templates on the server - unlimited on paid plans.
Save presets to an accountThis URL is long, and it only tells you where clicks came from
Shorten it with Revolink and you also get click counts, geography, device breakdown - and the UTMs survive the redirect.
UTM parameters are ordinary query parameters bolted onto the end of a URL. They change nothing about the page a visitor lands on - the browser sends them along, and your analytics platform reads them to work out where the visit came from. Everything after the question mark is metadata for you, not instructions for the page.
https://yoursite.com/pricing?utm_source=instagram&utm_medium=social&utm_campaign=spring-sale| Parameter | What it answers |
|---|---|
utm_source | Where the traffic comes from - the specific site, app or list. instagram, newsletter, partner-blog |
utm_medium | The type of channel. This is what analytics groups your traffic by. cpc, email, social, qr |
utm_campaign | The campaign the link belongs to. Without it, every link blurs into one bucket. spring-sale-2026, product-launch |
utm_term | Paid keyword. Mostly filled in automatically by ad platforms. running-shoes |
utm_content | Which creative or placement was clicked. The parameter that makes A/B results readable. hero-button, footer-link, variant-b |
utm_referral | Not part of the original Urchin spec, but supported in Revolink for teams that already use it. yoursite.com |
utm_source is yours to choose - it is just a name. utm_medium is not: GA4 matches it against a known list to decide which channel group a session belongs to. Invent a medium and the traffic lands in Unassigned, no matter how carefully you tagged everything else.
| Channel | utm_source | utm_medium |
|---|---|---|
| Google Ads | cpc | |
| Facebook / Instagram Ads | facebook / instagram | paid-social |
| Organic social post | instagram, linkedin, tiktok | social |
| Email newsletter | newsletter | |
| YouTube description | youtube | video |
| Printed QR code | qr | |
| Partner / affiliate | partner name | affiliate |
None of these throw an error. The link works, the page loads, the visitor converts - and the number lands in the wrong row of your report. You find out a month later, when the totals stop matching.
GA4 treats utm_source=Facebook and utm_source=facebook as two separate sources. Your campaign quietly reports half its numbers twice. This is the single most common cause of campaign data that does not add up.
A space becomes %20 or +, and the same campaign shows up under two names depending on which tool encoded it. Use hyphens instead - spring-sale, not spring sale.
Analytics needs both to attribute a session. A medium on its own usually lands in Unassigned, which is where campaign data goes to disappear.
GA4 only recognizes a known set of mediums for its default channel grouping. Writing facebook-post instead of social means the traffic never joins the Social channel in reports.
Putting UTMs on links between pages of your own site starts a brand new session and overwrites the original source. The visitor who came from your ad suddenly looks like they came from your own footer.
Paste one into the UTM checker - it flags every one of the problems above, plus double encoding and leftover ad click IDs.
One person tagging links is a habit. Three people tagging links is a data problem. The moment a second marketer joins, spring_sale, spring-sale and SpringSale all start appearing in the same report as separate campaigns.
The fix is a written pattern everyone fills in rather than invents - something like {channel}-{region}-{quarter}. Decide the separator once (hyphens travel better than underscores), keep everything lowercase, and never put a date format in that sorts badly.
Longer read: UTM parameters - best practices for campaign tracking. If your parameters keep vanishing between the click and the landing page, that is a different problem: UTMs and redirects.
A UTM builder assembles the tracking parameters onto your URL and encodes them correctly. Typing them by hand is where capitalization drift, stray spaces and forgotten parameters come from - and those errors are invisible until the data is already wrong in your reports weeks later.
It is free and there is no account, no sign-up and no email required. Everything runs in your browser - the URLs you build are never sent to us. You only need a Revolink account if you want to shorten the links, track clicks, or sync your presets across devices.
In this browser only, in localStorage. They survive a refresh, but they do not sync to your phone, they are not shared with teammates, and clearing your browser data deletes them. Revolink accounts store UTM templates on the server instead - three of them on the free plan, unlimited on paid plans.
Yes, in almost every case. Analytics platforms are case-sensitive, so mixing Facebook and facebook splits one source into two. The builder lowercases values and converts spaces to hyphens by default, and shows you exactly what it changed. You can switch normalization off when a value genuinely needs its case - for example a Facebook Ads dynamic macro like {{campaign.name}}.
It depends on the redirect. A well-behaved 301 or 302 carries the query string through, but many shorteners and redirect scripts drop it, which is how attribution silently breaks between the click and the landing page. Revolink preserves UTM parameters through its redirects.
You can add custom UTM parameters - the builder prefixes them with utm_ automatically. Parameters outside the utm_ namespace are not part of the UTM convention and most analytics tools will ignore them for attribution.
UTM builder, checker, QR codes and campaign names - no account.
One shared convention instead of three personal ones.
Where parameters get lost between the click and the landing page.
What the free plan covers and where the paid plans start.
Stop sending everyone to the same page. Route by location, device, and time - start free, no credit card required.
Start for Free - No Card RequiredFree forever Β· No credit card Β· Cancel anytime
Already have links? Import them