A phone camera reads a QR code by resolving a grid of dark and light modules. When modules are too small, the colors too faint, or the surface too reflective, the camera can't find clean edges. Most codes that "won't scan" are perfectly valid — just too small or too low-contrast.
The working rule: each module (little square) needs at least 1 mm. A 25×25-module code then measures 25 mm across. For distance, scale up: a table menu needs 2–3 cm, standing signs and posters 5 cm or more, and outdoor boards roughly 1 cm of extra edge length per meter of viewing distance.
📱 Handheld (10–20 cm): 2×2 cm minimum
📋 Tabletop / business card (30–50 cm): 3–4 cm
🖼️ Poster / sign (1 m+): 5 cm and up
📺 Outdoor / large screen: add ~1 cm of edge length per meter of distance
QR codes rebuild damaged data automatically — part of the pattern can be smudged, folded, or covered by a logo and still scan. The four levels trade size for resilience:
🟢 L: recovers 7%, smallest code, clean digital screens
🟡 M: recovers 15%, the default recommendation — best balance of size and reliability
🟠 Q: recovers 25%, print that might scuff or fold
🔴 H: recovers 30%, logos in the center, curved surfaces, outdoor conditions
Higher levels mean more modules and a bigger code for the same data. If the payload is long — say a full article URL — shorten the link before jumping to H.
Before anything goes live, scan the code with two different phones — an iPhone and an Android — at the real usage distance. If either fails, change the material or increase the size. For bulk print runs, order a proof first; it's the cheapest insurance you'll ever buy.