Guide
UTM links for indie hackers: a simple system
Published · 6 min read
You share a link to your product in a thread, a newsletter and a forum on the same day. Visits go up. Which of the three did it? Without a tag on each link, your analytics can only guess from the referrer, and the referrer is missing more often than you would think: apps, email clients and private browsing all strip it.
A tagged link carries its origin with it. This guide explains the standard way to do that, the shorter way, and how to keep either one tidy when you are the only person maintaining it.
What a UTM parameter is
A UTM parameter is a piece of text added to the end of an address, after a question mark:
yoursite.com/?utm_source=newsletter&utm_medium=email&utm_campaign=launch
The page that loads is the same. The extra text is there for your analytics tool to read. The name comes from Urchin, the analytics product Google bought in 2005 and turned into Google Analytics; the parameters outlived it and are now understood by almost every analytics tool (Wikipedia has the history).
Google's own documentation lists the parameters and what each is for. The three it says you should always use are:
utm_source: where the visitor comes from, such as a site or a newsletter.utm_medium: the kind of channel, such as email or a paid ad.utm_campaign: the specific campaign, such as a launch or a promotion.
Two more are optional: utm_content, to tell apart two links in the same place, and utm_term, for paid search keywords. The full list is in Google's page on campaign URLs.
What a solo maker actually needs
That scheme was designed for marketing teams running paid campaigns across agencies. As a solo maker you have a simpler question: which of my posts brought this visitor?
One value answers it. That is why upTake reads a short parameter of its own, alongside the standard ones:
yoursite.com/?ut=reddit-launch
One parameter, one value, easy to type from memory at midnight. If you already use UTM links, keep them: upTake reads utm_source as well, along with ref, via and source, and takes the first one it finds.
Whichever form you choose, the rules that follow matter more than the syntax.
Name your tags so you can still read them in six months
A tagging system fails slowly. Nothing breaks. You simply end up with Reddit, reddit, reddit_post, rdt and reddit2 in the same report, and nobody remembers what reddit2 was.
Four rules prevent most of it:
- Lowercase, always. Many tools treat
Redditandredditas two sources. - Hyphens between words. No spaces, no accents, no special characters. They get encoded into something unreadable.
- Platform first, then the specifics.
x-pricing-thread,reddit-sideproject,newsletter-issue-12. Sorted alphabetically, your tags then group by platform by themselves. - One tag per post, not per platform.
xtells you that X works.x-pricing-threadtells you which post worked.
Write the convention down in one line, somewhere you will see it. A convention that lives only in your head lasts about three weeks.
Where to put tagged links
Everywhere you control the link:
- Posts and threads. One tag each.
- Your profile. The link in your bio gets clicked by people who liked a post and wanted to know more. Give it its own tag, such as
x-bio, or those visits will look like they came from nowhere. - Newsletters. One tag per issue. If an issue has two links to your site, add a second word to tell them apart.
- Your email signature, guest posts, podcast show notes, directory listings.
- Printed material and slides, through a QR code that points to the tagged address. In upTake, each tracked link has its QR code.
And one place where you should not: links between pages of your own site. A tag on an internal link overwrites the real origin of the visitor with a fake one.
Keep the address clean after the visitor arrives
A long tagged address has two drawbacks once it has done its job. It looks cluttered, and when a visitor copies it from the address bar and shares it, their friends arrive carrying your tag. Your newsletter then gets credit for visits it never sent.
The fix is to remove the tag from the address bar once it has been read, without reloading the page. Browsers allow a script to do that. upTake's script does it for its own parameter: it reads ut, files the visit, and takes the parameter out of the address. Standard UTM parameters are left in place, because other tools on your site may need them.
Where tagged links stop working
Tags are simple and reliable, but they do not see everything. It is better to know the gaps than to trust a number that hides them.
- People who do not click. Someone reads your post, remembers the name and types it into a search engine two days later. That visit arrives as search or as direct. This is common, and no tag can catch it.
- Posts where you cannot put a link. Some platforms and some communities do not allow links, or reduce the reach of posts that contain one. Log the post by hand with its date instead. upTake then estimates its effect from the traffic that channel sent in the following 72 hours, and labels the result as estimated.
- Other people talking about you. You cannot tag a link you did not write. The referrer is all you get.
- The payment. A tag tells you where a visit came from. Connecting that visit to a payment made later is a separate step, covered in the guide on Stripe revenue attribution without code.
A reasonable reading of your numbers is therefore: tagged visits are a floor, not a ceiling. If a post shows 400 tagged visits, it brought at least 400.
From clicks to customers
Counting clicks per tag is where most setups stop, and it is the least interesting number. What you want next to each tag is:
- the visits it brought,
- the signups among them,
- the payments among those,
- the revenue.
That requires the same tool to see the visit and the conversion. Reporting a signup takes one line on your site. Payments come from your payment provider. Once both are in, a tag stops being a traffic label and becomes a line in a table sorted by revenue, which is the table you need when deciding what to post next.
If you want to see what that looks like before setting anything up, the live demo shows an example project with its links, posts and revenue.
A system you can keep
Here is the whole thing, small enough to follow when you are busy shipping:
- One short tag per post, lowercase, platform first.
- A tag on every link you control, including your profile and your signature.
- Never a tag on a link inside your own site.
- A note of each post with its date and tag, so the numbers have a story.
- A look at signups and revenue per tag once a week, not clicks once a day.
You can build tagged links by hand or use the free link builder, which writes the address and its QR code for you. The tool matters much less than the habit: a tag on every link, named so that you will understand it later.
See this in upTake
Create one tagged link per post with the free link builder, then share it after installing the site script. Links groups recorded results by network so you can compare the places you tried.