QR Code Design Best Practices: Size, Color, and Placement

How to design QR codes that scan reliably every time — and avoid the mistakes that break them.

A QR code that doesn't scan is worse than no QR code at all. It wastes your audience's time and damages their trust. The good news is that making QR codes scan reliably is straightforward once you understand the rules. This guide covers the technical requirements and design decisions that determine whether your QR code works flawlessly or fails in the field.

Minimum Size

The most common reason QR codes fail to scan is being too small. The general rule for printed QR codes is that each individual module (the smallest square in the pattern) must be at least 0.75mm wide for reliable scanning. In practice, this means your QR code should be at least 2cm x 2cm (about 0.8 inches) for simple content like a short URL, and larger for codes with more data.

For scanning distance, a useful formula is: the QR code should be at least one-tenth the scanning distance. If someone will scan the code from 30cm away (arm's length), the code should be at least 3cm. For a poster viewed from 2 meters, the code needs to be at least 20cm. For a billboard at 10 meters, you need a code that's at least 1 meter across.

Testing rule: Always test your QR code at the actual size and distance it will be used. Print a test copy, place it where it will go, and scan it with at least three different phones (including an older model). If any phone struggles, the code needs to be bigger.

Color and Contrast

QR code scanners work by detecting the contrast between dark modules and light modules. The critical requirement is sufficient contrast ratio between the foreground (modules) and background. The minimum recommended contrast ratio is 4:1, though higher contrast always improves reliability.

Dark foreground on light background is the safest choice because it's what scanners are optimized for. Black on white provides maximum contrast and works in every scenario. You can use brand colors, but keep the foreground color dark (below 40% brightness) and the background color light (above 70% brightness). Avoid color combinations where both colors have similar luminance — dark blue on dark green might look different to your eyes but could be nearly identical to a scanner.

Never invert colors (light modules on dark background) unless you've thoroughly tested it. While many modern scanners handle inverted codes, some older phones and third-party scanner apps don't. If your audience might include older devices, stick with dark-on-light.

The Quiet Zone

Every QR code requires a quiet zone — a blank border around the entire code that separates it from surrounding visual elements. The QR code specification requires a quiet zone of at least four modules wide on all sides. Without this border, scanners may not be able to identify where the code begins and ends, causing scan failures.

In practice, this means you should never crop a QR code tightly to its edges, place it directly against busy backgrounds or images, or position text or graphics right up against the code boundary. Always leave white (or your background color) space around the code equivalent to at least four of the smallest squares in the pattern.

Print Resolution

For printed QR codes, resolution matters more than you might expect. A QR code exported at low resolution will have blurry module edges, which can cause scanning failures especially for codes with high data density. Export your QR codes at 300 DPI minimum for print, and use PNG or SVG format rather than JPEG. JPEG compression creates artifacts around the sharp module edges that reduce contrast and scannability.

If you're printing codes on materials that might bleed (like uncoated paper or fabric), increase the size slightly to compensate for ink spread that could blur module boundaries. Glossy materials can cause glare that interferes with scanning — matte finishes are always safer.

Data Density

The more data you encode, the more modules the QR code needs, which means smaller individual modules at any given code size. A QR code containing a 20-character URL will have large, easily scannable modules. A code containing a full vCard with name, title, company, three phone numbers, email, website, and address will have much smaller, denser modules that require a larger physical code to remain scannable.

For URLs, use the shortest version possible. URL shorteners reduce the data payload and produce simpler codes. Instead of encoding https://www.example.com/products/category/item-name?utm_source=brochure&utm_medium=print, consider linking to a shortened URL or removing tracking parameters from the printed code and adding them via a redirect.

Error Correction Level

QR codes include built-in error correction that allows them to be read even when partially damaged or obscured. There are four levels: L (7% recovery), M (15%), Q (25%), and H (30%). Higher error correction means the code can tolerate more damage but produces a denser (harder to scan) code. For most applications, Level M (15%) is the best balance. Use Level H only if you expect the code to be partially covered or placed on a surface that might cause damage. See our detailed error correction guide for more on choosing the right level.

Logos and Center Overlays

Adding a logo, brand mark, or company initials to the center of a QR code is one of the most popular customizations — and one of the most commonly broken. The visual benefit is real: an overlay turns a generic black-and-white pattern into something recognizable, on-brand, and more inviting to scan. The risk is that the overlay physically covers some of the QR modules, and if you cover too many, the code stops scanning.

Why Overlays Work at All

QR codes carry redundant data — the same encoding redundancy that lets a CD play through small scratches. The four error correction levels (L, M, Q, H) correspond to recovery thresholds of 7%, 15%, 25%, and 30%. A logo in the center "damages" the code in the same way a scratch would, and as long as the damaged area stays within the recovery threshold, the scanner reconstructs the missing data and reads the code normally. For any code with a center overlay, you should always use Level H (30%). Lower levels don't have enough redundancy to recover from concentrated loss in one area.

Sizing the Overlay

The safe rule of thumb is to keep the overlay smaller than 25% of the code's total area. In practice, that means an overlay roughly 22-23% as wide as the QR code itself. Going larger eats into your error correction margin and risks failure on dense codes — especially vCards or long URLs where every module counts. Going smaller is always safe but makes the logo harder to recognize at small print sizes.

The overlay should also have a small "pad" of background color around it so the rounded edges of the logo don't merge visually with surrounding modules. This pad is what tells the scanner to treat that rectangle as a non-data region rather than misreading partial modules at the edge — a clean separation improves recognition reliably.

What to Avoid with Logo Overlays

Don't place a logo over the finder patterns — the three big square targets in the corners of every QR code. Those aren't part of the error-corrected data; they're structural alignment markers, and damaging them breaks the code completely. Don't use overlays larger than 30% even with Level H, since you've crossed the recovery threshold and entered "this might work, might not" territory. And don't combine overlays with very dense data unless you can also increase the physical size — a 200-character URL with an overlay printed at business-card size is asking for failure.

Pro tip: Test logo-bearing QR codes with multiple phones and apps before printing in volume. Modern phone cameras handle overlays gracefully, but cheap industrial scanners and older devices are far less forgiving. If your audience might include those, either skip the overlay entirely or print larger to give scanners more pixels to work with.

Common Mistakes to Avoid

Placing QR codes on curved surfaces without testing is a frequent error — the distortion from a bottle or cylindrical container can prevent scanning. Printing on highly reflective surfaces causes glare that blocks the camera. Embedding QR codes inside images with busy backgrounds makes it hard for scanners to isolate the code. Forgetting to raise error correction to Level H when adding a logo can make an otherwise well-designed code unscannable. And linking to non-mobile-friendly pages defeats the purpose since every QR code scanner is a phone.

Create properly formatted QR codes with custom colors and error correction.

Open QR Forge →