Print QR codes fail for a small, repeatable set of reasons, and almost none of them are about the code being "wrong". They fail because of physical decisions made after the code was generated. How big it was printed relative to how far away someone stands, how much blank space surrounds it, and how much contrast survives once it hits paper or laminate.
The rule that decides size: distance over ten
The most useful number in this entire topic is one most guides skip. A widely used rule of thumb from the QR code specification community is that a code's minimum size should be roughly one tenth of the distance it will be scanned from. A code meant to be scanned from about ten inches away should be at least one inch square. One meant to be read from across a shop floor, six feet away, needs to be roughly seven inches square. Undersized codes are the single most common reason a "qr code not scanning" complaint turns out to be a design problem, not a technical one. If you have not decided what the code should even point to yet, start with what a QR code is before worrying about how big to print it.
| Typical scan distance | Minimum code size | Common placement | Recommended file format |
|---|---|---|---|
| 4 to 6 inches | 0.4 to 0.6 inches | Business card, product label | Vector (SVG/EPS) or 600+ DPI PNG |
| 10 to 12 inches | 1 to 1.2 inches | Flyer, table tent, receipt | Vector or 300+ DPI PNG |
| 2 to 3 feet | 2.5 to 3.5 inches | Poster, window sticker, menu board | Vector strongly recommended |
| 6 to 10 feet | 7 to 12 inches | Storefront sign, trade show banner | Vector required |
| 20+ feet | 2+ feet | Billboard, building wrap | Vector required |
Resolution matters more than most designers assume
A QR code that looks crisp on a laptop screen at 300 pixels wide can turn into a blurry, unscannable mess printed at poster size, because print resolution and screen resolution are not the same measurement. For anything printed larger than a business card, use a vector file, SVG or EPS, so the code scales without losing a single sharp edge. If a vector export is not available, aim for at least 300 DPI at the final printed size, calculated from the physical dimensions, not the pixel count you happened to export at. A 600 by 600 pixel PNG printed at four inches is roughly 150 DPI, well under what a phone camera needs to resolve individual modules cleanly at a normal reading distance.
The quiet zone: the margin nobody remembers to leave
Every QR code needs a blank border around the pattern, called the quiet zone, so a scanner's software can distinguish the edge of the code from whatever is printed next to it. The standard guidance is a margin at least four modules wide, roughly the width of four of the small squares that make up the pattern itself. Crop a code tight against a logo, a border, or the edge of a card, and you can break a scan even though every individual module printed perfectly. This is one of the most common causes of a code that scans fine on a screen proof but fails once it comes off the press with a tighter trim.
Contrast beats color, every time
A QR code does not need to be black on white to scan, but it does need a strong luminance contrast between the code and its background, meaning a real difference in lightness, not just a difference in hue. A dark brand color on a slightly lighter but still dark background can look fine to a designer's eye and fail for a camera trying to distinguish modules in low light. Black on white or a single dark color on a clean light background remains the safest choice for anything going to print at scale. Test any branded color combination under the actual lighting the code will live in, not just under studio lighting on a screen.
Surfaces and finishes that cause real problems
Glossy laminate and reflective finishes are a common, underrated cause of scan failures, because glare from overhead lighting can wash out enough of the pattern that a camera cannot lock onto it from certain angles. A matte finish scans more reliably under variable lighting. Curved surfaces, a cup, a bottle, a rounded sign edge, distort the code's geometry enough that scanners built to expect a flat plane can fail entirely, so test on the actual curved object, not a flat proof, before committing to a full production run. If the print run is large enough that a bad batch would be expensive to redo, this is also the point to double check whether the code should be dynamic or static, since a dynamic code at least lets you fix a broken destination without reprinting.
Error correction and logos: how much you can cover before it breaks
The QR standard builds in four levels of error correction, meaning the code can still decode correctly even if part of it is damaged, dirty, or covered. Roughly, level L tolerates about 7 percent obstruction, M about 15 percent, Q about 25 percent, and H about 30 percent. This is exactly what makes it possible to place a small logo in the center of a code without breaking it, as long as you generate the code at the H level and keep the logo well under that 30 percent ceiling. Skip this step. Even a small centered logo at a lower error correction level can turn a perfectly good code into one that fails intermittently, scanning for some phones and not others depending on lighting and camera quality.
How to apply all of this, step by step
These steps assume the code already points at something worth printing at scale, so if you have not built the destination yet, see how to make a QR code that tracks scans first and come back here before you send the file to print.
Decide the scan distance up front
Before sizing anything, decide realistically how far away someone will stand when they scan the code. A business card is a few inches. A poster on a wall is a few feet. Get this wrong and every other decision downstream is sized for the wrong scenario.
Size the code using the distance-over-ten rule
Divide the expected scan distance by ten and use that as the minimum side length for the code. Round up, not down, if you are unsure. An oversized code costs nothing. An undersized one fails.
Keep the quiet zone clear
Leave a blank margin of at least four modules around every edge of the code, and do not let a logo, border, or trim line encroach on that space, even if it looks tight but technically clear on screen.
Use vector files for anything above business-card size
Export or request an SVG or EPS file for any print run larger than a business card or product label, so the code scales cleanly to the final size without pixelating.
Test contrast and color under real lighting
Print a proof of any branded color combination and view it under the lighting it will actually live under, not just on a screen, before approving a full print run.
Choose an error correction level if you are adding a logo
Generate the code at error correction level H if a logo or brand mark will sit on top of it, and keep that logo comfortably under 30 percent of the code's total area.
Print a physical proof and test-scan it before the full run
Test with an ordinary phone camera on the actual paper stock, at the actual size, before printing hundreds or thousands of copies. This is the single cheapest step in the entire process and the one most often skipped under deadline pressure.
Re-test after lamination or on the final substrate
Lamination, foil stamping, or printing directly onto a curved or reflective surface can change how a code scans compared to the flat paper proof, so run the same test again on the finished material, not just the draft.
Why a code not scanning is almost never a "bad code" problem
It is worth being direct about this because it saves a lot of wasted troubleshooting. A QR code generated correctly by any standard tool will decode reliably in a lab test. Real-world scan failures are overwhelmingly a print or placement problem. Too small for the distance, not enough quiet zone, low contrast, glare, or a curved surface. Before assuming the generator or the platform behind the code is broken, check the physical factors above first, since they explain the large majority of "why isn't this scanning" complaints that reach a print or marketing team. It also helps to be clear on what a scan even is before you go troubleshooting one: see what a QR code scan actually counts as if the number you are chasing is a scan count rather than a decode failure.
Common print mistakes worth checking before you send the file
- Sizing the code for the paper it will sit on rather than the distance people will actually stand at when they scan it.
- Cropping a border, ribbon, or decorative frame right up against the code's edge, eating into the quiet zone.
- Choosing a brand color pairing that looks fine on a monitor but has almost no lightness contrast in print.
- Adding a logo without regenerating the code at a higher error correction level first.
- Skipping a physical test scan and only checking the code on a screen proof before a large print run ships.