QR code best practices: 12 rules for codes that always scan
Sizing, contrast, quiet zones, error correction, and the design choices that quietly break QR codes. A practical checklist to run before any print job.
· 7 min read
Most QR code failures are not exotic. They are a code printed too small, or squeezed by artwork, or set in a brand colour with no contrast, or stretched to fit a layout. Run through this list before anything goes to print and almost all of it stops happening.
Size and spacing
- Minimum 2 x 2 cm (0.8 in) for something held in the hand. Scale up with distance — roughly one tenth of the scanning distance is a reliable rule, so a code read from 3 m wants to be about 30 cm.
- Leave a quiet zone of clear space about four modules wide on all sides. This is the single most common design mistake: text or a border pressed against the pattern stops the scanner finding the code at all.
- Never stretch or skew. Scale proportionally only — a distorted grid is unreadable no matter how good the camera.
Colour and contrast
- Dark pattern on a light background. Aim for the same contrast you would demand of body text.
- Do not invert (light pattern on dark) unless you have tested it on several phones. Many scanners cope, some do not.
- Avoid gradients and photographic backgrounds behind the pattern.
- If you must use a brand colour, use it for the pattern and keep the background white — not the other way round.
Keep the encoded text short
The more characters you encode, the denser the grid and the smaller each module at a given print size. A long URL with five campaign parameters can double the module count against a short redirect link. Encode a short link and put the parameters on the destination instead — the pattern stays coarse and forgiving.
Logos and error correction
QR codes carry redundant data, which is why a code with a logo punched through the middle still works. That headroom is finite. Keep any overlay under roughly 15 percent of the area, keep it central and away from the three corner squares, and test it — the corners are the position markers and covering one kills the code outright.
Print and material
- Use vector output (SVG or PDF) for print so edges stay crisp at any size. Reserve PNG for screens.
- Watch for ink bleed on absorbent stock like uncoated card or fabric — bleed merges adjacent modules, so print larger than the minimum.
- Avoid the reflective sweet spot of glossy laminate and the fold line of a leaflet.
- On curved surfaces like bottles and cups, keep the code small and near the flattest area available.
Tell people why they should scan
A bare code is a question mark. A short label — "Scan for the menu", "Scan to see the spec sheet" — measurably lifts scans, because scanning is a small act of trust and people want to know what they are getting. Add the destination domain in text nearby if there is room.
Test like a sceptic
- Print at final size on the final material — not a laser proof on office paper.
- Scan with both an iPhone and an Android device, using the built-in camera rather than a dedicated app.
- Try it in the lighting the code will actually live in, including dim restaurant light.
- Scan from the realistic distance and at an angle, not straight on from 20 cm.
- Have someone who has not seen it try, without instructions.
Make it fixable
The last rule covers the other eleven failing anyway. Use a dynamic code so that when the destination turns out to be wrong — and on a long enough run it will — you repoint the link instead of pulping the print run. Every other rule on this list is about the code being read. This one is about being able to change your mind.