How to build UTM links

A tagged campaign URL is just a destination plus a well-formed query string. Here is the full process: choosing parameters, encoding values, joining them correctly, and testing before you share.

Guide · LinkTag

Step 1: Start with the destination URL

Every campaign URL begins with the page the visitor should land on — the full address including the protocol, e.g. https://example.com/spring-sale. Use the final landing page, not a redirect, whenever possible: some redirect setups drop query parameters, which silently strips your UTM tags before analytics ever sees them.

If the destination already has its own query string — for example a product page with ?color=blue — keep it. UTM parameters are appended after the existing ones. This is one of the two places hand-built links most often break, which is why a builder that joins with & automatically is worth using.

Step 2: Choose your parameters

Decide which of the five standard parameters each link needs:

  • Always set: utm_source, utm_medium, utm_campaign. These three are what analytics documentation recommends on every campaign URL, and they are the dimensions campaign reports are built from.
  • Add when useful: utm_term for the paid-search keyword behind an ad click.
  • Add when useful: utm_content to distinguish links that share a URL and source — two buttons in one email, two creatives in one ad set.

More parameters are not better. Each extra tag is another value to keep consistent; tag what you will actually report on.

Step 3: Write values your future self can read

Values should be lowercase, descriptive, and consistent. utm_campaign=spring_sale is self-explanatory in a report six months from now; utm_campaign=camp1 is not. Multi-word values need a separator — pick hyphens or underscores and never mix them, because spring_sale and spring-sale are recorded as different campaigns.

Settle the vocabulary before you build: one exact name per platform (utm_source), a short controlled list of channel types (utm_medium), and a campaign naming pattern that includes enough context to stay unique, such as a date or quarter for recurring pushes. Our naming conventions guide covers the rules in depth.

Step 4: Assemble and encode the query string

The mechanics are straightforward but unforgiving:

  1. The first parameter follows a ? appended to the destination: https://example.com/page?utm_source=newsletter.
  2. Every further parameter is joined with &: ?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale.
  3. If the destination already contains a ?, all UTM parameters join with & — never add a second ?.
  4. Each value is URL-encoded: spaces become %20 (or + in form encoding), and reserved characters like &, =, # and ? inside values are encoded so they cannot break the query string.
  5. If the URL has a fragment (#section), parameters go before it.

A campaign URL builder handles all five rules for you — that is the entire job of the tool on this site's homepage. Building by hand is fine for a single link, but encoding mistakes compound fast across a campaign.

Step 5: Test before you share

A tagged URL is only useful if your analytics actually records it. Before a major send:

  • Open the tagged link in a private browser window and confirm it loads the right page.
  • Check your analytics real-time or debug view to confirm the visit arrives with the expected source, medium and campaign values.
  • Verify the values appear exactly as typed — no double-encoding (%2520 instead of %20), no truncated parameters.
  • Confirm no redirect in the chain strips the query string.

This two-minute check catches the overwhelming majority of tagging failures, and it is far cheaper than discovering a broken tag after an email has gone to your whole list.

Worked example

Destination: https://example.com/guides/seo-basics. You are sharing it in your newsletter as part of a spring promotion, and the email has two links to the page — one in the hero, one in the footer.

  • Hero link: https://example.com/guides/seo-basics?utm_source=newsletter&utm_medium=email&utm_campaign=spring_promo&utm_content=hero_link
  • Footer link: https://example.com/guides/seo-basics?utm_source=newsletter&utm_medium=email&utm_campaign=spring_promo&utm_content=footer_link

Same source, medium and campaign — so the campaign report stays unified — with utm_content separating the two placements. In your analytics you can now answer both "how did the spring promo perform" and "did the hero or footer link earn more clicks."

Remember: UTM tags belong on links you share outside your site. Never add them to internal navigation links — they overwrite the visitor's original campaign source in your analytics.

Build it instead of hand-writing it

The free LinkTag builder assembles, encodes and previews your campaign URL live — then copies it in one click.

Open the UTM builder