Why your QR code will not scan

Last updated: July 2026 · About 7 minutes

A QR code that works perfectly on your monitor and fails on the printed page is the most common problem in this whole business. The code is almost never the issue — the encoding either worked or it did not, and if it scans once it will scan forever. What changes is everything around it: how big it ended up, what it was printed on, and how far away the phone is.

Here are the causes in roughly the order they actually occur, with the fix for each.

1. It is too small for the distance

This causes more failures than everything else combined. The working rule is 10:1: a code scans reliably from about ten times its own width. A code 2 cm across wants the phone within about 20 cm. Put that same code on a wall poster people read from two metres away and it will never scan, no matter how many times you regenerate it.

Work backwards from the real reading distance rather than forwards from what fits the layout:

Scanned from Minimum code width
Held in the hand (20 cm)2 cm
Across a table (50 cm)5 cm
Standing at a sign (1.5 m)15 cm
Shop window (3 m)30 cm

Sizing for print covers how to get from these numbers to the right pixel dimensions.

2. The quiet zone got cropped

A QR code needs blank margin around it so the scanner can find its edges. Crop tight to the pattern and recognition falls apart, which is why codes often stop working after someone drops them into a design and trims the whitespace.

Worth knowing precisely: the codes this tool produces carry a two-module quiet zone. The QR specification recommends four. Two is enough on plain white paper and keeps the image compact, but if you are placing a code on a coloured background, a photograph, or anything busy, add white space yourself in your layout rather than relying on what is baked into the file. A white box around the code with margin equal to roughly four of its little squares is the safe version.

Never let anything overlap the code — not a border, not a caption, not a page edge.

3. Contrast is wrong, or inverted

Codes generated here are pure black on pure white, which is the maximum contrast available and never the problem at the point of generation. It becomes a problem afterwards, in two ways.

Recolouring. Designers lighten the dark modules to match a brand palette. Mid-greys on white read as ambiguous to a camera in poor light. If you must recolour, keep the dark modules genuinely dark.

Inverting. Light code on a dark background looks smart and breaks a significant share of scanners. Some handle inversion, many do not. There is no upside worth that.

4. The surface is fighting you

Print introduces failures that never appear on screen:

5. The URL is too long

Every extra character adds modules, and more modules at a fixed physical size means smaller squares for the camera to resolve. A long tracking URL with campaign parameters can easily double the module count against a short one.

This is the highest-leverage fix available and the one people reach for last. Shortening the destination does more for scannability than any setting in any generator. Redirecting through a short path on a domain you control has a second benefit: you can change where it points later, which a printed code otherwise cannot do — see static versus dynamic codes.

6. It is damaged, covered, or worn

Codes in the physical world get scuffed, folded and rained on. That is what error correction is for, and if codes are failing after weeks in service rather than on day one, the level was set too low.

Level Q tolerates about 25% damage and is the right default for anything handled. Level H tolerates about 30% and is what you need if a logo covers the centre. The error correction guide explains why H is not simply "better" — at a fixed size the denser pattern can scan worse.

7. Nothing is wrong with the code

Before regenerating anything, rule these out:

How to test properly

Screen testing proves the encoding is valid and nothing else. The only test that means anything is the real one:

Do this before the print run, not after. It is the difference between reprinting one sheet and reprinting four hundred labels.

If a code fails, change one thing at a time and rescan. Make it bigger first — size fixes more failures than every other adjustment put together.

Open the generator