PrintSanity

Why your printed QR code doesn't scan

It worked on your screen. It worked when you tested it on your phone. Then you printed two hundred of them and nothing happens when anyone points a camera at it. Here is what went wrong, in millimetres.

A QR code fails on paper for one of four reasons, and they are not equally likely:

  1. Its quiet zone was covered — by far the most common, and the most invisible.
  2. It was printed too small for a camera to resolve the squares.
  3. It did not have enough contrast, usually because it was recoloured to match a design.
  4. It was already damaged before it reached the printer.

All four look identical to the person holding the phone: nothing happens. They need completely different fixes, which is why guessing is expensive.

1. The quiet zone was covered

A QR code is not just the pattern of squares. The specification requires a margin of blank space around it — four modules wide on every side, a module being one of the small squares. That margin is not decoration. It is how a scanner finds the code in the first place.

A phone camera does not see a page the way you do. It looks for the three square finder patterns in the corners, and it identifies them by the ratio of dark to light runs as it scans across. Press a coloured panel, a photograph, or a border right up against the edge of the code and that ratio breaks. The code is still perfectly intact and still perfectly readable in principle. The scanner simply never locates it.

FAILS artwork touching the code
WORKS four modules of clear space
What to do: leave blank space around the code equal to four of its own squares. On a 30 mm code with a short link, that is roughly 5 mm on every side. The space must be the same light colour as the code's background — a lighter shade of your brand colour is not blank.

2. It was printed too small

A camera needs to resolve each individual module, not just see the code. In practice that means roughly three and a half camera pixels per module, and that requirement is what sets the real minimum size — not how the code looks on screen.

Two thresholds matter. Below 0.40 mm per module a consumer printer cannot reliably place the squares and a phone cannot resolve them; that is a hard floor. Below 0.50 mm it will scan from close up on a good printer but has no margin left for ink spread, a cheap camera, or dim light. And independently, a code smaller than about 20 mm square is hard for a phone to lock focus on at any distance.

Module size depends on how much you encoded. A short link needs 25 modules across; a long one with tracking parameters needs 33 or more. The same printed square gets harder to scan the more you put in it. Shortening the URL is often the cheapest fix available.

How far away can it be scanned?

Estimated for a typical phone camera — 4000 px across a 66° field of view, needing 3.5 camera pixels per module. That figure is measured against printed codes rather than assumed, and is deliberately conservative; real conditions vary with light and steadiness.
Printed sizeShort link (25 modules)Longer link (33 modules)Suits
15 mm53 cm40 cmtoo small to focus on reliably
20 mm70 cm53 cmbusiness card, held in hand
25 mm88 cm67 cminvitation, postcard
30 mm106 cm80 cmflyer, letter page
40 mm141 cm107 cmsmall poster on a wall
50 mm176 cm133 cmposter read from across a room
75 mm264 cm200 cmshop window, noticeboard
100 mm352 cm267 cmbanner, large format
The rule that matters: decide how far away someone will be standing, then size the code for that. A poster on a wall is read from one to two metres, not from arm's length. A 20 mm code on a poster is technically valid and practically useless.

3. There was not enough contrast

This one is almost always a design decision. The code gets recoloured to match a palette — navy on teal, brown on cream, white on a photograph — and it still scans on a bright backlit screen, so it looks fine. Paper has no backlight, ink spreads slightly into the fibres, and the gap between light and dark narrows further.

The measure used in print verification is symbol contrast: the difference between the reflectance of the light areas and the dark ones. Note difference, not ratio — a code printed in two dark colours can look like a strong contrast ratio while having almost no actual separation.

ISO/IEC 15415 symbol contrast grades.
GradeSymbol contrastIn practice
A70% and aboveblack on white, no concerns
B55 – 70%a dark colour on white, fine
C40 – 55%works on clean paper, no margin
D20 – 40%unreliable once printed
Fbelow 20%will not scan

Two other contrast traps. Inverting the code — light squares on a dark background — is legal in the specification but many scanners handle it poorly, so avoid it on anything that matters. And placing a code over a photograph fails even when the average contrast looks acceptable, because the background varies underneath the modules.

4. It was damaged before it was printed

QR codes carry error correction, so a code can lose some modules and still decode. That resilience hides damage until it runs out. A code that was screenshotted, resized to an odd dimension, saved as a low-quality JPEG, or exported from a slide deck may arrive at the printer having already spent most of its error correction — and then ink spread uses the rest.

If a code decodes but reports little unused error correction, it is not healthy, it is surviving. Always place the original code file rather than a copy of a copy, and never re-save a QR code as a JPEG — the compression puts soft halos on exactly the sharp edges the scanner depends on. Use PNG or vector.

And one that is not about scanning at all

Check where the code actually goes. AI image tools generate QR codes that encode placeholder addresses — example.com and its relatives — and the code scans perfectly while leading nowhere. Scan the finished file yourself and read the address it opens, every time, before it goes to print.

Check your own file

PrintSanity decodes the codes in your artwork, measures them in millimetres against the size you intend to print, then prints them in simulation at plain-paper quality and scans them back to see whether they survive. It will tell you which of the four problems you have, and repair the code for you if it can.

Check a file