How to track QR codes on print, packaging and signs
A QR code sends no referrer, so scans show up as direct traffic. How to track scans, visits and sales per placement, and print codes that keep working.
On this page
A QR code is just a link printed as a picture. When a phone camera scans it, the phone opens the address inside. Nothing else comes along: no referrer, no app name, no hint that the visit started on a flyer. Without help, every scan lands in your analytics as direct traffic.
Tracking a QR code means putting the source into the link itself, and ideally counting the scan before the page loads.
Static and dynamic codes
- A static code holds your full address. It works forever, but what it points to can never change, and nothing counts scans unless your website does.
- A dynamic code holds a short link. The short link counts the scan, then forwards to the real page. You can change where it points after printing.
For anything printed in volume, use a dynamic code on a domain you own. A code printed on 10,000 boxes is a long-term promise. If it points to a free QR service's domain and that service changes its terms or shuts down, every box points nowhere.
Step 1: one link per placement
The value of QR tracking is comparison: the shop window against the flyer, the table card against the receipt. That only works if each placement has its own link.
Use UTM parameters with a fixed scheme:
https://yourshop.com/menu?utm_source=qr&utm_medium=qr&utm_campaign=autumn-menu&utm_content=table-cardutm_sourceandutm_mediumsay it was a scan.utm_campaignnames the push.utm_contentnames the placement:table-card,window,flyer-oct,package-insert.
GA4 has no default channel for qr, so these visits land in "Unassigned" unless you add a custom channel group (Google). Some teams use utm_medium=print or offline instead. Pick one and use it everywhere.
Step 2: put a short link in the code
A long tagged address makes a dense code with many small squares, which is harder to scan from a distance or on a curved surface. A short link makes a simpler code and gives you a scan count of its own.
Two numbers then tell you a lot:
- Scans, counted by the short link.
- Visits with the QR tags, counted by your analytics.
A big gap between them means the page is slow to load on mobile data, or the visitors leave before it does.
Step 3: count what the scan led to
Decide what a scan is for: an order, a menu view, a signup, a review, a warranty registration. Set it up as a goal, then read results by utm_content to compare placements by outcome, not just by scans.
For a physical store, the outcome is often offline: a person scans, then buys at the till. A discount code shown only on the QR landing page is a simple, honest way to connect the two. Count how many times the code is used at the till.
Printing codes that scan
- Leave a quiet zone. The QR standard asks for a blank margin four modules (squares) wide around the code. Do not crop it or place text against it.
- Keep contrast high. Dark code on a light background. Inverted and low-contrast codes fail on many phones.
- Size for distance. A code read from across a room needs to be much larger than one on a business card. Test it at the real distance, on more than one phone.
- Pick an error correction level. QR codes can still scan with part of the code damaged or covered: about 7, 15, 25 or 30 percent at levels L, M, Q and H (Denso Wave). Use a higher level for packaging that gets scuffed or a logo placed in the middle.
- Download a vector file (SVG or PDF) for print. A small PNG blown up for a poster blurs the edges.
- Test the printed proof, not just the screen version, before the full run.
Common questions
Can you track how many times a QR code was scanned?
Yes, if the code points to a short link or a redirect that counts requests. A static code pointing straight to your page is only counted as a visit, and only when your analytics tag loads.
Why do QR code visits show as direct?
A camera app opens the link with no referrer. Add UTM tags to the link inside the code, so the visit carries its source.
Do dynamic QR codes expire?
The code itself never expires. The short link it points to stops working if the service behind it ends or your plan lapses. Use a short domain you own, so you can move it if you change tools.
Can I change where a printed QR code points?
Only with a dynamic code. Change the short link's destination, and every printed code follows.
Sources
- Google Analytics Help: Default channel group. Checked October 2026.
- Denso Wave, inventor of the QR code: Error correction feature. Checked October 2026.
Spotted something wrong or out of date? Email hello@sporetag.com and we will fix it.