UTM parameters: use them without breaking your search data

You use UTM parameters to label visits from links you placed elsewhere. Do it right and your analytics tell a clear story. Do it wrong and you break attribution and pollute search data.

By , founder of Porteur · Updated 14 September 2026 · Markdown

The five UTM parameters and how tools read them

There are five standard UTM parameters: utm_source, utm_medium, utm_campaign, utm_term, utm_content.

  • utm_source: who sent the traffic, for example newsletter, twitter, partner-x
  • utm_medium: the channel type, for example email, social, referral
  • utm_campaign: the label for the push, for example launch-2026-q3
  • utm_term: the keyword label you choose, or a segment label, optional
  • utm_content: the creative or link variant, optional

GA4 reads these as the session’s source, medium and campaign. Those visits fall into a default channel group based on source or medium values, for example Organic Search when the medium is organic from a search engine referrer. The Landing page report shows sessions and key events by the first page of the session.

PostHog classifies sessions into channel types from the referrer and UTM values. A $pageview carries $current_url, $pathname and $referring_domain. A person record carries initial referrer and initial UTM properties from their first visit. Funnels run from a landing page path to a product event and can be broken down by the initial referring domain.

Example URL you share in a newsletter:
https://yourproduct.com/guides/getting-started?utm_source=newsletter&utm_medium=email&utm_campaign=launch-2026-q3&utm_content=cta-top

When to use UTM parameters, and when never to

Use UTMs on links you place outside your site: newsletters, social posts, partner sites, QR codes, a founder’s profile link. You are labelling that session’s origin.

Never use UTMs on internal links. An internal UTM starts a new session and steals credit from the actual source. It also makes paths and funnels noisy.

Do not add UTMs to links you want counted as referrals. For example, a partner’s blog links to your /pricing page. Leave their link clean so analytics treat it as referral from that domain. If you add UTMs, you overwrite the true referrer and lose the partner view in reports.

Bad: internal UTM on your own nav
<a href="/pricing?utm_source=navbar&utm_medium=internal&utm_campaign=summer">Pricing</a>

Good: clean internal link
<a href="/pricing">Pricing</a>

A simple naming scheme you can share

Agree this once with your team. Put it in your README so guests follow it. Here is a small scheme that works on a product site.

FieldRuleExamples
utm_sourceChannel or site name, lowercase, hyphensnewsletter, twitter, linkedin, indie-hackers, partner-x
utm_mediumChannel type from a short listemail, social, referral, cpc, display
utm_campaignPurpose and date or sprint taglaunch-2026-q3, webinar-ai, promo-sept
utm_termAudience or keyword label, optionalfounders, onboarding-guide, pricing
utm_contentCreative or link variant, optionalcta-top, body-text, image-a, button-b

What a clean set looks like in reports: source=newsletter, medium=email, campaign=launch-2026-q3, content=cta-top. No duplicates from case or spaces. The same labels appear in GA4’s session source or medium and in PostHog’s initial UTM properties.

Keep your search data clean

A UTM URL can be indexed if others share it. You do not want /guides/getting-started?utm_source=newsletter in Google’s index. A canonical tag on that page pointing to the clean URL prevents duplicate indexing.

  1. Set a canonical to the clean URL

    On /guides/getting-started, add <link rel="canonical" href="https://yourproduct.com/guides/getting-started"> in the head. This covers any UTM version that lands there.

  2. Avoid UTMs on links you want as referrals

    If you want to see referring domains in analytics, let their clean links speak. Do not overwrite them with UTMs you provide.

  3. Watch Search Console for duplicates

    If you see parametered URLs in Indexing, ensure your canonical is present on the landing template and returns 200.

What a fixed page looks like: /pricing renders a single canonical to https://yourproduct.com/pricing. Whether the visitor arrives with or without UTMs, the canonical is the same clean URL, and internal links are clean.

Check your work in GA4

You care about two things. First, Organic Search stays clean. Second, your UTM-tagged pushes show as the right source or medium and campaign. Use standard GA4 reports for both checks as of 2026.

  1. Open Engagement, Landing page

    Add a secondary dimension for Session source / medium. Your search traffic will show sources like google / organic and bing / organic. Your pushes show as newsletter / email or twitter / social.

  2. Check key events by landing page

    Confirm that sessions with utm_source=newsletter land where you expect. Key events replaced conversions in 2024. Mark signups as key events to see them here.

  3. Spot internal UTM mistakes

    If you see a spike of sessions with source=navbar or medium=internal, someone added UTMs to internal links. Fix the links and annotate the date.

  4. Use comparisons for attribution views

    Switch the attribution model to first click or last click in comparisons to see how key event credit shifts. Data-driven is the default setting.

Sessions and Search Console clicks never match row by row. A click can start no session, a session can trail several clicks, and consent tools drop sessions. Look for trends, not perfect totals across products.

Join Search Console and analytics by landing page

Search Console shows queries, pages, impressions and clicks. Analytics shows what visitors did after the click. Joined by landing page, they show the pages that win clicks and the pages that convert. You fix the gap where either side is weak.

  1. Link Search Console to GA4

    In GA4 Admin, Product links, Search Console. This adds two reports in the Library: Google organic search queries and Google organic search traffic.

  2. Read clicks with sessions

    Use the Google organic search traffic report. It joins clicks and impressions to landing pages with Search Console’s lag and anonymisation rules.

  3. Find weak pages

    Sort by clicks then scan key events. A page like /guides/getting-started might get clicks but no signups. Improve the call to action or the next step.

UTMs do not touch Organic Search classification. They label your pushes. This split lets you see which landing pages work for search, and which pushes send qualified traffic that later signs up.

Use product analytics to answer the revenue question

First touch credits the visit that brought the person. Last touch credits the visit before the conversion. For a product site the useful question is which landing pages bring people who later sign up. You need the first landing page joined to a later event to answer it.

  1. Capture landing and signup

    Send pageview events with paths. Send product events like signup and activation. Mark signup as a key event in GA4. In PostHog, you will see $pageview and your product events.

  2. Break down by first touch

    In PostHog, build a funnel from a landing page path, for example /pricing, to signup. Break it down by initial referring domain. Add initial UTM properties if you want to compare pushes.

  3. Join payments to people

    To attribute revenue to search, join the payment event to the person and their first landing page. Build a report from that. It answers what a search click earns.

Rates from consented sessions undercount in the EU when cookies need consent. Treat them as directional. Cookieless and server-side options exist, but compare like with like when you judge a change to a page or a push.

Common mistakes and quick fixes

  • Internal links with UTMs. Fix by removing the parameters and letting the original session continue.
  • Uppercase or spaces in values. Fix by standardising to lowercase and hyphens. Update your builder template.
  • Inconsistent mediums. Fix by picking a short list and rejecting new ones in review.
  • UTM links indexed. Fix by adding a canonical to the clean URL on the landing template.
  • Overwriting referrals. Fix by not forcing UTMs onto partners whose referral you want to see.
  • Unclear campaigns. Fix by using a readable campaign label with a date or sprint tag, for example launch-2026-q3.
Quick checklist before you ship a link:
[ ] Clean landing page URL chosen
[ ] utm_source set to the channel or site name
[ ] utm_medium set from your short list
[ ] utm_campaign readable and dated
[ ] utm_content or utm_term only if useful
[ ] Values are lowercase, hyphenated, no spaces
[ ] Link tested and page loads fast
[ ] No internal UTMs added on your site

Questions

Sources

Check my site, free

Want to see if your landing pages and pushes play nicely with search, and where rivals win clicks, from your URL in about thirty seconds, free, with three findings shown whole? Try Porteur’s check.

  • Free check, no card
  • Read-only, your own accounts
  • Readable by your agent

Read next