SteadQR

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.

Published 17 September 2026 · 7 min read · by SteadQR

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.

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

How to test before the print run

  1. Print one copy on an office printer at the exact final size. Not a scaled preview, not a screen: paper.
  2. 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.
  3. 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.
  4. 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:

  1. 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.
  2. Drop the tracking parameters. Get the analytics from a redirect instead of the URL.
  3. Use error-correction M rather than H, unless there is a logo.
  4. 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 generator

All guides · Free QR code generator · Dynamic codes waitlist