How to track QR code campaigns (UTMs, redirects, and conversions)
Most QR code campaigns fail for a boring reason:
Nobody knows if they worked.
You print a QR code.
People scan it.
Traffic shows up in your analytics as "direct" or "other" and the team shrugs.
Tracking matters because it turns QR codes from decoration into a growth channel.
This guide shows a practical setup that works for small teams and scales for bigger ones.
No jargon, no complicated tooling.
Just a clean way to measure scans and conversions.
TL;DR
- Use a short redirect (dynamic QR) so you can update destinations later and keep the code scannable.
- Put UTM parameters on the final destination URL, not inside a huge static QR pattern.
- Choose a naming convention you can stick to.
- Track two numbers: scans and conversions.
What you can track (and what you cannot)
A QR code scan is not the same as a conversion.
You can reliably track:
- scans (how many people opened the link)
- landing page sessions (analytics)
- conversions (signups, purchases, leads)
You cannot perfectly track:
- unique people across devices
- scans that never complete the browser load
That is fine.
Your goal is directionally correct data you can act on.
The clean tracking stack
A simple, robust setup has three layers.
Layer 1: The QR code
Keep the QR code itself simple.
Avoid encoding a massive URL with lots of parameters.
Dense QR patterns scan worse, especially:
- on curved surfaces (bottles)
- on glossy print
- in low light
- at small sizes
Layer 2: A redirect link you control
Use a dynamic QR code that points to a short redirect.
Example:
- qrshuffle.com/r/spring-flyer
This redirect gives you two benefits:
- you can change the destination without reprinting
- you can measure scans at the redirect
Layer 3: The final destination URL with UTMs
The redirect sends people to the real landing page.
That final URL should contain UTM parameters so your analytics platform can attribute traffic.
Example destination:
UTM parameters that actually matter
UTMs are just labels.
The trick is to use them consistently.
A good default set:
- utm_source: qr
- utm_medium: print
- utm_campaign: the campaign name
- utm_content: the variant or placement
If you want to go further, you can also use:
- utm_term: rarely needed for QR, more for paid search
A naming convention you can use forever
Most teams break tracking because names drift.
Pick a convention that answers three questions:
- where was the QR code placed?
- what creative version was it?
- what time window was it?
Example convention:
- utm_campaign: 2026_02_spring_sale
- utm_content: poster_main_entrance_v1
It looks boring.
That is good.
Boring means reliable.
Example: tracking a cafe poster
Scenario:
- You place posters in two locations: entrance and counter.
- You test two CTAs: "10 percent off" vs "free coffee".
Make four variants.
Redirects:
- /r/cafe-entrance-10off
- /r/cafe-entrance-freecoffee
- /r/cafe-counter-10off
- /r/cafe-counter-freecoffee
Destinations:
Each redirect points to the same landing page but with different UTMs.
Now you can answer:
- which location drives more scans?
- which CTA drives more conversions?
If you later change the landing page, you update the redirect.
No reprint.
How to measure conversions
Scans are top of funnel.
Conversions depend on your goal.
Common conversion events:
- email signup
- lead form submit
- purchase completed
- app install
Make sure your analytics platform tracks the event.
Then you can compare:
- scans per placement
- conversion rate per placement
- revenue per placement
That is how you decide where to print more.
Common mistakes to avoid
Mistake 1: Putting personal data in UTMs
Do not put names, emails, or anything sensitive in UTM parameters.
Keep UTMs anonymous.
Mistake 2: Using a static QR code with a huge UTM URL
It can work.
But it is a scan reliability risk.
Use a short redirect.
Mistake 3: Changing names mid campaign
If you rename utm_campaign halfway through, your reporting becomes a mess.
Lock your names for the campaign duration.
Mistake 4: Forgetting to test the printed code
Always print one and test in the real environment.
If your QR code is on a window, test with glare.
If it is on a menu, test at the expected distance.
How QRShuffle helps
QRShuffle is built for campaign tracking.
You can:
- create dynamic QR codes with short redirects
- update destinations without reprinting
- keep your QR patterns clean for better scanning
- manage variants and placements without a spreadsheet nightmare
If you want a simple way to launch and track your next QR campaign, start here: