Why printed QR codes fail, and how to make ones that do not

A QR code that scans perfectly on your monitor can fail completely once printed, and the failure is usually discovered after the print run. The causes are well understood and easy to avoid, but they are not obvious, and most of them come down to the physical size of a single module — one of the small squares that make up the pattern.

Size, and the rule that actually works

The practical guideline is one centimetre of code for every metre of scanning distance, then add a margin for error. A code on a table card read from thirty centimetres can be two centimetres square. A code on a poster read from three metres needs to be at least three centimetres, and four is safer. A code on a billboard read from twenty metres needs to be twenty centimetres and in practice larger, because nobody stands at the theoretical minimum distance.

Content length changes everything

The more data you encode, the more modules the code needs, and the smaller each module becomes at a fixed physical size. A thirty-character URL produces a sparse, forgiving grid. A full vCard with an address and a note can double the number of modules along each edge, which quarters the area of each one. This is why shortening the URL is the single most effective thing you can do for scan reliability. Use a short domain you control, and keep the path brief.

Contrast and the printing process

Readers need a clear distinction between light and dark modules. Black on white is ideal. Dark blue on cream still works. Mid-grey on light grey does not, and neither does any combination where the two tones are close in lightness even if they are far apart in hue — a red code on a green background of the same lightness is nearly invisible to a camera. Never invert: a light code on a dark background fails on many readers because they expect dark modules on light. Inkjet on uncoated stock spreads ink slightly, thickening modules and narrowing gaps, so a code that is marginal on screen becomes unreadable on paper.

The quiet zone is not optional

The specification requires four modules of blank space around the whole code. Readers use it to locate the pattern edges. Designers crop it constantly to make a code fit a layout, and it is one of the most common reasons a code fails in production while working in testing. If your layout cannot accommodate the margin, make the code smaller rather than cropping the space around it.

Error correction and logos

QR codes carry Reed-Solomon error correction at four levels, recovering roughly seven, fifteen, twenty-five and thirty percent of a damaged code. This is what allows a logo in the centre: the covered area is treated as damage. Two rules follow. Set correction to the highest level before adding a logo, and keep the logo under about a fifth of the code width. Also understand the trade — redundancy occupies modules, so higher correction on the same content makes the grid denser, and a long vCard at maximum correction can end up less reliable than the same content at medium. Shorten the content rather than relying on correction to rescue it.

Test the thing you are shipping

Scan the printed proof, at the real distance, in the lighting the code will live in, on more than one phone. An older Android with a fixed-focus camera is a better test than a new iPhone. A code that fails on one device will fail for a meaningful share of your audience, and finding that out before the print run is the entire point of a proof.

Guides


All tools · Guides · About · Privacy · Contact

Unpacking...