Minimum QR code size for print: the rule, the math, and when 2 cm is not enough
The usual answer is "two centimetres". It is right for a short link on a menu and wrong for the URL most people actually paste in. Size depends on how much is in the code and how far away the phone will be, and both are easy to work out before anything goes to the printer.
For a short link scanned from about 20 cm, print the QR code at least 2 × 2 cm (0.8 in), including its white border. For anything further away, the code should be at least one tenth of the scanning distance. For longer content, a URL with tracking parameters or a contact card, the minimum grows to 2.5 to 3.5 cm, because more characters means more, smaller squares, and each square has to stay large enough for a phone camera to resolve.
The distance rule: size = scanning distance ÷ 10
Phone cameras need a QR code to fill a reasonable part of the frame before the decoder locks on. The rule of thumb that has held up across a decade of testing is a 10:1 ratio between scanning distance and code width. Divide the distance the phone will realistically be from the code by ten, and that is the minimum width.
| Where the code lives | Typical scanning distance | Minimum width |
|---|---|---|
| Business card, menu, product label | 15–25 cm | 2 cm |
| Flyer, brochure, table tent | 25–50 cm | 3–5 cm |
| Shop window, A3 poster | 1–2 m | 10–20 cm |
| Exhibition banner, bus shelter | 2–5 m | 20–50 cm |
| Billboard, vehicle wrap | 10 m and up | 1 m and up |
The 10:1 figure assumes a modern phone, decent light and a code that is not too dense. It is a floor, not a target. Where there is space, go bigger; nobody has ever complained that a QR code scanned too easily.
Why content length changes the minimum size
A QR code is a grid of small squares called modules. The grid comes in fixed sizes, called versions: version 1 is 21 × 21 modules, version 2 is 25 × 25, and each version after that adds four modules per side, up to 177 × 177 at version 40. The generator picks the smallest version that can hold your content at the error-correction level you chose.
The camera does not care how big the whole code is. It cares whether it can tell one module from the next. In print, a module below about 0.5 mm becomes unreliable: ink spreads, the camera's sensor blurs adjacent squares together, and the decoder starts guessing. So the minimum printed size is really:
minimum width ≈ (modules per side + 8 for the quiet zone) × 0.5 mm
A 29-module code (version 3) works out to 37 × 0.5 = 18.5 mm, which is where the 2 cm rule comes from. A 49-module code (version 8) needs 57 × 0.5 = 28.5 mm. Same rule, different content, half again as wide.
Minimum size by what is in the code
Byte-mode capacities at error-correction level M, which is the sensible default without a logo. Grids are the smallest version that fits; sizes include the four-module quiet zone at 0.5 mm per module and are rounded up.
| Content | Characters | Grid | Minimum print size |
|---|---|---|---|
Short redirect link (stqr.click/k2Xm9pQ) |
~18 | 25 × 25 (v2) | 1.7 cm |
Plain home-page URL (https://cafe.example/menu) |
~30 | 29 × 29 (v3) | 1.9 cm |
| WiFi network with password | ~40 | 29 × 29 (v3) | 1.9 cm |
| Deep link to a product page | ~60 | 33 × 33 (v4) | 2.1 cm |
| URL with UTM tracking parameters | ~100 | 41 × 41 (v6) | 2.5 cm |
| Long URL with several parameters | ~150 | 49 × 49 (v8) | 2.9 cm |
| Contact card (vCard) with address | ~250 | 61 × 61 (v11) | 3.5 cm |
This is the table to look at before pasting a Google Analytics link into a generator. The tracking parameters do not just make the code uglier, they double the number of squares and push the minimum size from under 2 cm to nearly 3. A dynamic code solves both problems at once: the printed code contains a short link, and the analytics come from the redirect instead of the URL. Dynamic vs static QR codes explains the trade.
The quiet zone counts toward the size
The QR specification requires a blank border of four modules on every side, called the quiet zone. It is how the decoder finds the edge of the code. Designers routinely crop it to fit a layout, and it is the single most common reason a code that scanned on screen fails in print. The sizes above include it. If your layout has a 2 cm box for the code, the black-and-white pattern inside should be about 1.6 cm, with 2 mm of clear space all round. A busy background, a border line or a photo bleeding into that space all count as violating it.
Logos and error correction make it bigger
Error correction adds redundant modules so the code survives damage. Level L recovers about 7% of the pattern, M 15%, Q 25% and H 30%. Higher levels mean more modules for the same content: the 30-character URL that fits in 29 × 29 at M needs 33 × 33 at H. A centre logo requires H, because the logo destroys the modules under it and only H has enough redundancy left over for ordinary print wear. So a code with a logo should be printed about 15% larger than the table says, and the logo itself should cover no more than a fifth of the area. QR code with a logo covers the rules.
Printing: vector, contrast, and the material
- Print from SVG, not PNG. A PNG is a fixed grid of pixels; scale it up for a poster and every module edge turns soft, which the decoder reads as noise. An SVG is a description of squares and is sharp at any size. The free generator exports both; use SVG for anything that goes to a printer.
- Dark modules on a light background. Black on white is the reference. Dark navy on cream is fine. Yellow on white is not, and inverted codes (white on black) fail on a meaningful share of phones.
- Watch dot gain. Ink spreads on absorbent paper and on fabric, thickening the dark modules and thinning the light ones. Newsprint and uncoated card need a bigger code than glossy stock. Ask the printer, they will know.
- Avoid gloss and curves. Laminated menus reflect the phone's own torch back at it. Codes on bottles and cans wrap around the surface; keep them small enough that the whole code is visible from one angle, or put them on the label's flat face.
How to test before the print run
- Print one copy on an office printer at the exact final size. Not a scaled preview, not a screen: paper.
- Scan it with the oldest phone you can borrow, at the real distance, in the real light. A menu gets scanned in a dim restaurant; test it in a dim room.
- Scan it again with the phone at a 30° angle, and again with a thumb over one corner. If it survives both, it will survive the customer.
- If anything failed: increase the size first, then the error-correction level, then shorten the content.
The preview on a monitor is not a test. A monitor is backlit, perfectly flat, and shows the code at least twice the size it will be printed. Codes fail at 2 cm on a menu in bad light, not on a screen.
How to make the code smaller
If the layout genuinely has no room, the levers are, in order of effect:
- Shorten what is encoded. This is the big one. A short link instead of a full URL can drop three versions and 30% of the width.
- Drop the tracking parameters. Get the analytics from a redirect instead of the URL.
- Use error-correction M rather than H, unless there is a logo.
- Print sharper, so a module can go below 0.5 mm. On a good offset press with coated stock, 0.35 mm modules are achievable. On a desktop inkjet, they are not.
Get the size right before printing. The free generator exports SVG, shows the grid size, and locks error correction to H the moment a logo is added. For the smallest possible printed code, a dynamic code encodes a 7-character short link; SteadQR's, on your own domain, are in build and you can join the waitlist.
Open the free generatorAll guides · Free QR code generator · Dynamic codes waitlist