Skip to main content
QrZeo

Why QR Codes Fail to Scan (And How to Avoid It)

Almost every unscannable code fails for one of five reasons, and all five are decided before it goes to print.

QrZeo TeamApril 8, 20262 min read

It was printed too small

The usual rule of thumb is that a code should be at least a tenth of the intended scanning distance. Arm's length is roughly 2 cm; a code read from across a room needs to be dramatically larger, and one on a billboard larger still.

A denser pattern needs more physical space per module, so a long URL and a small print area are a bad combination. This is one of the practical arguments for dynamic codes: a short link encodes in fewer modules and therefore survives smaller printing.

The contrast was inverted or too weak

Scanners expect dark modules on a light background. Inverting that — light code on a dark panel — defeats many phone cameras outright, and the ones that manage it take noticeably longer.

Weak contrast fails the same way more gradually: a mid-grey on a light grey may scan under good light and fail under bad. If your brand colour is very light, put it on the frame or the surrounding design rather than the modules themselves.

The quiet zone was cropped

The light margin around a code is part of the code. It is how a scanner works out where the pattern begins. Designers crop it constantly, because it looks like empty space that could be tightened up.

Keep a clear margin on all four sides and never place text, a border or another graphic inside it. QrZeo's exports include the quiet zone; the risk is it being trimmed later in a layout tool.

The surface fights the scanner

Gloss and lamination produce reflections that wash out part of the pattern under direct light. Curved surfaces — bottles, tubes, cans — distort the geometry the decoder relies on. Fabric and textured stock blur module edges.

None of these are fatal, but all of them argue for a higher error-correction level and a larger print size than a flat matte page would need.

The code scanned fine and the destination was broken

This is the failure people misdiagnose most often. The code worked perfectly; the page behind it moved, expired, or was never mobile-friendly in the first place.

It is also the only failure on this list you can fix after printing, and only if the code is dynamic. Test the destination on an actual phone, over mobile data rather than office Wi-Fi, before the print run — and keep it dynamic so a broken link is an edit rather than a reprint.

QrZeo Team
Written by the team building QrZeo
FAQ

Questions from this article

Should I test with more than one phone?
Yes. Camera quality and decoder behaviour vary enough between an old Android and a current iPhone to matter. Test at the real distance, in the real lighting, on the real material.
Does the module shape affect reliability?
Marginally. Square maximises the contrast area of each module; rounded and dots are comfortably within tolerance at normal sizes but give up a little margin in hard conditions.

Make your first QR code in under a minute

Free plan, no credit card. Unlimited static codes forever, and three dynamic ones so you can watch re-pointing work before you pay for it.

24 content types · Static & dynamic · PNG & SVG · Free forever plan