Almost every QR code that fails in the field fails for one of three reasons: it was printed too small for the distance, it had no clear space around it, or nobody scanned a physical proof before the run. Size is the one people ask about, so start there.

The 10:1 rule

A QR code should be roughly one tenth of the distance it will be scanned from. Someone scanning a table card from 30 cm needs about 3 cm of code. A poster read from 3 m needs about 30 cm. A billboard scanned from 20 m needs 2 m, which is usually the moment somebody reconsiders putting a QR code on a billboard.

This is a floor, not a target. Going larger costs nothing but layout space and buys tolerance for bad lighting, older phone cameras, and people who do not hold still.

Practical starting sizes

Where it goesScan distanceMinimum size
Business card20–30 cm2 cm
Product packaging20–40 cm2–2.5 cm
Restaurant table card30–50 cm3 cm
Flyer or leaflet30 cm2.5 cm
Window sticker1 m10 cm
Estate agent yard sign2 m20 cm
Indoor poster2–3 m20–30 cm
Trade show banner3–5 m30–50 cm

The absolute floor for any printed code is about 2 cm square. Below that, ordinary print tolerances start closing the gaps between modules and the failure rate climbs quickly.

The quiet zone matters more than size

A QR code needs a clear margin around it — the quiet zone — so the camera can find its edges. The specification asks for four modules’ width, which is roughly 10% of the code’s width in practice.

Designers delete it constantly. A code butted against a coloured panel, a border, or a line of text is the single most common cause of a code that "sometimes works". Give it white space, and do not put anything decorative inside that margin.

Density: fewer characters, bigger modules

A code encoding 30 characters has visibly larger squares than one encoding 150, at the same physical size. Bigger squares survive worse printing and scan from further away.

This is the practical argument for short URLs on print. If you are encoding a campaign URL with five UTM parameters, the pattern will be dense and will need to be printed larger. A dynamic code sidesteps the whole problem by encoding a short redirect and carrying the UTM parameters on the far side of it, where they cost nothing.

Test the physical proof, not the screen. A code that scans perfectly from a monitor can fail on cardboard. Print at final size, on the actual stock, and scan it with at least three phones — including one older Android — under the lighting it will actually live in.

Print-side details that decide it

Error correction and logos

QR codes carry redundant data at one of four levels, from about 7% recoverable at level L to about 30% at level H. Higher correction means a denser pattern for the same content, so it is a trade rather than a free win.

If you are embedding a logo, you need the headroom: level H, with the logo kept under roughly 20% of the code’s area and centred, where the redundancy is best distributed. If there is no logo and the print quality is good, level M is a sensible default. There is more on this in QR code design best practices.

Once the sizing is settled, the dynamic QR code generator will give you print-ready vector output with the correction level and quiet zone already handled.