UTM link builder
UTM parameters are tags appended to a URL that let analytics tools — Google Analytics, Plausible, and others — attribute a visit to the exact campaign, source and medium that produced it. This builder takes your destination URL and a few campaign details and assembles a clean, ready-to-share tracking link, entirely in your browser.
How it works
You enter a destination URL and the campaign fields. The builder separates any existing #fragment, parses the existing query string with URLSearchParams, then merges in the five standard parameters for any field you filled in:
| Parameter | Purpose | Example |
|---|---|---|
| utm_source | Where traffic comes from | newsletter |
| utm_medium | Channel type | |
| utm_campaign | Campaign name | spring_sale |
| utm_term | Paid keyword (optional) | running_shoes |
| utm_content | Creative / variant (optional) | header_cta |
Empty optional fields are skipped, existing parameters and the fragment are preserved, and values can be forced to lowercase so reports do not split across Email and email.
Worked example
Starting from https://shop.example.com/sale, filling in source newsletter, medium email and campaign spring_sale produces:
https://shop.example.com/sale?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale
If the URL already had ?ref=vip#offers, the result keeps ref=vip, adds the UTM tags, and reattaches #offers at the end.
Naming conventions that keep your analytics clean
UTM tracking creates as many problems as it solves when teams use inconsistent values. One person writing utm_medium=Email and another writing utm_medium=email produces two separate rows in every GA4 report, making channel aggregation unreliable. A few practices prevent this:
Force lowercase. This tool has a lowercase toggle for exactly this reason. Enable it for every link you build. Facebook, facebook, and FACEBOOK are three distinct values in reports; facebook alone is correct.
Use a shared naming document. Define and document your medium values once:
email— all email campaignscpc— paid searchsocial— organic social postspaid-social— paid social adsaffiliate— affiliate linksdisplay— display adsreferral— links from partner sites (though these are often auto-detected)
Use consistent campaign name formats. A common pattern is YYYY-MM-[campaign-name], for example 2025-03-spring-sale. This makes it easy to filter by date range in reports.
Do not use UTM on internal links. Adding UTMs to links between your own pages overwrites the original source in analytics. Internal links should never be tagged — UTM is for external traffic sources only.
When to use utm_term and utm_content
utm_term is designed for paid search: it records the specific keyword that triggered the ad. In Google Ads, {keyword} auto-fills this parameter. For non-paid campaigns it is rarely used, but it can track a specific topic or segment in an email (“subscribers who clicked the productivity article”).
utm_content is most useful for A/B testing creative. If you send an email with two different CTA buttons — one that says “Shop now” and one that says “See the sale” — tag them with utm_content=cta_shop_now and utm_content=cta_see_sale respectively to see which drives more clicks in your analytics.
SEO and canonical considerations
UTM parameters appear in the URL and can cause duplicate content issues if search engines index the tagged versions alongside the clean URL. To prevent this, make sure your pages have a canonical tag pointing to the unparameterized URL:
<link rel="canonical" href="https://shop.example.com/sale" />
Most modern CMSes and frameworks add canonical tags automatically. Google generally strips UTM parameters from its index, but a canonical tag is the belt-and-suspenders approach.
Notes
Everything runs in your browser — your URLs and campaign names never leave your device. If your destination URL already contains query parameters, the builder merges the UTMs alongside them rather than overwriting, and the original fragment is preserved at the end of the final URL.