Key takeaways
- Always set utm_source and utm_medium. utm_campaign is optional but makes reports comparable.
- UTM values are case-sensitive: "Newsletter" and "newsletter" become two rows. Pick one convention (lowercase-with-dashes is the safest) and stick to it.
- Use mediums GA4 recognizes — email, social, cpc, paid_social, referral, affiliate, display — or the traffic lands in "Unassigned".
- Never put UTMs on internal links. They overwrite the original source of the visit.
What does a UTM builder do?
It appends up to five standard query parameters to a link. When someone clicks it, your analytics tool reads them from the landing page URL and files the visit under that source, medium and campaign — instead of guessing from the referrer, which is often missing for email, apps, PDFs and messaging. The parameters were defined by Urchin (the "U" in UTM), which Google bought and turned into Google Analytics; today every analytics tool reads them, from GA4 to cookieless tools like VisitTrack.
| Parameter | What it answers | Example values |
|---|---|---|
| utm_source | Which site, list or publisher sent the visit? | newsletter, linkedin, google, producthunt |
| utm_medium | What kind of channel was it? | email, social, cpc, paid_social, referral, affiliate |
| utm_campaign | Which campaign or launch is it part of? | october-launch, black-friday-2026, brand-search |
| utm_content | Which link or creative inside the same placement? | header-link, footer-cta, ad-variant-b |
| utm_term | Which paid keyword (mostly for search ads)? | privacy-analytics, ga4-alternative |
| utm_id | A campaign ID, used by GA4 for cost-data imports. | cmp_2026_10 |
How to build a UTM link in four steps
- 1.Paste the landing page URL. The builder keeps any existing query parameters and moves a #fragment to the end, where browsers expect it.
- 2.Pick a preset (Newsletter, LinkedIn, Google Ads…) or type a source and medium. Presets use mediums that GA4's default channel rules recognize.
- 3.Add a campaign name, and utm_content if you have more than one link in the same email or post.
- 4.Copy the tagged URL. The checks underneath flag spaces, capitals, missing mediums and mediums GA4 won't classify — fix them before the link goes out, because a sent email can't be edited.
Bulk mode: tagging dozens of links at once
Switch to Bulk (CSV) and paste a spreadsheet with a header row: a url column plus any of source, medium, campaign, term, content and id. The builder tags every row, applies your naming convention to every value, flags rows with problems and gives you a CSV with a new tagged_url column. Nothing is uploaded — the CSV never leaves your browser.
url,source,medium,campaign,content
https://example.com/pricing,newsletter,email,october-launch,header-link
https://example.com/blog,linkedin,social,october-launch,UTM examples for common channels
| Channel | utm_source | utm_medium | GA4 channel it lands in |
|---|---|---|---|
| Your newsletter | newsletter | ||
| Organic LinkedIn post | social | Organic Social | |
| Facebook / Instagram ads | paid_social | Paid Social | |
| Google Ads (manual tagging) | cpc | Paid Search | |
| Sponsored newsletter slot | the-newsletter-name | sponsorship or referral | Paid Other (if the medium contains "paid" or "cp") or Referral |
| Affiliate partner | partner-name | affiliate | Affiliates |
| Podcast mention | podcast-name | audio | Audio |
| QR code on a flyer | flyer | qr | Unassigned (no GA4 rule for "qr") — use "offline" or "referral" if you want it classified |
Not sure where a combination will end up? Paste it into the referrer channel checker, which applies GA4's default channel rules and shows the rule that matched.
Common UTM mistakes (and how to avoid them)
- Mixed case. utm_source=LinkedIn on one post and linkedin on the next splits one channel into two rows. GA4 matches channel rules case-insensitively, but its source/medium reports don't merge them.
- Spaces. "spring sale" becomes spring%20sale or spring+sale depending on who encoded it — two different values again. Use dashes.
- UTMs on internal links. A banner on your own homepage tagged utm_source=homepage starts a new session in many tools and erases where the visitor really came from.
- Inventing mediums. utm_medium=tweet or =post has no GA4 rule; the visit falls into Unassigned. Use social (organic) or paid_social (ads).
- Putting UTMs after the #. In example.com/#/pricing?utm_source=x the parameters are part of the fragment, which never reaches the server and is ignored by most trackers. Put them before the #.
- Tagging Google Ads by hand when auto-tagging is on. gclid already carries the data; manual UTMs can conflict with it. Let auto-tagging do its job unless you have a reason.
Already have a link and want to check it? Use the UTM parser — paste any URL and it breaks out each parameter and lints it with the same rules.
Do UTM parameters affect SEO?
Not if your pages declare a canonical URL. A tagged link is technically a different URL, so without a canonical tag search engines could index example.com/?utm_source=x as a duplicate. With <link rel="canonical"> pointing at the clean URL — which most frameworks and CMSs add by default — Google consolidates them. Don't use UTMs on links between your own pages, and don't put tagged URLs in your sitemap.
From UTM clicks to revenue
Tagging tells you which campaign brought visitors. The harder question is which campaign brought customers. VisitTrack records utm_source, utm_medium and utm_campaign on each visit and connects them to payments from Stripe, Paddle, Lemon Squeezy, Polar or Razorpay, so you can see revenue per campaign — without cookies or a consent banner when you use cookieless mode. See first-touch attribution for how the original campaign is credited when someone pays days later.
Frequently asked questions
Which UTM parameters are required?
Only utm_source is strictly required — without it most tools ignore the other parameters. In practice always set utm_medium too, because GA4 and most other tools use the medium to decide the channel, and add utm_campaign whenever you want to compare campaigns.
Are UTM parameters case-sensitive?
Yes. Analytics tools store UTM values exactly as they appear in the URL, so "Email", "email" and "EMAIL" show up as three separate rows. The simplest fix is to always use lowercase, with dashes instead of spaces — the builder's naming-convention setting does this automatically.
Should I use dashes or underscores in UTM values?
Either works; consistency matters more than the choice. Dashes are slightly more common and read better in URLs. Avoid spaces entirely, because different tools encode them as %20 or +, which creates duplicate values.
What utm_medium should I use for social media?
Use social for organic posts and paid_social (or cpc) for ads. Those values match GA4's default channel rules for Organic Social and Paid Social. Values like tweet, post or story don't match any rule and end up in Unassigned.
Can I add UTMs to links that already have query parameters?
Yes. The builder appends UTMs with & and keeps your existing parameters. If the URL already has UTM parameters, the new values replace them rather than adding duplicates, which many tools would otherwise read inconsistently.
Do UTM links hurt SEO?
No, as long as the destination page has a canonical tag pointing at the clean URL, which most sites have by default. Just don't use UTMs on internal links between your own pages, and keep tagged URLs out of your sitemap.
Is this UTM builder free and private?
Yes. It's free, needs no account, and runs entirely in your browser: the URLs and CSVs you paste are never sent to our servers.
Related tools and guides
- UTM parser & linterPaste any URL to see its UTM values and fix mistakes.
- Referrer channel checkerSee which GA4 channel a referrer + UTM combination lands in.
- What are UTM parameters?Glossary entry with definitions and examples.
- First-touch attributionHow the first campaign gets credit for later revenue.
- Cookieless tracking docsTrack campaigns without cookies or a consent banner.
- VisitTrack vs Google AnalyticsCampaign tracking and attribution compared.