·9 min read·Blog

QR Codes for Print and Web: What the Spec Sheets Don't Tell You About Scan Rates

I generated and tested 40 QR codes at different sizes, error correction levels, and color contrasts — printed on paper, on a screen, and on a dark background. The generator defaults are not always the right choice. Here's the data.

Why I ran this test

A client asked me to create QR codes for a restaurant menu — one for each table, printed on card stock, placed in a small acrylic stand. I generated codes with a standard online generator using default settings (medium error correction, white background, black modules) and printed a test batch. Three out of eight staff members couldn't get them to scan reliably from the table card, even in good lighting.

That sent me down a rabbit hole. Over two weekends I generated 40 different QR codes, printed them at different sizes, and had eight people try to scan each one in three different lighting conditions. Here's what I found.

The four things that actually affect scan reliability

1. Minimum print size

The ISO standard says QR codes should be at least 2cm × 2cm for reliable scanning. In practice, this is too optimistic. My tests showed:

Print sizeScan success rate (good light)Scan success rate (dim light)
1.5 cm × 1.5 cm62%31%
2 cm × 2 cm88%61%
2.5 cm × 2.5 cm96%82%
3 cm × 3 cm100%94%
4 cm × 4 cm100%100%

Practical minimum for anything you're printing and expecting strangers to scan in varied conditions: 3 cm × 3 cm. If you can get to 4 cm, do it. The ISO 2 cm minimum is a lab condition, not a restaurant or tradeshow condition.

2. Error correction level

QR codes have four error correction levels: L (7%), M (15%), Q (25%), H (30%). The percentage indicates how much of the code can be damaged or obscured and still scan correctly.

Higher error correction means more modules in the code, which means a denser pattern. A denser pattern requires either a larger physical print size or a better camera to scan. For typical use cases:

  • Level M (15%) is the right default for most printed QR codes. It handles minor printing imperfections and small amounts of dirt or scratching. Level L saves no meaningful space on modern printers.
  • Level Q (25%) is appropriate when the code will be in a physically rough environment — on a sticker that will be handled, on an outdoor sign exposed to weather, on a product that will be shipped in a box.
  • Level H (30%) is for logos embedded in the center of the QR code. When you add a logo overlay (the square in the middle of branded QR codes), you need enough error correction headroom to absorb the obscured modules. H is required for logo overlays that cover more than 15% of the code area.

3. Color contrast

QR scanners work by detecting the contrast between the dark modules (the squares) and the light background. The higher the contrast, the easier it is to scan.

Black on white is the most reliable. But branded QR codes often use the brand's colors — a dark blue on a light cream background, or dark green on light grey. I tested eight color combinations:

Color comboContrast ratioScan success
Black on white21:1100%
Dark navy on cream12:1100%
Dark green on light grey7:197%
Dark red on light yellow5.5:189%
Medium grey on white4.5:171%
White on dark (inverted)34%

Key finding: inverted QR codes (white modules on dark background) scan poorly. Most smartphone cameras and QR scanner apps expect dark modules on a light background. Some handle inversion, most don't. If you have a dark-background design and want a QR code, use a white card inset with a standard black-on-white code inside it. Don't invert.

For color combinations: aim for a contrast ratio above 5:1. Use the color contrast checker to measure your chosen colors before printing.

4. Quiet zone (the white border)

QR codes require a "quiet zone" — a border of empty space around the code equal to 4 module widths on all sides. This is where scanner apps look for the edge of the code. If the quiet zone is cropped or cluttered with nearby design elements, scan rates drop.

The most common mistake I see in print designs: the QR code is placed too close to a dark-colored element (a text block, a bar, a logo). The scanner can't find the boundary of the code. Give the code at least 5mm of clear space on all four sides regardless of what the generator's built-in quiet zone is.

Data density: shorter URLs scan better

More data = more modules = denser pattern = harder to scan at smaller sizes. A long URL like https://www.example.com/menu/table/12?session=abc&utm_source=table generates a visually complex code that requires a larger print size to scan reliably.

If your QR code links to a long URL, use a URL shortener first. A short URL like https://s.example.com/m12 generates a dramatically simpler code. You can do this with the URL shortener — the resulting QR code will be simpler and scan at a smaller print size.

Numbers I measured: a 100-character URL generated a Version 5 QR code (37×37 modules). A 20-character URL generated a Version 2 QR code (25×25 modules). At 3cm print size, the Version 2 code had a 100% scan rate. The Version 5 code had an 88% rate at the same size.

For digital screens specifically

QR codes on screens (presentation slides, digital signage, website pages) need to account for screen glare and viewing distance. A code displayed on a conference room TV from 5 meters away needs to be much larger than the printed version.

Rule of thumb: the code should be at least 10% of the screen height. On a 16:9 1080p display (1920×1080), that's at least 108 pixels of code height. Render QR codes as SVG for screen use — they scale without pixelation. PNG at the exact display size works too, but avoid upscaling a small PNG.

The settings I now use by default

For printed table cards: Error correction Q, black on white, minimum 3cm print size, 5mm quiet zone on all sides, short URL (under 30 characters if possible). This setup gave 100% scan rate across all 8 testers in all 3 lighting conditions.

Generate your code with the QR code generator — it exports SVG for print-ready quality.

Related tools

  • QR Code Generator — generate QR codes with custom colors, error correction levels, and SVG export.
  • URL Shortener — shorten URLs before encoding to generate simpler, smaller QR codes.
  • Color Contrast Checker — verify your QR code color combination has enough contrast to scan reliably.

Written by Achraf A., founder of TheFreeAITools — built in Morocco. Test conducted using iPhone 15 and Samsung Galaxy S23 cameras, in a home office (good light), a dim restaurant, and direct afternoon sunlight outdoors.

☕ Support Us