# QR Code Design Best Practices That Keep It Scannable

> A scannable QR code needs strong contrast, dark modules on a light background, a clear quiet zone and an undistorted pattern. Learn the design rules, common mistakes and a pre-print checklist.

A QR code stays scannable when four things hold: strong contrast, dark modules on a light background, an undistorted pattern, and a clear margin around the code. Every design choice — colour, shape, logos, placement — has to work within those limits. Test the finished design on real phones before you print or publish, and most problems will show up early enough to fix.

## Get contrast right — and keep dark on light

A phone camera doesn't read colour the way you do. The scanner looks for a difference in brightness between the modules and the background, so what matters is luminance, not how striking the combination looks. Black on white is the benchmark. Dark navy, dark green or dark brown on white or cream work just as well.

The order matters as much as the contrast. QR codes are designed to be read as dark marks on a light background. Invert them — light modules on a dark panel — and many scanners will simply refuse to find the code, because the pattern no longer matches what the decoder expects. If you want a dark design, darken the poster around the code, not the code itself: keep it as a dark pattern on a light patch or panel.

Coloured codes are fine in principle. Just check the pair in greyscale: if the two colours turn into similar shades of grey, the camera can't separate them. Mid-tone combinations — red on black, teal on grey — are common offenders.

## Respect the quiet zone

The empty margin around a QR code is not wasted space. The specification behind the format recommends a quiet zone of four modules — four times the width of one small square — on every side. The scanner uses that blank border to work out where the pattern starts and stops.

When graphics, text or a coloured background touch the code's edge, the scanner can't tell where the code ends and the design begins, and detection becomes unreliable. Keep the margin empty, and if the code must sit on a photo or busy artwork, place it on a plain white or light panel instead.

## Keep module shapes and eye styles readable

The three large squares in the corners are finder patterns. The scanner looks for them first to locate the code and work out its orientation. You can restyle them — rounded corners are common and usually safe — as long as each eye stays solid, high-contrast and clearly a square-ish mark in its corner.

The same logic applies to the small modules. Rounded dots and slightly softened squares scan fine in most cases. What causes trouble is styling that removes information: modules shrunk to tiny specks with big gaps, star or heart shapes, images showing through the pattern, or eyes redrawn so heavily they no longer read as squares.

If you want a logo in the middle, keep it small, keep it clear of the eyes, and generate the code with high error correction, which lets the scanner rebuild damaged areas. Understand the trade: a logo always raises the risk that some scanners will fail, so test extra carefully.

## Never stretch, squash or distort the pattern

A QR code is a square grid, and the position of every module carries meaning. Stretching a code to fill a wide banner, squashing it into a tall strip or skewing it for a "dynamic" angle changes the geometry the decoder depends on. Keep the code perfectly square and flat.

The same goes for surfaces. A code wrapped around a bottle or curved across a mug bends the grid; some scanners cope, many don't. If the code must live on a curve, print a test and scan it before committing. Avoid heavy shadows, bevels and 3D effects over the pattern, and never lay text or graphics across the modules.

## Put a call to action next to the code

People rarely scan an unexplained code. A short line of normal text beside it — "Scan to see the menu", "Scan for directions" — tells them what will happen, which increases the number of scans you get and reassures people that the code leads somewhere legitimate.

Place the message close to the code but outside the quiet zone, and set it in ordinary readable type. Keep it to one short phrase. "Scan me" on its own says nothing; a paragraph defeats the point. One clear sentence does the job.

## Keep the data short for a simpler pattern

A QR code's density depends on how much data it holds. More characters mean more modules, smaller dots and less room for error correction and styling. A short link produces a bold, chunky pattern that scans from further away and survives printing imperfections; a long tracking URL produces a dense grid that struggles at small sizes.

Before you design, look at what you are encoding. Use the shortest link that does the job — a clean domain and path rather than a URL carrying every parameter. Don't strip information you actually need, though: a slightly denser code that tracks correctly beats a sparse one that doesn't. As a rule of thumb, if the code already looks dense at your target size, shorten the data before you shrink the code.

## Test before you commit

Design changes fail in ways a screenshot won't show, so test the real thing. Open the code with the native camera apps on both an iPhone and an Android phone — don't rely on one device or one app. Scan from the distance a real user would stand, in the lighting where the code will actually appear.

For print, test a proof on the final stock. Ink can bleed into the gaps between modules, coated paper can reflect glare, and colours can shift, so a design that scans on screen may fail on paper. Free tools make this easy: generate the code, then scan it with your phone camera or a scanner such as the one on QRCodeMax.Vip.

For size, a common rule of thumb is that the code's width should be at least one tenth of the scanning distance — a 10 cm code for a metre away. When in doubt, go bigger.

## Common mistakes and a quick checklist

The same errors come up again and again:

- Inverting the colours so the code is light on dark
- Choosing colours with similar brightness, like red on black
- Letting artwork, text or a coloured edge eat into the quiet zone
- Stretching the code to fit a space instead of keeping it square
- Styling modules or eyes until the pattern is more decoration than code
- Placing an oversized logo over the centre
- Encoding a long URL, producing a dense pattern that fails at print size
- Printing across folds, curves or textured material without testing
- Publishing a code nobody has scanned since the design changed

Before you sign off, run through this checklist:

- Dark modules on a light background, with strong brightness contrast?
- Quiet zone clear on all four sides?
- Pattern perfectly square, undistorted, on a flat surface?
- Finder eyes solid, high-contrast and unmistakable?
- Data as short as it can be?
- Short call to action beside the code?
- Scanned successfully on at least two different phones?
- Printed proof tested on the final material?

If every answer is yes, the design is safe to ship.

## The takeaway

Every QR code design decision is a trade against scannability, and the pattern only forgives so much. Keep it dark on light, high-contrast, undistorted and surrounded by clear space, keep the data short, and say what it does. Then test on real phones and the final material — the scan itself is the only review that counts.
