Why a code fails to scan
Almost always one of three things, and all three are avoidable.
The quiet zone was cropped. The white margin around a QR symbol is part of the specification, not decoration — it is how a scanner finds where the code begins. Designers remove it constantly, because it looks like wasted space, and it is the single most common cause of a code that will not read.
It was printed too small. A rough guide is a tenth of the scanning distance: a code read from two metres wants to be about twenty centimetres across. Add margin for a curved surface, poor light or a busy background.
The colours were inverted. Scanners expect dark modules on a light ground. A light code on a dark background fails on many readers even though it looks entirely correct to you.
The [msm_tool slug="qr-code-generator"] includes the quiet zone and uses an opaque white background for exactly these reasons.
Shorter content makes a better code
The symbol size is chosen from how much you encode. More content needs a denser grid, and a denser grid needs a larger print and a steadier hand.
A short link scans from further away, at worse angles, in worse light. If you are encoding a URL with tracking parameters, consider whether a shorter link would do — the difference between a 40-character and a 120-character URL is visible in the density of the result.
Error correction, and the logo question
The code is generated at medium error correction, which means roughly fifteen percent of it can be damaged, obscured or badly printed and it will still scan. That redundancy exists for smudges, folds and print defects.
It is also what lets you put a logo in the middle. Keep it under about fifteen percent of the area, keep it central where the redundancy is most forgiving, and test the result on more than one phone. Different scanners have different tolerances, and a code that works on yours is not a code that works.
Spending the error correction budget on a logo also means there is none left for a smudge, which matters more in print than on screen.
Print size, properly
The tenth-of-the-distance rule is a starting point. Adjust upward for:
- Curved surfaces — bottles, cups, cylinders.
- Low light — restaurant tables, event venues.
- Movement — anything on a vehicle or a screen someone walks past.
- Older phones, which have worse cameras and less patience.
And always print a test at actual size before committing to a run. A code that scans on a monitor may not scan on matte paper at 60% of the size you designed it.
Transparency is a trap
The background is opaque white deliberately. A transparent PNG looks flexible and becomes unreadable the moment it lands on a dark or patterned surface, because the dark modules no longer have a light ground behind them.
If you need the code on a coloured background, put a white or very light panel behind it rather than making the code itself transparent.
The code does not expire
It encodes the content directly, so a QR code pointing at a URL works for as long as that URL does. Nothing phones home and nothing needs renewing.
The caveat is shortener links. Encoding a shortened URL means the code depends on that service continuing to exist and continuing to resolve your link, which is a dependency worth thinking about for anything printed on physical objects with a long life. Printed on a menu, it matters little; etched on a product, it matters a great deal.
What to check before printing a thousand of them
- Scan it from the actual distance, at actual size, in the actual light.
- Scan it with at least two different phones, ideally one older.
- Confirm the quiet zone survived whatever layout tool you placed it in.
- Check the destination URL works — and that it works on mobile, since that is the only place it will be opened.