QR code marketing best practices that actually move scan rates
A QR code that doesn't get scanned is a design failure, not a technology failure — the code itself works fine. Nearly every low-performing QR code fails for one of a few predictable, fixable reasons.
Give people a reason to scan, not just a code
A bare QR code with no label is asking someone to trust that scanning it is worth their time. Pair it with a short, specific line of copy that says exactly what happens next — "See the full menu," "Get 10% off your first order," "Download the spec sheet" — not just "Scan me." The code is the mechanism; the copy next to it is what actually earns the scan.
Contrast and size, not decoration
A QR code needs enough contrast between the modules and the background to scan reliably, and enough physical size relative to the scanning distance — a code on a highway billboard needs to be readable from a moving car, not from six inches away. Heavily stylized codes (custom colors, a logo in the center, rounded modules) can look great and still scan fine, but only if contrast and quiet-zone margins are respected; the point of styling is brand consistency, not obscuring the pattern.
Test the code before it goes to print, on the actual print size
A code that scans fine on a laptop screen can behave differently printed at business-card size versus billboard size, in different lighting, from different distances. Print a proof at the real dimensions and test it on multiple phones before committing to a full run — this catches contrast and sizing problems while they're still a five-minute fix instead of a reprint.
The landing page matters as much as the code
A scan that lands on a slow-loading, non-mobile-optimized page loses the person who just took the trouble to scan. Every scan is, by definition, happening on a phone — if the destination isn't fast and readable on mobile, the QR code did its job and the landing page undid it.
Make the code dynamic, even if you don't think you'll need to change it
Plans change. Prices update. A landing page URL gets restructured. A static code locks in whatever mistake or outdated detail was true on print day; a dynamic code lets you fix it without a reprint — and gives you scan data you'd otherwise have no way to collect. The marginal cost of using a dynamic code over a static one is close to zero; the cost of needing to change a static one after printing is a full reprint.
Track it like a channel, because it is one
Treat a QR code the same way you'd treat any other marketing channel: give it its own destination or UTM parameters so you can see how much traffic it drove, and check that data periodically rather than assuming it's working. Server-side scan analytics — country, device, referrer, hour-of-day — turn a QR code from a guess into a channel you can actually optimize.