Attribution

UTM parameters, a complete guide for founders

Ownlytics team · · 7 min read

UTM parameters are tags you add to a link's URL (utm_source, utm_medium, utm_campaign, and optionally utm_term and utm_content) so your analytics can tell which link brought a visit. Use them on links you control, name them consistently, and make sure they survive until the visitor pays.

https://yoursite.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=launch-week
utm_source
Where the click came from: a site, a list, a person.
utm_medium
The kind of channel: email, social, cpc.
utm_campaign
The specific push this link belongs to.

Fig.One tagged link. Keep the names lowercase and consistent, or the same campaign splits into three rows.

What each parameter is for

A tagged link looks like this:

https://example.com/pricing?utm_source=newsletter&utm_medium=email&utm_campaign=launch-week
ParameterAnswersExample
utm_sourceWhere the link livesnewsletter, x, hn
utm_mediumThe kind of channelemail, social, paid
utm_campaignWhich specific effortlaunch-week, thread-pricing
utm_termThe keyword (paid search)analytics-for-indies
utm_contentWhich variant or linkheader-button, footer-link

For most founders, source, medium and campaign are enough. The other two matter once you run ads or test several links in the same place.

When to tag, and when not to

Tag every link you place yourself: social posts, newsletter issues, the link in a podcast description, your email signature, partner pages that agree to use your link.

Do not tag links inside your own website. Tagging internal links starts a new campaign mid-visit and overwrites the real source with your own. Also avoid tagging links you can't control after posting, such as links others share organically. Those carry their own referrer, which is more honest.

Why tags matter more than referrers

Referrers are unreliable. Many apps pass nothing at all, and some pass only a generic domain. Ownlytics recognizes a list of in-app browsers, for example Instagram, TikTok and Reddit, and credits the app, but not every app is recognizable. For example, the X app on iPhone can't be told apart from Safari, so the docs recommend adding ?ref=x to links you post.

A tag you wrote does not depend on what the app decides to send. In Ownlytics, utm_source and ?ref= win over the referrer, so a tagged link is credited the way you named it. The full rules are in sources and attribution.

Naming rules that keep reports clean

Analytics treats Newsletter, newsletter and news-letter as different values if they arrive that way. Decide once and write it down.

  1. Use lowercase only.
  2. Use hyphens, no spaces.
  3. Keep a short, fixed list of sources and mediums. Add a new one only when needed.
  4. Put dates or numbers in the campaign, not the source: launch-2026-11, not launch as a source.
  5. Name campaigns after the thing, not the channel: pricing-thread, since the channel is already the source.
  6. Never put personal data, such as an email address, in a tag. URLs are logged in many places.

Here is a small example sheet (made-up values for illustration).

Where you postsourcemediumcampaign
Weekly emailnewsletteremailissue-42
Launch thread on Xxsociallaunch-thread
Reddit commentredditsocialsetup-question
Podcast guest spotpodcastreferralguest-episode-7

Keep this in a note or spreadsheet. Ownlytics also has a campaign link builder in settings that previews the source and channel exactly as it will record them, so you can check a tag before posting. Each post you name appears as its own campaign with its visits and sales, even where the referrer is hidden.

yourapp.comToday7d30d9 online
CampaignVisitorsSalesRevenue
@cold-email / seq-a4203$147
@cold-email / seq-b3801$49
inlinkedin.com5602$98
↗Direct · typed or bookmark2101$49
Ggoogle.com1500$0

Fig.Campaign names as they show up in a source table. Sample data, not a real site.

Make tags survive until the sale

This is where most founders lose their data. A visitor lands with tags, browses, then clicks "Buy" and is sent to a checkout on another domain. The tags don't follow by themselves.

Capturing tags on landing and carrying them into the payment is the fix. The guide on UTM tracking with Stripe Checkout shows how to keep them in a first-party cookie and copy them into checkout metadata, and the revenue docs describe how Ownlytics links a payment to the visit that produced it. Without that step, you can count clicks per tag but not sales per tag.

Common mistakes

A five-minute test

  1. Build the tagged link.
  2. Open it in a private window.
  3. Check your realtime or traffic view to confirm the source and campaign show as you named them.
  4. Click through to checkout and confirm the tag is still available to your server or script.
  5. Only then publish.

For a deeper walk-through on one channel, see which tweet made a sale. To see what tags reveal once sales are attached, read how to know which blog post made a sale.

When tags are not the answer

If most of your traffic comes from places you can't tag, such as search or word of mouth, UTM discipline won't reveal much. In those cases, read referrers and landing pages, and watch the Direct bucket. We cover it in direct traffic explained. Also, tags describe the click, not the person's intent. A well-tagged link can still bring the wrong audience.

Where to go next

If you want to see how tagged campaigns appear next to revenue, the demo shows a sample site.

FAQ

Are UTM parameters case sensitive?

Treat them as case sensitive. Many tools show Email and email as separate rows, so stick to lowercase.

Do UTM parameters hurt SEO?

They can create duplicate URLs if shared widely, so many sites add a canonical tag pointing to the clean URL. Check Google's current guidance on canonical URLs if search ranking matters to you. Use tags on links you place yourself, not internal ones.

Can I use ref instead of UTM?

In Ownlytics, ?ref= is read like utm_source. UTM tags give you medium and campaign too, so use them when you want that detail.

Do UTM tags work if the visitor blocks cookies?

The tag is in the URL, so the click itself is readable. Linking it to a later sale needs the visitor id or a same-day link, depending on your cookie settings.

See the live demo · View pricing

Keep reading