Checklist
Why a Printed QR Code Fails: Size, Contrast and Testing
The QR standard is rarely the root problem. More often, the code was resized after export, crowded by artwork, printed on glare or never tested with the final destination.
Work out which half of the problem you have
Before diagnosing anything, separate two failures that look identical to the person holding the phone but have nothing else in common.
Either the camera cannot read the pattern, or it reads it perfectly and the destination fails. If the phone shows a link preview, a URL or any response at all, the code is fine and your problem is the destination — skip to the last section. If nothing happens at all, it is the code, and the sections in between apply.
This takes five seconds and saves people from redesigning artwork that was never broken.
It is printed too small for the distance
The most common cause, and the most predictable. The working rule is that a code should be roughly a tenth of the distance it is read from: about 3 cm for a table card at arm’s length, about 20 cm for a window read from two metres, and considerably more for anything read from across a room or from a passing car.
The rule assumes an ordinary code in decent light. Three things make it optimistic: a long destination URL, which packs more modules into the same square and shrinks each one; a poor or old phone camera; and low light, which pushes the camera to a slower exposure and blurs the module edges.
When in doubt, print it larger. Nobody has ever failed to scan a code because it was too big.
The contrast is too weak, or inverted
A scanner reads the difference between light and dark modules. Anything that narrows that difference narrows the margin for everything else going slightly wrong.
The usual culprits: a mid-tone brand colour that looked convincingly dark on a backlit screen and printed much lighter; a photographic or textured background running underneath the pattern; transparency that picked up whatever was behind it; or an inverted code, light modules on a dark ground, which some scanners read and some do not.
The greyscale test settles it without any tooling. Convert the artwork to greyscale and look: if the pattern is still obviously dark-on-light, the contrast is genuine. If it turns muddy, it will scan in the studio and fail in the room.
The quiet zone has been cropped
The code needs four modules of clear margin on every side. That margin is how a scanner works out where the code ends, and it is destroyed more often than any other part of the design because it looks exactly like empty space a layout could reclaim.
Look for text set flush against the code, a decorative border drawn around it, a background image continuing underneath, the code sitting on a fold or a package seam, or artwork trimmed tight to the code’s edge.
If the layout is short of space, shrink the code and keep the margin. A smaller code with its quiet zone intact reads; a larger one without it often does not.
The file was the wrong one
A code can be destroyed between export and press without anyone touching the design.
The classic case is a small PNG scaled up for print, which turns crisp module boundaries into soft grey gradients that read as ambiguous. Others: a code taken from a screenshot, a JPEG whose compression left artefacts around every high-contrast edge, or artwork stretched non-proportionally so the modules are no longer square.
Use SVG or PDF for anything printed, PNG exported generously large for screens, and check that whatever reached the printer is what left the design tool.
The material or the surface is fighting you
A code that scans perfectly on office paper can fail on the actual product.
Gloss and lamination create reflections that wash out the pattern under overhead lighting — the specific reason so many laminated table tents fail in the evening and work fine at noon. Uncoated and textured stock lets ink spread slightly, blurring small modules. Curved surfaces such as bottles and tubes distort the grid, and fabric or flexible packaging distorts it unpredictably.
For anything curved, textured or glossy, print the code larger than the distance rule suggests and test on the real substrate rather than a paper proof.
The code reads and the destination fails
If the phone recognises the code but the visitor gets nowhere, the pattern is not the problem. Check the destination itself.
The usual causes: a page that was moved or deleted after the artwork went to press, a link that requires a login the visitor does not have, a file share that expired, a page that works on the office network but is not publicly reachable, a redirect loop, or a destination that is simply too slow to load on mobile data.
Test it the way a stranger would — a private browsing window, mobile data rather than Wi-Fi, and a phone that has never opened the page before. Your own browser is the worst possible test, because it is logged in and has everything cached.
Run this before it goes to print
Nearly every failure above is caught by ten minutes of checking on a proof.
- Scan a printed proof at final size, on the final material — never test only on screen.
- Test on at least one iPhone and one Android, including an older phone if you can find one.
- Test in the real lighting, including evening and artificial light.
- Scan from the distance a real person will stand at, and at a slight angle.
- Convert the artwork to greyscale and confirm the pattern still reads dark-on-light.
- Confirm the quiet zone survived the final layout.
- Open the destination in a private window on mobile data, on a phone that has never seen it.
- Hand the proof to somebody who was not involved and watch them try.
FAQ
Frequently asked questions
Why does my QR code not scan?
First check whether the phone recognises the code at all. If it shows a link or any response, the pattern is fine and the destination is broken. If nothing happens, it is the code — and in practice it is nearly always one of five things: printed too small for the distance, contrast too weak or inverted, the quiet zone cropped by the layout, a low-resolution or stretched file, or glare from a glossy surface.
How big should a QR code be?
Roughly a tenth of the distance it is read from — about 3 cm for a table card at arm’s length, about 20 cm for a window read from two metres. Print larger than the rule suggests if the destination URL is long, if the surface is glossy or curved, or if the lighting is poor, since all three reduce the effective margin.
Why does the code work on my phone but not on my customer’s?
Because it is marginal rather than reliable. Your phone likely has a better camera, better light, and a cached result from earlier testing. A code sitting at the edge of readable will work on strong cameras and fail on weaker ones, so treat a single failure as a real defect: print larger, raise the contrast, or restore the quiet zone.
Can I put a QR code on a bottle or curved packaging?
Yes, with allowances. A curve distorts the module grid, so print the code larger than the distance rule suggests, keep it away from the sharpest part of the curve, and use a generous quiet zone. Test on the actual container rather than a flat proof — a code that reads perfectly on paper can fail once it is wrapped around glass.
The camera reads it but nothing loads. What is wrong?
The code is fine and the destination is not. Common causes are a page moved or deleted after printing, a link needing a login, an expired file share, a destination reachable only on your internal network, or a page too slow on mobile data. Test in a private browsing window, on mobile data, on a phone that has never opened the page.
NEXT STEP