← All articles

QR Code Best Practices: How to Make Codes That Actually Scan

5 July 2026 · 7 min read

You've printed the posters, boxed up the product, or stuck the sign in the window — and then someone points their phone at your QR code, waits, frowns, and gives up. It happens constantly, and it's almost never bad luck. A QR code that won't scan usually failed for a handful of predictable, fixable reasons, all decided before it ever went to print.

The physics and design rules behind a reliable QR code are simple enough to learn in ten minutes. Here's everything that actually matters.

Size: the 10:1 rule, explained simply

The single most common mistake is printing a code too small for where it'll be scanned. People assume "if I can see it, a phone can read it" — not quite.

The rule of thumb worth memorising: scan distance shouldn't exceed roughly ten times the code's width. A 2 cm square code is good for about 20 cm — arm's length, fine for a business card or product label. A 5 cm code covers about 50 cm, comfortable for a leaflet or table talker. Want people to scan from a metre away, on signage above a doorway? Print it at 10 cm. Across a shop or station concourse, at two or three metres, you're into 20–30 cm territory.

This isn't a design preference — it's about how many pixels a phone camera has to work with. Shrink the code or add distance, and the individual squares blur into noise the sensor can't resolve.

A practical way to think about it: where will people actually be standing? Business card, held in hand — small is fine. Poster in a shop window, viewed from a pace back — you need real size. When you're not sure, go bigger than feels necessary. A slightly oversized code never hurts; an undersized one is dead on arrival.

Contrast and the quiet zone

QR codes need to be dark on light — black on white is the gold standard, and dark blue, dark green or navy on a pale background work almost as well. Light-on-dark, however tempting for a moody, on-brand look, is a real risk: phone cameras are tuned to find dark marks on a light field, and glare or uneven lighting can wash out light-coloured modules outdoors or under glass.

Just as important, and far more often ignored, is the quiet zone — the plain white border around the code, roughly four modules (about 5–10 mm on a typical print size) on each side. It looks like empty space, but it's part of the spec: it's how the camera knows "the code starts here and stops here." Crop it too tight, or drop the code straight onto a busy background or a photo, and you've made the scanner's job unnecessarily hard.

If you're printing on plain white stock, the quiet zone happens for free. If your code sits on a coloured background, packaging, or a dark surface, give it a solid white (or light) rectangle behind it first. Never invert the whole thing to make it "fit" a dark design — put a white box under it instead.

Safe customisation — and where it breaks

A plain black-and-white square doesn't have to stay boring. Some customisation is genuinely safe:

  • Colour — swap black for a dark brand colour, as long as contrast against the background stays strong.
  • Rounded corners on the "eyes" — the three big squares in the corners can be softened without breaking function.
  • A small logo in the centre — kept to roughly 10–20% of the code's area, ideally a simple, solid mark rather than fine detail.

Where people go wrong:

  • Inverting to light-on-dark throughout.
  • Gradients, transparency, or busy patterns behind or inside the code.
  • A logo that's too big, off-centre, or covers the corner markers.
  • Stretching or distorting the modules' proportions.

A good gut check: if you can't immediately tell it's a QR code, or the individual squares blur together when you squint, you've customised past the point of reliability. Keep it recognisable first, stylish second.

Error correction: your safety margin, not a fix-all

Every QR code carries built-in redundancy — extra data woven in so the code still reads correctly even if part of it is damaged, dirty, or covered by a logo. Depending on the level chosen (generators typically offer low through high), a code can tolerate a meaningful chunk of it being obscured and still scan fine.

Treat this as a margin, not a licence. It's what lets a small centred logo or a slightly scuffed poster still work — but it can't rescue a code that's too small, has poor contrast, or sits behind glare on a shiny surface. If your code will get handled a lot, printed on something textured, or exposed to weather, choose a higher error-correction level when you generate it. For a straightforward code on a clean background, the default is fine.

Add a call-to-action label

This costs nothing and changes everything: put a short line next to the code telling people what it does. "Scan for menu." "Scan for 10% off." "Scan to book." Plenty of people still don't scan QR codes on reflex — a code with no context just looks decorative, or suspicious. Two or three words of context turns a shrug into a scan.

Placement: where the code actually lives

A perfectly designed code in the wrong spot still fails.

  • Eye level or just above — not down near the floor, not lost at the top of a tall poster.
  • Reachable, given the 10:1 rule — make sure people can actually get close enough for the code's size.
  • Well lit — avoid deep shadow and harsh glare alike.
  • Flat and matte — skip curved surfaces (bottles, lampposts) and reflective ones (foil, gloss laminate, glass); both distort or glare in ways cameras struggle with.
  • Clear of clutter — give it breathing room on a busy flyer or crowded shelf edge so it stands out.

Test on real phones before you print thousands

Do this before committing to a print run, not after: scan your code on a few different phones — an iPhone, an Android, an older model if you can find one — from the actual distance and angle people will use in real life. Try it in the lighting the code will actually live in, not just under your desk lamp.

If even one phone struggles, something's off — usually size, contrast, or a customisation gone too far. Fix it and test again. Twenty minutes now is a lot cheaper than a reprint later.

Why a dynamic code is your safety net

Here's the detail that saves the most heartache: a static QR code has its destination baked permanently into the pattern. Typo in the URL, campaign ended, menu changed three months later? You're reprinting.

A dynamic QR code works differently — the printed code points to a record you control, and you can update where that record sends people at any time, without touching the physical code. Every code you make with qrius.io's free generator is dynamic by default, so that flexibility is built in from the start, and it's free to get going.

There's a second benefit worth knowing about if you're in the EU or UK: qrius.io hosts data in Stockholm, Sweden, never logs raw IP addresses, and includes a Data Processing Agreement — which matters if GDPR compliance is on your radar and sets it apart from generators that route your data elsewhere by default. You also get simple scan analytics — counts and timing — without invasive per-person tracking, so you can see whether a campaign is landing without building a surveillance profile of everyone who scanned it. For more on making sense of that data, see our guide on how to track QR code scans.

FAQ

What's the difference between a static and a dynamic QR code? A static code has its destination locked in at print time — change your mind, and you reprint. A dynamic code is a pointer to a record you control, so you can update where it leads (and see scan counts) without changing the printed code at all.

What error correction level should I use? The default your generator offers is fine for a clean, uncustomised code on a good background. Bump it up if you're adding a logo, printing on something that'll get handled or weathered, or using a less-than-ideal surface — it buys you extra tolerance for damage or obstruction.

Can I put a QR code on a curved or reflective surface? It's best avoided. Cameras need a stable, flat, glare-free image to focus on. If you must — a bottle, a can — print onto a flat label rather than directly onto the curve, size it generously, and test thoroughly before committing.

Do I need a special app to scan a QR code? No — most phones from the last several years scan QR codes directly through the native camera app. Focus your effort on making the code itself easy to read rather than worrying about your audience's software.

Will people actually scan my QR code? That depends heavily on placement, clarity, and whether you've told them what it's for. A clearly labelled, well-placed, properly sized code at a natural point of attention — a menu, a checkout counter, an event poster at eye level — gets used. One buried in a corner with no explanation, generally doesn't.


None of this requires special expertise — just a few minutes of attention before you hit print. Size it properly, keep the contrast sharp, leave the quiet zone alone, label it clearly, and test it on a real phone in the place it'll actually live. Get the fundamentals right and the rest is just styling.

Ready to make one? Try qrius.io's free QR code generator — every code is dynamic from the start, so if you do spot a mistake after printing, you can fix it in seconds rather than reprinting.

Create a GDPR-safe QR menu — free

Dynamic QR codes, EU-hosted in Stockholm, no raw IP logging, DPA included.

Start free →