UTM Link Builder
Build clean, consistent UTM-tagged URLs for paid ads, email blasts, social posts, and partner co-marketing — one at a time or in bulk via CSV. No more broken Facebook reports because half your team typed “Facebook” and half typed “facebook”.
Where the traffic is coming from
Marketing channel type
A name your team will recognize
Paid search keyword (optional)
Differentiates ads or links pointing to the same URL
https://example.com/landing?utm_source=newsletter&utm_medium=email&utm_campaign=spring-launch-2026What UTM parameters are — and why every marketer eventually regrets ignoring them
UTM parameters are the little tags Google Analytics (and basically every other analytics tool) reads from the end of a URL to figure out where a click came from. They look like ?utm_source=newsletter&utm_medium=email&utm_campaign=spring-launch. The browser ignores them. The server ignores them. Only your analytics platform cares — but it cares a lot, because without them, every click from every channel that isn't a search engine gets dumped into the same bucket called “direct” or “referral”.
The five canonical parameters were defined by the now-defunct Urchin Tracker (the “UT” in UTM) before Google bought it in 2005 and turned it into Google Analytics. The spec hasn't meaningfully changed in twenty years, which is rare for anything in marketing. Every analytics tool — GA4, Adobe Analytics, Mixpanel, Amplitude, Plausible, Fathom, Matomo — reads the same five parameters out of the URL.
The reason marketers regret ignoring UTMs is that the regret comes late. You launch a Mailchimp blast, run a Meta ad campaign, partner with a creator on a co-marketing post, and the clicks show up. Three months later your CFO asks “which of those drove revenue?” and you open GA4 and find that 70% of the traffic is sitting in “Direct / (none)” with no way to retroactively tag it. The data you needed to make budget decisions next quarter is gone. Tagging links costs about thirty seconds per link. Untagging them costs your job.
This builder makes the thirty seconds even shorter. Type your base URL and the campaign details, and the tagged version appears in real time on the right. Switch to the bulk tab and paste a CSV from your campaign tracker to tag fifty links at once. Everything runs in your browser — we never see your URLs, your campaign names, or your CSV. There's no signup and nothing to install.
The five UTM parameters, what each one is for
Three are required to be useful. Two are optional but underrated. Here's how to think about each.
utm_sourceRequiredWhere the click is coming from. The platform, vendor, or site name. Examples: google, facebook, newsletter, partner-acme. If the click is coming from Mailchimp, the source is your newsletter, not “mailchimp” — be specific to the surface, not the tool.
utm_mediumRequiredThe marketing channel type. This is the bucket on your acquisition report. Examples: cpc for paid search, social for organic social, email, referral, display. Pick from a fixed list and never deviate.
utm_campaignRequiredThe specific marketing campaign or initiative. This is where the variation lives. Examples: spring-launch-2026, black-friday-2025, creator-collab-q1. Include a date or quarter so you can compare year over year. Use hyphens, not spaces.
utm_termOptionalOriginally for paid search keywords — the literal query that triggered the ad. Google Ads auto-tagging puts the matched keyword here. Most teams reserve utm_term exclusively for search keywords and leave it blank elsewhere. Don't reuse it for ad creative names or audience IDs — that's what utm_content is for.
utm_contentOptionalDifferentiates variants of the same campaign. Two CTAs in the same email (header-cta vs footer-link), two ad creatives in the same Meta campaign (video-15s vs carousel-5), or A/B test arms. The unsung hero of UTM tagging.
utm_idOptionalA GA4-only addition that maps your UTM-tagged campaign to a specific entry in GA4's native campaign reports. Useful if you import cost data from outside Google Ads. Most teams don't use it; if you do, this builder doesn't set it (you'll add it manually in your import file).
Naming conventions are the whole game
The actual mechanics of UTM tagging are easy. The hard part is keeping fifteen people on three teams using the same vocabulary for two years. Without a convention, your acquisition report turns into a graveyard of near-duplicates: Facebook, facebook, Facebook-Ads, FB, meta, all reporting traffic to what should be a single source.
The rules that survive contact with reality:
- Lowercase everything, always. GA4 is case-sensitive.
Facebookandfacebookcreate two rows. The lowercase toggle in this builder defaults to on for that reason. - No spaces. Use hyphens, not underscores or plus signs. Spaces become
%20in URLs and look ugly. Underscores are valid but harder to read. Plus signs decode to spaces. Hyphens are the universally-readable safe choice:spring-launch-2026. - Pick a fixed vocabulary for utm_medium and stick to it. Choose seven or eight allowed values:
cpc,social,email,organic,referral,display,affiliate,video. Anyone introducing a new medium needs sign-off from whoever owns the analytics dashboard. - Date the campaign name.
spring-sale-2026notspring-sale. You'll thank yourself when you want a year-over-year comparison and the 2024 and 2025 data isn't merged. - Document the convention in a shared place. A pinned Notion page, a Google Sheet of allowed values, a section in your team's onboarding doc — somewhere new hires can find it. Bonus: link to this builder from that doc so people generate links the right way the first time.
If you're inheriting a messy GA4 property with twenty variations of “facebook”, the fix is depressingly manual: build a regex-based filter or a Looker Studio CASE statement that consolidates the variants for reporting. Going forward, lock down the vocabulary and use a builder like this one for every link. The mess won't come back.
Five UTM mistakes that quietly destroy your attribution
UTMs are simple in theory and brutal in practice. The same five mistakes show up in every analytics audit we've ever run. Avoid these and you're ahead of 80% of marketing teams.
Inconsistent casing splitting your reports
GA4 treats Facebook, facebook, and FACEBOOK as three completely different sources. Within a year you'll have a dozen rows that should be one. Fix: enforce lowercase across every link your team generates. This builder does it by default.
UTMs on internal links overwriting attribution
If you put UTMs on a link from your own homepage to your own pricing page, GA4 will reset the user's session attribution to whatever those UTMs say — overwriting the source that originally brought them to your site. Never tag internal navigation. UTMs are for external links bringing people to your site, not for moving them around inside it.
Using utm_term for non-search campaigns
utm_term is conventionally reserved for paid search keywords — Google Ads, Bing Ads. If you fill it in for an email or social ad, you confuse the convention and can break custom reports that filter on it. For ad variants and creative IDs, use utm_content instead. Leave utm_term blank unless it's a search keyword.
Special characters and spaces breaking the URL
Spaces, ampersands, hash signs, and quotes inside your UTM values either need to be percent-encoded or they break the URL parsing entirely. utm_campaign=Spring Sale & More will fail at the first space and at the &. Stick to letters, numbers, and hyphens. This builder URL-encodes safely, but the cleanest fix is to never put problem characters in the source values.
UTM-tagged URLs leaking into shared and indexed pages
A team member shares a tagged URL on Twitter. Someone re-shares it. Six months later, it's the version Google indexes — and now your search results show ?utm_source=twitter in every snippet. Fix: always have a rel="canonical" tag pointing to the clean version of the page, and never put UTMs on links from your own emails to your own sitemap.
Tagging fifty links at once with the bulk CSV mode
A two-minute workflow that scales to whole campaigns.
The bulk tab takes a CSV with the columns url,source,medium,campaign,term,content and produces a tagged URL for every row. Most teams keep their campaign brief in a Google Sheet — list every destination URL down column A, fill the source/medium/campaign across the row, export as CSV, paste it in here, and download the tagged version.
The same lowercase and strip-existing-params toggles apply to the whole batch, so if your campaign brief was inconsistent (some entries used “Facebook”, others “facebook”), one toggle normalizes the whole set. Failed rows show up in the results with the exact reason — missing column, invalid URL, blank required field — so you can fix them in the source CSV and re-paste.
Everything runs in the browser. The CSV never leaves your machine. If you want this same workflow inside a real campaign-tracking spreadsheet (with team members, approvals, and historical campaign archives), that's where the paid RankNow.ai tooling comes in. For one-off campaign tagging, the bulk mode here is usually all you need.
UTM Link Builder FAQ
Everything we get asked about UTM parameters, GA4, and campaign attribution.
Contact SupportYes. GA4 reads the same five utm_* parameters that Universal Analytics did — utm_source, utm_medium, utm_campaign, utm_term, and utm_content — and surfaces them under Acquisition reports as Session source, Session medium, Session campaign, and so on. GA4 also added two new ones (utm_id and utm_source_platform) for Google Ads attribution, but the original five are still the workhorses. If you tag a link with this builder, GA4 will pick it up automatically the moment a user clicks it — no extra setup required.
Yes, and this trips up almost every team eventually. Google Analytics treats Facebook, facebook, and FACEBOOK as three different sources, which means your "social" channel report will fragment into a dozen near-duplicates. The fix is to lowercase everything by default — which this tool does automatically — and to write your team's UTM convention down somewhere everyone can reference.
There is no hard limit defined by GA4 itself, but browsers, ad platforms, and email clients start having problems past about 2,000 characters. Most modern browsers (Chrome, Safari, Firefox) accept up to roughly 8,000 characters in the URL bar, but Internet Explorer 11 and some older proxies cap at 2,083. If your tagged URL is approaching 2,000 characters, you almost certainly have a campaign name that is doing too much work — split it into utm_campaign + utm_content instead. The builder warns you in red when you cross 2,000.
No, not directly. Google ignores utm_* parameters when ranking pages and treats the canonical URL (the one without UTMs) as the page identity, provided you have a proper rel="canonical" tag. The risk is indirect: if UTM-tagged URLs leak into your sitemap, internal links, or get indexed because you forgot the canonical, Google may treat them as duplicate content and split link equity. Always self-canonical your pages and never put UTMs on internal navigation.
Absolutely — that is one of the most useful applications. Tagging your Mailchimp, Klaviyo, or Substack email blasts lets you see which campaigns actually drove revenue, which subject lines drove clicks, and which segments converted. SMS works the same way, though shortened links are usually mandatory there because of character limits. The only thing to watch out for is some email clients re-encoding URLs through link-tracking redirectors, which can sometimes strip or mangle UTMs — test once before launching a big send.
utm_term was originally designed for paid search keywords — the literal search query a user typed before clicking your ad. Google Ads auto-tagging uses it that way, and most teams reserve it for that purpose. utm_content is for distinguishing variants of the same campaign: a button vs. a text link in the same email, two creative variations in the same ad set, two CTAs on the same landing page. If you are running A/B tests in your campaigns, utm_content is where the variant identifier goes.
Yes, but you usually do not need to tag them by hand. Meta Ads Manager has a "URL parameters" field where you build the UTM structure once per ad and Meta appends it automatically to every click — same for TikTok Ads Manager and LinkedIn Campaign Manager. If you are running ads through these platforms, set up dynamic URL parameters at the ad-set level (using their {{campaign.name}}-style macros) so every ad gets consistent tags without manual tagging. Use this builder to nail the structure first, then port it into the ad platform.
Some, yes. Brave browser, DuckDuckGo, Firefox's Total Cookie Protection, and uBlock Origin with certain filter lists strip utm_* parameters from URLs before the page loads. Estimates put this at roughly 5-15% of traffic depending on your audience, with developer-heavy and privacy-conscious crowds at the higher end. The fix isn't to abandon UTMs — they still work for the majority — but to know your reports under-count for those segments and to use server-side tagging where it matters most (paid acquisition reporting).
For social media posts, SMS, and printed/QR-code materials, yes — a shortener (Bitly, short.io, your own short domain) makes the link cleaner and trackable. The shortener preserves the UTMs on the redirect, so analytics still records them correctly. For email, paid ads, and direct-traffic campaigns, you usually do not need to shorten because the user never sees the URL. The one place to never shorten: your branded campaign landing pages (use vanity URLs that 301 to the UTM-tagged URL instead, so the destination stays clean).
Other free tools you might like
See all 10 free toolsSchema Markup Generator
Generate valid JSON-LD structured data for Article, Product, FAQ, LocalBusiness, Recipe, Event, and Organization in seconds.
SERP Snippet Simulator
Preview exactly how your title tag and meta description appear in Google desktop and mobile SERPs — pixel-accurate truncation included.
YouTube Money Calculator
Estimate YouTube ad revenue from views, RPM, and engagement rate. Includes long-form, Shorts, and YPP eligibility breakdowns.
UTMs tell you where the traffic came from. Want to know if you're getting cited by AI search engines?
RankNow.ai's AEO Analyzer tests your pages against real prompts on ChatGPT, Perplexity, Google AI Overviews, and Bing Copilot — so you know which pages get cited and which get ignored.
Try AEO Analyzer Free