Why your QR code scans on screen but not on paper
The code did not change. The light did, and so did the contrast and the size. What paper takes away from a code that worked on a monitor.
- qr-codes
- printing
You are standing in front of a printed proof with a phone that will not do the thing it did an hour ago. On the screen the code scanned instantly, every time, from any angle. On the paper in your hand it does nothing at all, and the design has not changed by a pixel.
Nothing has gone wrong with the code. What has changed is everything around it, and one difference underneath the rest explains most of the others. We make Tessera, so we sell one of the things this article is about, and what follows is mostly the list of ways we have watched our own codes fail on paper.
A monitor makes light and paper borrows it
That is the whole article in one line. A screen emits its own light, so a white square really is bright and a dark square really is dark, in a shop, in a basement, at midnight. Paper has no light of its own and can only return what the room gives it.
So a printed code is at the mercy of where it ends up. Under a market awning, in the corner of a pub, behind glass with a window in it, that same design has a fraction of the contrast it had on your monitor. A phone flattens what it sees to light and dark before reading anything, and that decision gets harder as the light gets worse.
Everything below is a version of this. The screen was a generous reader and the paper is a fussy one.
The contrast that passed on screen
Pale grey on white looks tasteful on a monitor because the monitor is doing the work. Printed, the same pair becomes two shades of nearly the same thing, and the phone has to guess which squares are which.
Ink makes it worse rather than better. A light colour spreads slightly into the paper and dries lighter than it looked in the file, so the gap you designed is smaller by the time it is dry. Cheap stock drinks more ink than good stock, and a code that survived a laser proof can fail on the actual run.
The safe version is dull and worth it. Very dark squares on a very light background, with nothing between them, is the only combination that behaves the same on every surface. Our own generator refuses colour pairs it believes will not scan rather than drawing them and letting you find out on the paper, which is a small unkindness that saves a large one.
The size that was fine at arm's length
On a screen you scan from wherever you happen to be sitting, and you can lean in without thinking about it. On a poster the reader is standing where the room puts them, and they will not walk closer to try again.
The size a code needs comes from the distance somebody reads it at, not from the space the layout had spare. A code holding a long address has more squares in the same area, so each square is smaller, and a smaller square is the first thing to disappear when the printing is imperfect. Shortening what the code says makes the squares bigger without making the code bigger.
There is also a margin, and it is not decoration. The format's inventor specifies four modules of clear space on all sides, which is roughly the width of four of the small squares. Designers crop it constantly because it looks like wasted room, and a code with its margin trimmed can stop working outright.
The surface you did not think about
Gloss and lamination throw the room back at the camera. A code that reads perfectly on matte stock can be unusable on the varnished version of the same job, and the failure moves as the reader moves, which makes it look intermittent rather than broken.
Curves bend the grid. A code around a bottle or a cup is being read as an oval, and while a reader can correct for a little of that, it is spending its tolerance on geometry rather than on damage. Fabric moves, corrugated card ripples, and both do the same thing more rudely.
Then there is what happens after the proof. Folding, varnishing, shrink wrap and a sticker applied by hand over the corner all arrive between the version you approved and the version a customer holds. The proof told you about the ink and nothing about the finishing.
What to change, cheapest first
Try the light first, because it costs nothing. Take the proof to where the code will actually live and read it there rather than at your desk, and read it with somebody else's phone as well as your own.
Then push the contrast to the dull safe version, then shorten what the code says, then make it physically bigger. That order matters because the first two are free and the last one costs layout. A code carrying a short address at high contrast is nearly unbreakable, and most failures are a design that gave away one of those two for a reason nobody remembers.
Raising the error correction level is the lever people reach for first, and it is the one to reach for last. The format offers four levels, recovering from roughly seven percent up to thirty of a damaged symbol, but that redundancy has to be stored somewhere. A higher level packs more squares into the same area, so it buys tolerance for scuffing while making every square smaller. On a poster that is often a bad trade.
If it still fails only sometimes, suspect the surface rather than the code. An intermittent scan that depends on where you stand is almost always a reflection, and no redesign fixes a laminated poster under a spotlight. The wider guide to editable codes covers the choices made before any of this, which is where a shorter address usually comes from.
A checklist before the print run
- Read the proof where the code will live, in that light, not at your desk.
- Use a phone that is not yours, and preferably one a few years old.
- Check the pale border is still there and has not been cropped to fit.
- Shorten what the code says before making the code bigger.
- Test after the finishing, not only before it, because lamination and folding happen last.
A code on a screen is being read under laboratory conditions by a device you chose, at a distance you chose, in light you controlled. Everything that goes wrong on paper is the same code meeting the world instead, and the world is where you were always going to put it.