QR Code Design That Still Scans: Contrast, Size, Logos
A QR code is not a logo. It is a picture of data, and every design decision either preserves that data or destroys it. The good news is that the rules are few, they are measurable, and you can check them with a ruler and two phones before you spend money on printing.
Everything comes back to module size
The small squares inside a QR code are called modules. A camera has to resolve each one individually. Almost every print failure is really the same failure: the modules ended up too small for the distance, the paper, or the printer.
Two numbers are worth memorising:
- The 10:1 distance rule. The code should be at least one tenth as wide as the distance it will be scanned from. Scanned at 30 cm, like a table tent, means at least 3 cm wide. Scanned from 2 m across a shop window means 20 cm.
- 0.5 mm per module for print. Below roughly 0.4 mm, ink spread and camera focus start eating modules. Count the modules across one row of your code, divide the printed width by that number, and check the result.
Module count depends on how much data you encode. A long tracking URL with campaign parameters can push a code to 41 modules per row or more. A short redirect link often lands at 25 or 29. At the same printed size, fewer modules means bigger modules, which means a more forgiving code. Shortening the destination is the cheapest scannability upgrade there is.
Contrast: darker than you think
Scanners look at brightness, not colour. Navy modules on white work beautifully. Mid-grey on cream does not, even though a designer will tell you it looks refined. Test it this way: convert your artwork to greyscale. If it does not read as near-black on near-white, redo it.
- Keep dark modules on a light background. Inverted codes, light on dark, are read by many modern phone cameras but still fail on older Android handsets and inside some in-app scanners. Do not gamble on packaging you cannot reprint.
- Avoid yellow, orange, pastel and neon modules. They are too bright to register as dark, whatever the hex code looks like on a monitor.
- No gradients, photos or watermarks behind the code. Contrast has to hold across every single module, not on average.
- Never use red modules where laser scanners are involved. Red laser light reads red ink as white. This matters mainly in warehouses and at counters, which is why codes on a shipping label should stay plain black on white.
- Watch kraft and recycled stock. Brown paper drops your contrast before you have printed anything. Use solid black ink and go one size up.
The quiet zone is part of the code
A QR code needs a blank margin of four modules on all four sides. That margin tells the scanner where the pattern ends. On a 3 cm code with 29 modules per row, each module is about 1 mm, so the quiet zone is about 4 mm of empty space, and it is not decoration.
Generators export codes with the quiet zone included. Designers then crop it off to make the code sit flush in a layout. That single habit is probably the most common design-caused failure in print.
- Keep text, rules, borders and the trim edge of the page out of that margin.
- Frames and "scan me" badges are fine, as long as the four-module gap survives inside the frame.
- The quiet zone must be the same light colour as the code background, not the page background bleeding in from a different tone.
- Never let a code cross a fold, a spine, a perforation or a seam. Folded pieces like a church bulletin need the code placed well inside one panel, not straddling the crease.
Logos in the middle
QR codes carry built-in error correction at four levels: L recovers about 7% of the code, M about 15%, Q about 25%, H about 30%. That redundancy is what lets a logo sit in the centre. It is also what a coffee stain or a scratch will use up.
Practical guidance:
- Use level Q or H whenever you add a logo, and accept that higher correction adds modules, so the code gets denser and needs to be printed slightly larger.
- Keep the logo inside a centred square no wider than 25% of the code width. That is roughly 6% of the area, comfortably inside the safety margin. Many tools will happily let you go to 30% or beyond; that code may still scan on your new phone at 15 cm in good light and fail on a counter under flickering fluorescents.
- Put the logo on a small solid light-coloured pad rather than letting it float over half-covered modules. Clean coverage recovers better than partial coverage.
- Never touch the three large corner squares. Those are the finder patterns the scanner uses to locate and orient the code. Leave them, and the space immediately around them, alone.
- Dot and rounded module styles shrink the effective area of every dark square. They usually work, but treat them as a size penalty and print one step larger.
Print sizes that actually work
- Business card: 2 to 2.5 cm, with a short destination.
- Flyer, menu, table tent: 2.5 to 3 cm, scanned at arm's length and often at a 45-degree angle.
- A4 poster on a wall: 4 to 5 cm if people can walk up to it; 15 cm if they read it from 1.5 m away.
- Shop window, scanned from the pavement: 15 to 20 cm.
- Trade show banner, scanned from 3 m: at least 30 cm.
- Thermal labels at 203 dpi: at least 2 cm, plain black, short payload. Thermal printers cannot render fine modules.
- Curved surfaces such as bottles and cups: keep the code narrow, under about 2.5 cm on a standard bottle, and orient it so its width runs along the least curved axis.
Use matte stock or matte laminate. Gloss produces glare exactly where a phone needs detail. Export vector PDF or SVG for print; if you must use raster, supply 300 dpi or better at final size and never upscale a small PNG. Skip JPEG entirely, since its compression artefacts blur module edges.
The five-minute test before you print
- Print the code at final size on the actual stock, or the closest thing you have.
- Scan with three phones, including one older Android and one with a scratched or greasy lens.
- Scan from the real distance and the real angle people will use.
- Scan in the real light: a dim restaurant, a glare-lit window, dusk.
- Scan from the printed proof, never from a screen. Screens flatter codes.
- Hand it to someone who has not seen it and watch. A short label like Scan to see the menu or Scan to give beats a bare code every time, which is why a donation code should always say what happens next. Keep that label outside the quiet zone.
What good design cannot fix
A static QR code has the destination baked into the pattern. Perfect contrast, perfect quiet zone, wrong URL, and your only option is a reprint. Static codes also cannot tell you how many people scanned them.
A dynamic code points at a short redirect link, which has two effects: the pattern is less dense and therefore more forgiving at small sizes, and you can change the destination after printing and see scan counts. The trade-off is honest and worth stating: dynamic codes only work while the plan behind them is active. If it lapses, the printed codes stop resolving. For a code with a stable destination that you will never need to change or measure, static is genuinely enough.
Make yours
Free static QR codes are on the homepage: enter a link, download vector or high-resolution files, print at the sizes above. If you need to change the destination after printing, or want scan numbers, the dynamic options are on pricing. Either way, run the five-minute test first.
Ready to make your own QR code?
Create a free QR code