A QR code that won't scan is worse than no QR code at all — someone stood there, pointed their camera, waited, and gave up. The frustrating part is that almost every failed scan traces back to one of a small set of causes, and most are fixable in minutes. Here are the ten most common ones, roughly in order of how often they're the culprit, with the fix for each.
1. The code is printed too small
The most common failure by far. Phone cameras need the code to fill a reasonable part of the frame to resolve the individual squares. The floor for close-range scanning is 2 x 2 cm (0.8 inches); beyond arm's length, use the 10:1 rule — the code should be at least one tenth as wide as the scanning distance. A 5 cm code viewed from 2 meters simply cannot work.
Fix: reprint larger. Our QR code size guide has a full size chart by placement, from business cards to billboards.
2. Not enough contrast
Scanners need a clear difference between dark modules and light background. Light gray on white, gold on beige, or a dark code on a dark photo background all fail. As a rule of thumb, if you squint and the code fades into its background, a camera will struggle too.
Fix: aim for strong contrast — dark code on a light background. Brand colors are fine (QR Studio Lab lets you customize colors and themes) as long as the dark color stays genuinely dark and the background genuinely light.
3. Inverted colors
A light code on a dark background looks striking, but many scanners — especially older Android camera apps — expect dark-on-light and refuse inverted codes outright.
Fix: if the design demands a dark background, place the code inside a light rectangle or badge rather than inverting it. Test on several phones before printing; inverted codes are exactly the case where "works on my iPhone" misleads.
4. The quiet zone is missing
The quiet zone is the empty margin around the code — the standard requires at least 4 modules of clear space on all four sides. Designs that crop the margin, run text right up against the code, or place it over a busy pattern rob the scanner of the boundary it uses to find the code at all.
Fix: give the code breathing room. If the background is busy, put the code on a solid light panel with generous padding.
5. Too much data packed into the code
A QR code holding a 300-character URL or a full contact card becomes a dense grid of tiny modules. At typical print sizes those modules drop below what a camera can resolve, and reliability falls off a cliff.
Fix: encode less. Shorten the URL, strip unnecessary parameters, or use a dynamic QR code — it always encodes a short redirect regardless of destination length, which keeps the pattern sparse and scannable at small sizes.
6. The logo is too big or badly placed
A center logo works because of error correction — the code carries redundancy that reconstructs covered modules. But that redundancy has hard limits: level L tolerates ~7% damage, M ~15%, Q ~25%, H ~30%. A logo covering a third of the code at level M is unrecoverable. Worse still is a logo overlapping the three large corner squares (finder patterns), which scanners need intact to locate the code.
Fix: keep the logo under roughly 20% of the code area, centered, and generate the code with error correction Q or H when a logo is present. Never cover the corners.
7. Blurry or low-resolution print
A small PNG stretched up in a layout tool arrives at the printer with soft, anti-aliased edges — and mushy module boundaries are as bad as low contrast. The same applies to codes screenshotted from a screen or passed through a photo compressor.
Fix: export at print resolution (at least 300 DPI at final size), or better, use SVG for anything larger than a flyer — vectors stay crisp at any scale. Always place the original exported file into the design, never a screenshot of it.
8. Glare, curves, and difficult surfaces
Glossy lamination under a spotlight throws reflections that white out part of the code. Codes wrapped around bottles, mugs, or cylindrical packaging get geometrically distorted. Fabric and textured surfaces break up module edges.
Fix: prefer matte finishes near strong lighting. On curved surfaces, keep the code small enough that its area is effectively flat, or move it to a flat facet. Bump error correction up a level for anything laminated or outdoor.
9. The code scans — but the link is broken
Sometimes the scan works perfectly and the destination is the problem: a page that was moved, a domain that lapsed, an http:// URL that browsers now block, or a typo that was printed 10,000 times. To the user it's identical to a scanning failure.
Fix: for a static code, the printed code can't be changed — you'll need to restore the URL or reprint. This scenario is the single strongest argument for using a dynamic QR code on anything printed in volume: the destination stays editable after printing, so a dead link is a 30-second fix instead of a reprint.
10. Distorted or over-styled design
Stretching a code to fit a layout (making it non-square), skewing it for a "perspective" effect, applying heavy filters, or replacing modules with decorative shapes can each push a code past the point of readability. QR codes tolerate styling — rounded modules, colors, gradients within contrast limits — but they are data first, decoration second.
Fix: keep the code perfectly square and unrotated in the layout. Style it with the generator's built-in options rather than editing the exported image by hand, and test after every design change.
A 60-second pre-print checklist
- Print a test at final size on plain paper.
- Scan with two different phones — one iPhone, one Android, ideally one a few years old.
- Scan from 1.5x the realistic distance and under the actual lighting.
- Follow the link all the way through: does the page load, and is it the right page on mobile?
- Check the margin: is there clear space around the code on all sides?
If all five pass, your code will survive the real world. If one fails, the ten causes above will almost always tell you why — and nine of them cost nothing but a regenerated file to fix.