When a printed QR won't scan, the code is usually fine — the conditions are not
When support tickets say a flyer's QR "works on some phones but not others", the code itself is almost always valid. Scanning splits into locating the code and recovering the data, and what breaks in the field is nearly always the first step. That is why raising the error-correction level so often changes nothing: error correction protects the second step, not the first.
This is an operational checklist for the physical conditions to verify before a print run. The same failure structure shows up in industrial optical markers, which we cover separately in today's research review: under 50% occlusion the established marker systems detected nothing at all, while a design that spreads its information across hundreds of features still read 69%. QR behaves the same way — the layer that tolerates damage and the layer that collapses outright are different layers.
The order of collapse: size, then quiet zone, then contrast, then payload
- Physical size comes first. A working rule is one tenth of the scanning distance: 2 cm for a business card or menu read at 50 cm, 30 cm for a banner read from 3 m. Judging size on a monitor is the single most common cause of failure.
- The quiet zone is second. Leave four modules of empty margin on all sides so the decoder can find the code's boundary. Placed over a photograph or crowded by a decorative border, a perfectly valid code is never detected.
- Contrast is third. Dark code on a light background. Inversion is permitted by the specification but raises failure rates on older cameras and in low light, and low-luminance-difference pairs such as red on black merge once the image is thresholded.
- Payload length is last. More characters mean denser modules at the same printed size, so dropping a long tracking URL straight into the code undoes the benefit of printing it larger.
The order matters because the fixes differ wildly in cost. Adding a centimetre is almost always cheaper and more reliable than raising the error-correction level.
Why raising error correction can backfire
QR error-correction levels (L, M, Q, H) set how much damage the payload survives — H recovers roughly 30% — but a higher level needs more modules for the same data. Keep the printed size fixed and raise the level, and each module shrinks, making detection harder. Unless you are placing a logo in the centre, M is enough for most print work, and the headroom is better spent on larger modules.
Put simply: error correction covers partial damage such as smudges, scratches and rain. A violated quiet zone, an obscured finder pattern at one of the three corners, or modules that are simply too small block detection itself, and there is no recovery from that.
Pre-release checks
- Tested on the actual print (not a monitor) at the expected scanning distance, on at least three handsets — a current iPhone, an Android three or more years old, and a budget device.
- Tested under real lighting: shop lighting, street lighting at night, and glare on coated stock.
- Four modules of margin clear on all sides, with no fold or trim line crossing the code.
- The three large corner squares (finder patterns) unobstructed by logos, stickers or punch holes.
- A short URL in the payload; long campaign links shortened before encoding.
- For banners, scaled from the original resolution rather than an enlarged small image.
If you need a tool, our free QR code generator exports at 1024 px for print inserts and 4096 px for large format. Everything you type is processed in the browser only.
When the destination has to change after printing
One problem survives every check above: the link changing after the print run. A standard QR embeds the address in the code itself, so when a campaign ends or the site structure changes, reprinting is the only option.
That is what dynamic QR is for. The code carries a short redirect address while the real destination is managed server-side, so already-distributed material keeps working while the link is swapped. As a side effect you get scan counts, regions and device mix — often the first hard numbers an offline campaign has ever produced. The trade-off is a new dependency: the redirect service has to stay alive, which is worth weighing if the printed piece has a lifespan measured in years.
The short version
- Size — at least one tenth of the scanning distance.
- Quiet zone — four modules on every side; never over a photo.
- Contrast — dark on light; avoid inversion and low-luminance pairs.
- Payload — short URLs; add tracking parameters at the redirect.
- Error correction — M unless a logo is overlaid; enlarge before you raise the level.
- Validation — real print, real distance, real lighting, three or more handsets.
References
- 69% read at half occlusion: reviewing BlobBoards marker robustness — today's research review, which measures the same failure structure
- arXiv:2608.28830 — BlobBoards: Robust Markers for Accurate Pose