Common QR Code Mistakes (and How to Avoid Them)
A QR code that doesn't scan is arguably worse than no QR code at all - it wastes the reader's time, creates a moment of frustration, and reflects poorly on whoever printed it. After looking at what actually goes wrong across countless real-world QR code deployments, nearly every failure traces back to one of a small set of avoidable mistakes. Here's the complete list, in order of how often each one actually occurs.
1. Never testing on real, physical devices
A code that scans perfectly on your own phone, at your desk, in good lighting is not a meaningful test - it's the best-case scenario, and real-world conditions are rarely best-case. Before committing to any print run, test on at least two or three different phones (mix of iOS and Android, old and new models if possible), in the actual lighting conditions where the code will be used, at the actual print size.
2. Printing too small or from a low-resolution source
Downloading a small preview image and stretching it in a design tool introduces blur that directly breaks scanning - each module needs sharp, clean edges to be read correctly. Always download at the resolution (or better, the vector format) appropriate for your actual final print size, not whatever size happened to load on screen. See our complete size guide for specific numbers.
3. Low contrast between foreground and background
Light gray on white, pastel-on-pastel combinations, or a busy background image placed directly behind the code all dramatically reduce scan reliability, especially under imperfect lighting or lower-quality printing. Stick to genuinely dark foreground colors on light backgrounds (or the reverse) with strong, unambiguous contrast between the two.
4. Ignoring the quiet zone
Cropping a QR code tightly against other design elements, or placing it right at the edge of a page or graphic, removes the blank margin that scanners rely on to detect where the code's boundaries actually are. This is an extremely common mistake made by designers trying to save space in a tight layout, and it's almost always fixable simply by leaving more breathing room.
5. Oversized or poorly placed logos
A logo covering more than roughly 20-25% of the code's total area - even with High error correction active - risks pushing the code past the point of reliable recovery, especially if the logo isn't well-centered or has low contrast with its surroundings. Keep logos modest in size and always re-test the final code after adding one; see our complete logo guide for the specific numbers.
6. No fallback for people who can't or won't scan
Not every reader has a working camera, sufficient battery, comfortable eyesight for scanning, or simply the inclination to bother. Always print the destination URL (shortened if needed) or a short plain-text instruction near the code, so the material remains functional even for people who skip the scan entirely.
7. Choosing static when dynamic was needed (or vice versa)
Printing a static QR code for something you'll likely need to update - a seasonal offer, an evolving landing page - guarantees an expensive reprint down the line the moment something changes. Conversely, using a dynamic code for something permanent (like WiFi credentials or a personal vCard) adds an unnecessary dependency on a hosted redirect for content that never needed to change in the first place. Match the type to the actual use case; our static vs dynamic guide covers the decision framework in depth.
8. Encoding a broken or untested destination link
It sounds obvious, but it happens constantly: a code generated and printed weeks before launch, pointing to a URL that changed, moved, or was never actually published live. Always do a final scan test of the exact printed material shortly before distribution, not just a review of the destination link in a browser.
9. Forgetting mobile-friendliness on the destination side
Getting someone to scan a code is only the first step - if the destination page is a desktop-oriented layout with tiny unreadable text, you've spent all that effort earning attention only to lose the person immediately afterward. Always view and test the actual destination on a real phone screen.
10. Printing on the wrong material or surface
Glossy laminates can create glare that obscures a code under certain lighting angles; matte or textured materials can reduce the sharpness of fine module edges; curved surfaces (bottles, cans) distort the pattern's geometry. Test on the actual final material and surface, not just a flat proof sheet, whenever the production material differs meaningfully from a standard flat print.
11. Assuming every phone camera performs identically
Camera quality, autofocus speed, and low-light performance vary considerably across phone models and price points - a code that scans instantly on a recent flagship phone may take several attempts on an older or budget device. If your audience is broad and likely includes a wide mix of device ages, err toward more generous sizing and higher contrast than the bare technical minimum would suggest, rather than optimizing purely for the newest hardware.
12. Not accounting for how the code will actually be viewed
A code designed to be viewed on a phone screen (in a digital ad or a video) needs different handling than one meant for print - screen brightness, refresh rate, and potential moiré patterns from photographing a screen displaying a QR code all introduce failure modes that don't apply to ink on paper. If your code will primarily be scanned from another screen, rather than a physical print, test that specific scenario explicitly rather than assuming print-based testing covers it too.
A pre-print checklist to run through every time
- Tested on multiple real devices, in realistic lighting?
- Sized appropriately for the expected scanning distance?
- Strong contrast between foreground and background?
- Quiet zone (margin) left undisturbed?
- Logo (if any) modest in size, with High error correction active?
- Text fallback included nearby?
- Static vs dynamic choice matches whether the destination might change?
- Destination link confirmed live and mobile-friendly?
Running through this list takes a few minutes and reliably catches the mistakes that account for the vast majority of real-world QR code failures.
Frequently asked questions
Is there one single mistake that causes the most failures? Not testing on a real, physical device before printing. Nearly every other mistake on this list - wrong size, low contrast, an oversized logo - would be caught immediately by a genuine test scan, which is why it consistently ranks first.
Can a mistake be fixed after a code is already printed and distributed? Only if the underlying code was dynamic - a static code's data is permanent, so a formatting or destination error means replacing the physical material entirely. This is one of the strongest arguments for using a dynamic QR code on anything beyond a small, low-stakes print run.
How do I know if a code is failing silently, with no complaints coming in? You generally don't, which is exactly the risk - most people who fail to scan a code simply give up rather than reporting it. Treat a pre-print test as mandatory rather than optional, since there's rarely a reliable feedback loop afterward.
Conclusion
Nearly every QR code failure in the wild traces back to one of the twelve items above, and nearly all of them are caught by the same simple habit: printing a test copy and scanning it on a couple of real phones, in realistic lighting, before committing to a full run. It costs a few minutes and reliably prevents the kind of silent failure that wastes an entire print budget without anyone knowing why. Pair this checklist with our size guide and print marketing best practices for the complete picture before your next campaign goes to print.