Design

QR code best practices

By Sam Moreton · updated 30 June 2026

Most QR codes that fail don’t fail because of bad luck — they fail for one of a handful of avoidable reasons: printed too small, no quiet zone, weak contrast, a logo that ate too much of the code, or a link that was never tested. This guide is the short version of everything that makes a QR code work, in the order it matters. Each section links to a deeper guide if you want the full detail — treat this as the checklist you run through before any code goes out.

9 min read · Updated 30 June 2026

The short version: a pre-flight checklist

If you only read one section, read this one. Run every code past these points before you print or publish it — the rest of the guide explains each in turn.

  • Size it to the scan distance — at least 2 × 2 cm in hand, bigger the further away the reader stands (the 10:1 rule).
  • Keep the quiet zone — a clear margin of at least four modules on all sides; don’t crop it.
  • Use strong contrast — a dark code on a light background, never the other way round.
  • Match the error correction to the job — raise it if you’re adding a centre logo.
  • Export the right format — SVG or PDF for print, PNG for screens.
  • Use a dynamic code for anything printed that might ever change, so you can edit it without reprinting.
  • Add a short ‘Scan to…’ caption so people know what the code does.
  • Test it on several phones before the print run — and check the destination works on mobile.

Size and the 10:1 rule

The single most common reason a code won’t scan is that it’s too small for the distance people scan it from. The rule of thumb is 10:1: the scan distance should be no more than ten times the width of the code. So a code scanned from 1 metre away wants to be at least 10 cm wide; one scanned from across a room needs to be far larger.

As a floor, keep any printed code at least 2 × 2 cm — about the size people will hold a phone to. Below that, the modules get too fine for a phone camera to resolve cleanly.

PlacementTypical scan distanceMinimum code size
Business card / flyerIn hand (~20–30 cm)~2 × 2 cm
Poster / menu~1–2 m~10–20 cm
Shop window / signageA few metres~25 cm+
Billboard / bannerMany metresScale to 10:1 of the distance

These are starting points, not guarantees — a long URL makes the code denser and pushes the minimum up. Our guide to QR code size for print works through the maths and the awkward cases.

Quiet zone and contrast

A QR code needs empty space around it to be found. That margin is the quiet zone, and the standard calls for at least four modules (four ‘squares’) of clear space on every side. Crop it too tight — or run text and graphics right up to the edge — and scanners struggle to locate the code at all. When in doubt, give it more room, not less.

Contrast is the other half. A scanner reads a QR code as dark-on-light, so use a dark code on a light background and keep plenty of contrast between them — think roughly 4:1 or better, the same kind of contrast you’d want for readable text. The classic mistakes are inverting it (light code on dark), placing the code over a photo or busy pattern, or picking two colours that look different to the eye but read as similar tones to a camera.

Colour is where good codes go wrong

Pale or low-contrast colours, gradients and ‘brand-coloured’ backgrounds are the usual culprits behind a code that scans on one phone and not another. If you want colour, keep the code clearly darker than its background and test hard. See do QR code colours affect scanning.

Error correction (and logos)

Every QR code carries spare data that lets a scanner rebuild it when part is damaged or covered. You choose how much, across four levels: L (~7%), M (~15%), Q (~25%) and H (~30%). For most clean print, M is the sensible default. Step up to Q or H for packaging, outdoor use, rough surfaces — or any code with a logo in the middle.

A centred logo works precisely because of error correction: it covers some modules, and the code rebuilds them. A logo typically hides 20–30% of the code, which is why a branded code should use H to stay inside that recovery budget. Higher correction makes the code denser, though, so print it a touch larger. The full detail is in our error correction guide, and the recipe for a code that still scans with your logo is in the QR code with a logo guide.

File format: print vs screen

Use the right file for where the code will live. For anything printed, export a vector format — SVG or PDF — so the code stays razor-sharp at any size, from a business card to a billboard. For screens, apps and web pages, a high-resolution PNG is fine. Avoid JPG: its compression adds fuzzy artefacts around the edges of the modules that can trip up scanners.

Our guide to PNG, SVG and PDF covers which to pick for each job and how to hand a vector file to a printer.

Static vs dynamic: choose before you print

A static code encodes your link directly — it never expires and needs no account, but the destination is fixed forever. A dynamic code points at a short redirect you control, so you can change where it goes after it’s printed, and see how many times it’s been scanned.

The rule of thumb: if a code is going on something you can edit for free in a second — a web page, a slide, an email — a static code is perfectly fine. But for anything printed that might ever change — packaging, signage, menus, business cards, a flyer for an event — use a dynamic code. Fixing a typo or repointing a campaign then costs nothing instead of a reprint.

StaticDynamic
Editable after printingNoYes
Scan trackingNoYes
ExpiresNeverStays live while the link is active
Best forWeb, screens, throwaway codesAnything printed or long-lived

OpenQR’s dynamic codes are free to create. Dig into the trade-offs in static vs dynamic QR codes, the practical detail in our dynamic QR codes guide, and how editing actually works in how to edit a QR code.

Tell people what to do: add a call to action

A bare code on its own asks people to scan on faith. A short caption beside it — “Scan to see the menu”, “Scan for tickets”, “Scan to pay” — tells them what they’ll get and gives them a reason to lift their phone. It costs nothing and removes the hesitation. Keep it to a few words, place it right next to the code, and don’t let the text crowd into the quiet zone.

Name the reward, not the action

“Scan to download the guide” beats “Scan this QR code”. People don’t scan codes for fun — they scan to get something. Say what that something is.

Always test before you print

This is the step people skip and regret. Before a code goes to print or out the door, scan the final artwork — at the actual size — with several different phones, ideally a mix of iPhone and Android, using the plain built-in camera. Then check the obvious follow-through: the link opens, and the page it lands on works well on a phone.

Test the file you’re actually shipping

Scan the exported SVG/PDF/PNG at final size, not the live preview on your screen. Resizing, compression or a printer’s colour shift can all break a code that looked fine in the editor.

If a code refuses to scan, work through the usual culprits in how to test a QR code and why is my QR code not scanning.

Placement and lighting

Where a code physically sits decides whether anyone can scan it. Put it at a sensible height — roughly eye level for signage, easy to reach on packaging — and somewhere a person can comfortably hold a phone steady. Avoid printing on curved or crinkled surfaces where the code distorts.

  • Prefer matt over gloss. Glossy laminates and shiny screens throw glare that blinds the camera. A matt finish scans far more reliably.
  • Light it. A code in a dim corner is hard to read. Make sure the spot is reasonably lit.
  • On a screen, leave it up long enough. If you’re showing a code in a video or slideshow, hold it on screen for several seconds and keep it large and still — don’t flash it past.

Accessibility: don’t rely on the code alone

A QR code is a convenience, not the only way in. Some people can’t or won’t scan — an older phone, a flat battery, a camera that won’t focus, or simply someone who finds it fiddly. Always pair the code with a short, human-readable URL next to it (something like openqr.uk/menu) so anyone can type it in instead. A dynamic code makes this easy, because the printed short link can stay the same even when the destination changes.

If you’re new to the format, our explainer on what a QR code is covers the basics.

Make one that follows all of this — free

OpenQR builds these defaults in: a proper quiet zone, sensible contrast, automatic level-H error correction when you add a logo, and clean PNG, SVG and PDF exports — with no watermark and no sign-up. Dynamic codes are free too, so you can edit the destination and track scans later. See our free, no-watermark generator guide or just start below.

Generate a QR code below, customise it, and download it free — add a logo and error correction jumps to level H automatically.

Frequently asked questions

Enough size for the scan distance (the 10:1 rule), a clear quiet zone of at least four modules, strong dark-on-light contrast, error correction matched to the job, the right export format, and — crucially — testing it on several phones before you use it.

Related reading