Trackable QR Codes for Posters: See Who Scanned, and From Where
You put a QR code on a poster, the poster goes up at a conference, a clinic, or a coffee shop, and people scan it. Then you open your analytics and... nothing useful. A bump in traffic, maybe, filed under "direct." No way to tell which poster did the work, or whether it did any work at all.
Here's how we set up a trackable QR code for posters and other printed materials, so scans show up as a named campaign instead of disappearing into the noise.
Why a plain QR code shows up as "direct" traffic
When someone clicks a link on a website, their browser usually tells the destination where they came from. That's the referrer, and it's how analytics knows a visit came from Google or a newsletter.
A QR code on paper has no referrer. The camera reads the code, opens the URL, and the visit arrives with no information about its origin. Google Analytics files it under "direct," the same bucket as someone typing your address or clicking a bookmark.
So if your poster's code points straight at https://example.com/event, you can't separate poster scans from everything else, let alone tell three posters apart.
What makes a QR code trackable
A trackable QR code is really two pieces working together:
- The QR code points to a short link you control, not directly to your final page.
- That short link redirects to a URL with UTM parameters, which tell your analytics exactly which campaign, source, and medium the visit came from.
The short link gives you a count of scans (each scan is a click on that link), and the UTM parameters make the visit show up correctly in your analytics. You get QR code tracking from both ends: the link tool tells you how many times the code was used, and your analytics tells you what those visitors did next.
Bonus: a short link makes a simpler QR code with fewer modules (the little squares), which scans more reliably.
The five UTM parameters, with a poster example
UTM parameters are tags added to the end of a URL. Analytics tools read them and attribute the visit accordingly. There are five standard ones:
| Parameter | What it means | Poster example |
|---|---|---|
utm_source |
Where the traffic comes from | poster |
utm_medium |
The type of channel | print |
utm_campaign |
The campaign name | spring-symposium-2026 |
utm_content |
Which variation or placement | booth-12 or lobby-a |
utm_term |
Keyword (mostly for paid search) | usually left blank for print |
The first three matter most. utm_content is where poster tracking gets useful: give each poster or location its own value and you can see which placement drove the scans. That's the "from where" in the title. It isn't GPS; it's you labeling each printed piece.
A full campaign URL for one poster might look like this:
https://example.com/event?utm_source=poster&utm_medium=print&utm_campaign=spring-symposium-2026&utm_content=booth-12
That's too long for a QR code and nobody will type it, which is why the short link sits in the middle.
Keep reports clean: use lowercase (analytics treats Poster and poster as different sources), hyphens instead of spaces, and one naming convention across your team.
Step by step: from campaign URL to printed QR code
Here is the workflow we use. In tinyous, the campaign URL builder, the short link, and the QR code all live in one account, so you are not copying URLs between three different tools.
1. Build the campaign URL
Start with the page you want people to land on, then add your UTM parameters. A campaign URL builder assembles the URL for you from source, medium, campaign, and content, which avoids the typos that creep in when you do it by hand.
If you have several posters, build one campaign URL per poster, changing only utm_content.
2. Shorten it
Turn each campaign URL into a short link. On tinyous's free plan, links live on tnyx.us; the Team plan lets you use your own domain, which helps on print where people want to recognize who a link belongs to. A readable slug like tnyx.us/symposium-booth12 also helps with the fallback text below.
3. Generate the QR code
Generate the QR code from the short link, not the long campaign URL, and download it at print resolution. When someone later asks "which link was on the lobby poster?", the answer is in one place.
Do QR codes expire?
A static QR code encodes the destination URL directly in the pattern. The code itself never expires, but you can't change it. If the page moves or the URL had a typo, the poster is effectively broken.
A link-based code (often called "dynamic") encodes a short link instead. The QR pattern is still static, but the short link in the middle decides where people end up. As long as that short link stays active, the code keeps working. And if your link tool lets you edit the destination, you can repoint the code after the poster is printed without reprinting anything.
People get burned by QR generators that deactivate codes when a trial or subscription ends. If you want a QR code that doesn't expire, check whether the link it points to stays under your control. That's why tinyous is built around short links in your own account.
Print tips: getting scans in the real world
A tracked code is worthless if nobody can scan it. A few things we've learned:
- Size it for the scanning distance. A common rule of thumb is that the code should be about one-tenth of the distance people will scan from. For a poster read from 1 meter away, aim for a code around 10 cm across. Don't go below about 2 cm.
- Use strong contrast. Dark code on a light background. Avoid inverted colors, gradients, or placing the code over a photo.
- Leave the quiet zone. QR codes need a blank margin about four modules wide. Don't let layout crop it tight.
- Print the short link underneath. Put the short link as plain text below the code, like
tnyx.us/symposium-booth12. It gives people another way in when a scan fails, and shows where the code goes before they scan. - Add a reason to scan. "Scan for the full study" or "Scan to register" beats a bare code.
- Test before the print run. Print a proof at actual size and scan it with an iPhone and an Android phone from real distance. Confirm it lands on the right page with UTM parameters intact, and that the test click shows up. Five minutes here beats a reprint.
In practice: posters and printed materials at our busiest customer
Our busiest customer, a biotechnology company , uses tinyous for QR codes and short links on posters and other printed materials.
The workflow looks like what we've described above. Each printed piece gets its own campaign URL with UTM parameters, that URL becomes a short link, and the short link becomes the QR code that goes on the poster. Because the campaign URL, short link, and QR code live together in one account, the team can see what was printed where, and they're not hunting through spreadsheets to find the link behind a particular code.
Reading the results
Once posters are out, you have two places to look.
In tinyous, each short link shows its click activity. Since every scan of the QR code is a click on that short link, this is your scan count. If you gave each poster its own link, you can compare them side by side. On privacy: tinyous hashes visitor IPs and never stores them raw.
In Google Analytics (or whichever analytics tool you use), go to your traffic acquisition reports and filter by campaign, source, or medium. Visits from your posters show up under poster / print with your campaign name, instead of being lumped into "direct." Add utm_content as a secondary dimension to see results per poster. This is also where you see what visitors did next.
Together, that's real QR code analytics: how many people scanned each poster, and what they did on your site. The two numbers won't match exactly (some browsers block analytics scripts, some people leave before the page loads), but the trends line up.
What it costs
tinyous has a free plan for trying it out: 12 links, no credit card. Solo is $9.99/month, Team is $29.99/month and adds your own domain, and Agency is $39.99/month. Registered 501(c)(3) nonprofits get 75% off Solo and Team. Full details are on the pricing page.
If you have a poster going to print soon, the free plan is enough to set up a few trackable QR codes and test the whole flow. Create a free account and try it on your next print run.
FAQ
What is a trackable QR code?
A QR code that points to a short link you control, which then redirects to a URL tagged with UTM parameters. The short link counts scans, and the UTM parameters make those visits show up as a named campaign in your analytics.
Why do my QR code scans show up as direct traffic?
Because a scan from paper carries no referrer. Without UTM parameters on the destination URL, analytics tools can't tell where the visit came from and file it under "direct."
Do QR codes expire?
The QR pattern itself doesn't. A static code works as long as the URL in it works. A link-based code works as long as the short link it points to stays active. Problems usually come from QR services that deactivate links when a subscription ends.
Should I use a different QR code for each poster?
If you want to know which poster performed, yes. Use the same campaign name, give each poster its own utm_content value, and create a separate short link and QR code for each.