Design & Best Practices

QR Code Design Best Practices

A QR code is one of the few pieces of design where an aesthetic decision can make the entire element non-functional. A logo that's too large, colors with too little contrast, or a border that's too tight don't just look worse — they can push a code past the point where a camera can reliably decode it. This covers the specific constraints that keep a styled code working, not just looking the part.

Contrast is the foundation

Scanners rely on a sharp brightness difference between the dark and light modules to distinguish the pattern at all. Pure black on white gives the most reliable results and the widest margin for error in poor lighting or lower-quality print reproduction. Colored codes are possible — a dark navy or forest green on white can scan fine — but the safe rule is to keep the dark modules genuinely dark (avoid mid-tone colors) and the background genuinely light. Inverted codes (light modules on a dark background) are technically valid per the spec but scan far less reliably in practice, since most scanner software is tuned to expect dark-on-light. Avoid them unless testing confirms reliable results across multiple devices.

Respect the quiet zone

The quiet zone — a blank margin of at least four modules around the entire code — isn't a stylistic suggestion, it's part of the spec. Scanners use that empty border to detect where the code starts against its surroundings. Designers often want to tighten this margin to fit a code into a smaller layout space, or place text or graphics right up against the edge of the code — both are common causes of scan failures that look, at a glance, like a perfectly fine code. When space is tight, shrink the whole code rather than shrinking its quiet zone.

Adding a logo

Placing a logo in the center of a QR code is common and, done correctly, doesn't break the code — the error correction system is specifically capable of reconstructing data covered by a centered logo, provided there's enough redundancy to work with. A few rules keep this reliable:

  • Use H level error correction (see our error correction guide) any time a logo is present — lower levels don't have enough redundancy margin to safely absorb the coverage.
  • Keep the logo to roughly 20-30% of the total code area at most. Beyond that, even H level correction can't reliably reconstruct enough of the underlying data.
  • Never let the logo overlap the finder patterns in the three corners — those are load-bearing for the scanner locating the code at all, and covering them causes failures that error correction can't fix, since it's a structural element rather than data.
  • Add a small white padding ring around the logo itself rather than letting its edges blend directly into the surrounding modules — this gives the scanner a cleaner boundary to work from.

Rounded modules and custom styling

Rounded corners on individual modules, dot-style modules instead of squares, and custom "eye" styling on the finder patterns are all popular ways to make a code feel more on-brand, and most modern scanners handle them without issue — the underlying grid structure and positions haven't changed, only the rendering. That said, more aggressive stylization (very small dots with large gaps, heavily rounded shapes that reduce effective contrast between adjacent modules) increases risk, especially at smaller print sizes. Test any heavily stylized code across a few different phone models before committing to a print run, rather than assuming a design that scans on one device will scan reliably on all of them.