capyQR
← All posts

Why your QR code won't scan (and how to fix it)

Eight things that actually cause QR codes to fail in the wild — and the fix for each. Includes a quick checklist before you commit to a print run.

·6 min read

A QR code that scans perfectly on your screen can fail completely once printed. Here are the eight things that actually cause that in the wild, and the fix for each — followed by a quick checklist to run before committing to a print run.

The eight causes

  1. Low contrast. Light-on-light or dark-on-dark color combinations — scanners rely on contrast to distinguish modules. Fix: keep a strong contrast ratio, dark modules on a light background is the safest default.
  2. Too small for the scan distance. A code sized for a business card won't scan from across a room. Fix: size roughly to a tenth of the intended scan distance — see how big should a printed QR code be.
  3. Insufficient quiet zone. No margin around the code confuses the scanner's ability to find its edges. Fix: leave clear space equal to roughly 4 modules on all sides.
  4. Raster export scaled up. A PNG stretched beyond its native resolution blurs and pixelates. Fix: always export vector (SVG or PDF) for anything printed — PNG vs SVG vs PDF covers the decision.
  5. Glare or texture from the print surface. Glossy paper, laminate, or textured material can create reflections that confuse a camera. Fix: prefer matte finishes and test under real lighting.
  6. A logo that's too large or low-contrast. Covers too much of the error-correction budget. Fix: keep it under ~20-25% of the code with high error correction.
  7. Curved or warped surfaces. A code wrapped around a bottle or curved packaging distorts the module grid. Fix: prefer flat surfaces, or size up significantly to compensate.
  8. Encoding errors. A typo in a WiFi password, a broken URL, or bad character encoding in a phone number. Fix: always test-scan the actual code before printing, not just trust the generator.

The pre-print checklist

  1. Print a proof at the actual size and material, not just view it on screen.
  2. Scan it with two different phones — camera quality and scanner software vary enough to matter.
  3. Test under real lighting — the conditions it'll actually be scanned in, not your desk.
  4. Check the destination loads correctly, not just that the scan registers.

Build yours in the editor → capyqr.com

A code built to scan reliably

Here's a Capy QR with strong default contrast and a clean quiet zone:

A Mono-preset Capy QR — maximum contrast by default, exported as vector for reliable printing.

Frequently asked questions

Why does my QR code scan on screen but not when printed?
Almost always contrast, size, or print quality — a code that renders fine on a bright screen can lose enough contrast or resolution in print to fail. Test the actual printed output, not just the screen preview, before a full run.
What's the single most common reason a QR code fails to scan?
Insufficient contrast between the code and its background, closely followed by printing it too small for the intended scan distance. Both are easy to check before printing and easy to miss if you only look at the code on screen.
Can a QR code be too big to scan well?
Not really — oversized codes just look impractical, they don't fail to scan. The real risk is the opposite: too small for the distance people will be scanning from.
Does a logo ever cause a QR code to stop scanning?
Yes, if it's too large or low-contrast relative to the code's error correction budget. Keep a logo under roughly 20-25% of the code's area with high error correction enabled — see the full breakdown in adding a logo to your QR code.
How do I test a QR code before a big print run?
Print a proof at the actual size and material you'll use, then scan it with two different phones under the lighting conditions it'll actually be seen in — not just your desk lamp. This catches nearly every real-world failure before it becomes expensive.

Bottom line: most scan failures come down to contrast, size, or a bad export format — all catchable with a test print before you commit to a full run. Ready to make one? Open the editor or browse more QR guides.