Most printed QR codes that fail do so for one reason: they were sized to fit a layout rather than sized to be scanned. The good news is that the maths is simple, and there is a single ratio that answers almost every question about print size.
The 10:1 rule
A QR code should be at least one tenth as wide as the distance it will be scanned from. Scanning from 30cm away? Print at 3cm. From two metres? Print at 20cm. From across a car park at ten metres? You need a metre wide code.
This ratio comes from how phone cameras resolve the individual squares (called modules) that make up the pattern. Below a certain angular size the camera cannot distinguish one module from the next, and the scan fails regardless of how good the printing is.
Two adjustments to the rule in practice: add a margin for error, because people do not stand at the ideal distance, and round up rather than down. A code that is slightly too big costs nothing; one that is slightly too small fails silently and you never find out.
Practical size table
| Where it goes | Scan distance | Minimum size | Comfortable size |
|---|---|---|---|
| Business card | 20 to 30 cm (8 to 12 in) | 2 cm (0.8 in) | 2.5 cm (1 in) |
| Restaurant table card | 30 to 50 cm (12 to 20 in) | 3 cm (1.2 in) | 4 to 5 cm (1.6 to 2 in) |
| Product packaging | 20 to 30 cm (8 to 12 in) | 2 cm (0.8 in) | 2.5 to 3 cm (1 to 1.2 in) |
| Flyer or leaflet | 30 cm (12 in) | 2.5 cm (1 in) | 3 cm (1.2 in) |
| A4 or Letter poster on a wall | 1 m (3.3 ft) | 10 cm (4 in) | 12 cm (4.7 in) |
| Shop window | 1.5 to 2 m (5 to 6.5 ft) | 15 to 20 cm (6 to 8 in) | 25 cm (10 in) |
| Vehicle livery | 3 to 5 m (10 to 16 ft) | 30 to 50 cm (12 to 20 in) | 60 cm (24 in) |
| Billboard | 10 m+ (33 ft+) | 1 m+ (3.3 ft+) | 1.5 m+ (5 ft+) |
The absolute floor for any printed code is about 2 cm (0.8 in) per side. Below that, even close range scanning becomes unreliable on older phones.
QR code size on a business card
On a standard US business card (3.5 by 2 in), print the code at least 0.8 in (2 cm) wide, and 1 in (2.5 cm) if there is room. Keep the content short: a link to your contact page fits that size easily, while a full contact card makes a denser code that needs more space. Our guide to QR codes on business cards measures exactly what fits.
Why data length changes the answer
Two codes printed at exactly the same size can behave completely differently, because the amount of data determines how many modules are packed into that area.
A short URL might produce a 25×25 module grid. A long vCard with an address and several phone numbers might produce a 57×57 grid. Printed at the same 3cm, the second code has modules less than half the width of the first, and scans far worse.
Shorter data, bigger modules, better scans. If a code must be small, reduce what it contains rather than hoping the printer resolves it.
Practical ways to shorten data: use a short URL rather than one with tracking parameters; drop optional vCard fields; keep text codes under 100 characters.
The quiet zone, the most broken rule
Every QR code needs clear space around it, called the quiet zone. The specification calls for a margin of four modules on all sides. In plain terms: leave a white border roughly as wide as four of the small squares in the pattern.
Designers break this more than anything else, because an empty white margin looks like wasted space in a layout. It is not decoration, the scanner uses it to find where the code begins. A code cropped tight to its edge, or with text running right up against it, may not be detected at all.
Contrast, colour and finish
Contrast
Dark modules on a light background. Black on white is ideal. If you must use brand colours, keep the modules dark and the background light, never the reverse, and never a midtone on a midtone.
Inverted codes, light modules on a dark background, are readable by many modern scanners but not all. For anything printed at volume, do not risk it.
Finish
Matte beats gloss every time. Glossy lamination reflects overhead lighting straight into the camera, producing a bright patch across part of the code. This is a frequent cause of restaurant table cards that work in the afternoon and fail under evening lights.
Print method
Digital and offset printing both reproduce codes well at these sizes. Where problems appear is in low resolution processes, some embroidery, low DPI thermal receipt printers, and heavily textured stock. On textured or fabric surfaces, increase the size by 30 to 50% beyond the table above.
Error correction and why it is a tradeoff
QR codes include redundancy so they still scan when partly damaged. There are four levels, from roughly 7% recovery up to about 30%.
Higher error correction sounds strictly better, but it adds data, which adds modules, which makes each module smaller at a given print size. For clean indoor printing, standard levels give the best results. Raise it only for codes that will be exposed to wear, outdoor signage, packaging that gets scuffed, or codes with a logo placed over them.
Logos in the middle
A logo covers modules and relies on error correction to recover them. It works, within limits: keep the logo under about 15% of the code area, place it centrally, and always increase the print size when a logo is present.
For a code that must work first time in an unpredictable environment, a guest arriving at night, a customer in a dim restaurant, the plain version is measurably more reliable.
Test before the print run
Testing on screen is not testing. The two checks worth doing:
- Print one at final size on the actual stock, then scan it at the real distance, in the real lighting, with an ordinary phone, not the newest one in the office.
- Scan at an angle. People rarely hold a phone perfectly square to a poster. If it reads at 30 degrees off axis, it will survive real use.
Do this before ordering 500 copies, not after.
Checklist
- Size ≥ one tenth of scanning distance, minimum 2cm
- Quiet zone of four modules on every side
- Dark code, light background, high contrast
- Matte finish, not gloss
- Shortest possible data
- Test printed and scanned at real distance before the run
Generate your code at whatever size you need from our URL generator, WiFi generator, vCard generator or text generator, all free, all generated in your browser. The error correction documentation has the full technical detail if you need it.
Sizing for unusual surfaces
The table above assumes flat paper or card. Several common surfaces need adjustment:
- Curved surfaces: bottles, cups, tubes. Curvature distorts the pattern from the camera's viewpoint. Increase size by roughly 30%, and keep the code within the flattest available area rather than wrapping it around the curve.
- Fabric and embroidery: thread cannot resolve fine modules. Increase size substantially, keep the data extremely short, and test on the actual material before committing.
- Thermal receipt paper: low resolution and prone to fading. Keep codes above 2.5cm and keep the URL short.
- Etched or engraved surfaces: metal and wood rely on contrast from shadow rather than ink, which varies with lighting angle. Size up and test under the lighting where it will actually be used.
- Behind glass: shop windows add reflections. Increase size and consider placement away from direct light sources.
Digital displays are a different problem
A code on a screen, a TV in a lobby, a presentation slide, a phone showing a code to another phone, follows different rules. Screen brightness usually helps, but two things hurt:
- Screen refresh and camera shutter interaction can produce banding on some combinations. If a code will not scan off a screen, changing the display brightness often fixes it.
- Compression artefacts. A code embedded in a heavily compressed video or a low quality slide export loses module definition. Always export at high quality, and never let a code be resized by a slideshow to fit a placeholder.
For screens, a reasonable starting point is to make the code a substantial share of the screen height, roughly a sixth or more, for anything scanned from a few metres away, then test it at the real distance.
Two mistakes that survive all the checks
Scaling a raster image up
If you generate a code at 200 pixels and your designer scales it to fill a 20cm poster area, the result is a blurry code with soft module edges. Always generate at or above the final print resolution, for print, aim for at least 300 DPI at final size, meaning a 5cm code needs roughly 600 pixels.
Letting a layout tool "optimise" the image
Some design and web tools compress images aggressively or convert them to formats with lossy compression. A QR code is exactly the kind of high contrast, hard edged image that compression damages most visibly. Keep codes as PNG, never JPEG.
A quick checklist before printing
- Generated at 300 DPI or higher for the final print size
- Saved as PNG, never JPEG
- Quiet zone intact, nothing cropped or overlapping
- Dark modules on a light background
- Matte finish specified with the printer
- One test copy printed on the real stock and scanned at the real distance, at an angle, in the real lighting, on an older phone
That last line is the one that matters most. A single test print catches the kind of problem that is expensive to discover after a full run.
Those four codes are the same width on the page, but the grid behind them is not. Here is what we measured when generating them, and what each would mean printed at 3cm across:
| Data | Version | Grid | Module size at 3cm |
|---|---|---|---|
| 18 characters | 2 | 25 x 25 | 1.20mm |
| 85 characters | 6 | 41 x 41 | 0.73mm |
| 296 characters | 13 | 69 x 69 | 0.43mm |
| 812 characters | 23 | 109 x 109 | 0.28mm |
All four decoded correctly as digital images. The difference shows up in print: at 3cm, the 812 character code puts each module at 0.28mm, below the 0.4mm figure above, while the short one has over four times that to work with. Same printed square, very different odds of a first time scan.
Understanding versions and modules
Two terms explain most sizing behaviour, and knowing them makes the rest intuitive:
- Module: one small square in the pattern. Scanning works when the camera can resolve individual modules.
- Version: the grid size. Version 1 is 21×21 modules; each version up adds 4 modules per side, to version 40 at 177×177.
The version is chosen automatically based on how much data you encode. This is why data length and print size are the same problem viewed from two directions: at a fixed physical size, more data means a higher version, more modules, and therefore smaller modules.
A practical target: aim for modules of at least 0.4mm when printed at high quality, and 0.6mm or more for general use. Divide your intended code width by the number of modules per side to check.
Encoding modes and why they matter for size
QR codes store different character types with different efficiency, which directly affects how dense your code becomes:
| Mode | Characters | Efficiency |
|---|---|---|
| Numeric | Digits only | Most efficient, most data per module |
| Alphanumeric | Uppercase, digits, a few symbols | Efficient |
| Byte / UTF-8 | Mixed case, most URLs, accents | Less efficient |
| Kanji | Japanese characters | Specialised |
A practical consequence: a URL written entirely in uppercase can encode more efficiently than the same URL in mixed case, because uppercase fits alphanumeric mode. Domain names are case insensitive, so HTTPS://EXAMPLE.COM/MENU works identically to the lowercase version while producing a slightly simpler code. It looks unusual, but for a code that must be small, it is a free improvement.
We tested this rather than assuming it. Both codes above encode exactly the same URL. The standard version decoded correctly; the inverted version was not detected. Some scanners handle inversion and some do not, which is the whole problem, you cannot tell which one your reader is holding.
Colour, inversion and brand constraints
Designers frequently ask whether a code can match brand colours. The honest answer is "within narrow limits":
- Dark modules on a light background is the only universally safe combination.
- Coloured modules work if the colour is genuinely dark, measure contrast rather than judging by eye. Aim for a contrast ratio of at least 4:1 against the background.
- Inverted codes (light on dark) are read by many modern scanners but not all older ones. Never use them for anything printed at volume.
- Gradients reduce contrast unpredictably across the pattern and should be avoided.
- Transparent backgrounds are a common source of failure, the code ends up over a photo or a coloured panel. Always place codes on a solid light background.
Sign sizes and link length
What each sign size gives you
With a short link, 19 characters, every one of these is a 25 by 25 grid. Add the four module quiet zone on each side and you are dividing the printed width by 33:
| Sign | Code size | One module | Blur it tolerates |
|---|---|---|---|
| Business card back | 20 mm | 0.61 mm | 0.24 mm |
| Sticker | 35 mm | 1.06 mm | 0.42 mm |
| Table tent | 45 mm | 1.36 mm | 0.55 mm |
| Counter card | 60 mm | 1.82 mm | 0.73 mm |
| Wall poster | 100 mm | 3.03 mm | 1.21 mm |
| Window sign | 150 mm | 4.55 mm | 1.82 mm |
Put the first row next to something real. A quarter of a millimetre is roughly the thickness of three sheets of paper. That is the entire blur budget of a business card code, and it has to cover the printer's ink spread, the paper's absorbency and whatever focus error the phone contributes. It is no mystery why small printed codes are the ones that fail.
This is why moving the sign up one size helps so much. Going from a 35 mm sticker to a 45 mm table tent is not a 29% improvement in a vague sense. It is 0.42 mm of blur tolerance becoming 0.55 mm, in a range where a tenth of a millimetre is the difference between working and not.
How long can the link be?
Everything above assumed a short link. A longer one raises the module count, and since the printed size is fixed, every module gets smaller. Eventually they drop below the practical print floor of about 0.4 mm.
Working backwards from that floor gives a character budget for each sign:
| Sign | Code size | Link budget | Grid at the limit |
|---|---|---|---|
| Business card back | 20 mm | about 85 characters | 41 x 41 |
| Sticker | 35 mm | about 365 characters | 77 x 77 |
| Table tent | 45 mm | about 670 characters | 101 x 101 |
| Counter card | 60 mm | over 1,300 characters | 141 x 141 |
| Wall poster | 100 mm | The format runs out before the print size does | |
| Window sign | 150 mm | The format runs out before the print size does | |
The business card row is the one worth remembering. 85 characters is not much. It is a domain and a short path. Add tracking parameters, which routinely run to 60 or 80 characters on their own, and you are past it without noticing.
From the counter card upwards the printed size stops being the constraint. A QR code tops out at version 40, a 177 by 177 grid holding 2,331 bytes at error correction level M, and on a poster you hit that ceiling long before the modules get too small to print. We measured that ceiling separately when testing whether a photo fits in a vCard code.
The floor is not a cliff
We then rendered these codes and decoded them, which is where the honest caveat comes in.
Codes at exactly the limit decoded, as expected. But so did several past it. A 120 character link on a 20 mm business card, giving 0.38 mm modules, decoded fine. So did a 900 character link on a table tent at 0.37 mm. Only one case past the floor actually failed.
So what is the 0.4 mm floor for? Not the decoder. On a clean digital image the decoder copes well below it. It is a margin for the physical world: ink spreading into the paper, a camera that has not quite focused, a laminate catching the light, a phone held by someone walking past. The budgets above are where you still have room for those. Below them you are betting that nothing goes wrong.
This matches what we found measuring damage tolerance and scan limits: a software decoder reading a clean file is the best case, every time. Design for the worst one.
Common questions
What is the minimum size for a QR code?
About 2cm per side for anything printed, and that assumes close range scanning with short data. Below that, phone cameras cannot resolve the individual modules reliably.
Can a QR code be too big?
Not really, though very large codes need the scanner to stand further back to fit the whole code in frame. The failure mode at large sizes is being too close, not the size itself.
Does the colour of a QR code matter?
Yes. Dark modules on a light background is the only combination that reads reliably everywhere. We tested an inverted code, light on dark, and a standard detector failed to read it at all.