Why won't my QR code scan? 12 reasons and how to fix them
A QR code usually fails to scan because of low contrast (light dots on a dark background, or colors too close), a missing quiet zone (the white margin around the code), being printed too small for the scan distance, packing in too much data so the pattern gets dense, or a logo covering more than ~30% of the code. Fix it by using dark dots on a light background, keeping a 4-module white border, shortening the URL, and testing the code before printing. QR Cat's free scannability test decodes your code under several conditions so you can catch a bad one before it's on a thousand flyers.
Start by testing, not guessing
Before you change anything, find out how fragile the code actually is. A code can look fine on screen and still fail on a printed menu in dim light. Run it through QR Cat's scannability test: it tries to decode the image as-is, then in grayscale, with boosted contrast, scaled down to a third (mimicking distance or small print), and at 80px (extreme small size). The fewer conditions it survives, the closer it is to the edge — and the fixes below tell you which dial to turn.
The 12 most common reasons — and the fix for each
Nearly every unscannable code traces back to one of these. Work down the list; the first few cause the large majority of failures.
- Low contrast. The single most common cause. Scanners need a clear dark-on-light difference. Fix: dark dots on a white or very light background; avoid pastel-on-pastel.
- Inverted (negative) colors. Light dots on a dark background break many phone cameras even though the code is 'technically' valid. Fix: keep the data modules dark and the background light.
- No quiet zone. A QR code needs a blank margin (about 4 modules wide) all around it. Fix: never crop tight to the edge; leave white space.
- Printed too small. Rule of thumb: minimum size ≈ scan distance ÷ 10 (scan from 50cm → at least ~5cm code). Fix: print bigger, or shorten the data so the pattern is coarser.
- Too much data. Long URLs and big vCards make a dense, high-version code with tiny modules that smear when printed. Fix: shorten the URL, trim the vCard, or print larger.
- Logo too big / off-center. A center logo is fine up to ~25–30% of the area with high error correction, but bigger eats the data. Fix: shrink the logo and use error-correction level H.
- Gradient or fancy shapes overdone. Decorative dot/eye shapes are fine; the danger is a gradient whose lightest stop is too pale. Fix: keep both gradient stops genuinely dark.
- Blurry or low-res print. A low-DPI PNG stretched onto a poster turns crisp modules to mush. Fix: export SVG (vector) for anything printed.
- Reflective or curved surface. Glossy lamination and bottles/cups create glare or distortion. Fix: matte finish, flatter placement.
- Damaged or partially covered code. Folds, staples and stickers across the code destroy modules beyond what error correction can recover. Fix: reposition; reprint.
- Wrong content type. A WiFi or vCard payload built with the wrong syntax scans but does nothing useful. Fix: generate it with a dedicated WiFi / vCard tool, not a raw-text field.
- A 'dynamic' code that expired. If you used a free site that hands out short-link redirect codes, the code dies when the trial ends. Fix: use a static code that encodes the content directly — it can't expire.
Contrast and quiet zone, in plain terms
Two ideas fix most codes. Contrast: a camera distinguishes modules by brightness, so the dark parts must be clearly darker than the light parts — black-on-white is safest, dark-navy-on-cream is fine, grey-on-beige is not. Quiet zone: the empty margin tells the scanner where the code begins and ends. Crop it away and many scanners simply never lock on. Leaving roughly four modules of white space around the code is the cheapest reliability you can buy.
If it's for print, export SVG
Screens are forgiving; print is not. A vector SVG stays razor-sharp at any size, so the modules print as clean squares whether the code is on a business card or a billboard. A low-resolution PNG enlarged for a poster is a classic cause of 'it scanned on my screen but not on the wall.' QR Cat exports SVG for free on every generator — use it for anything that gets printed.
Frequently asked questions
My QR code scans on my phone but not on the printed version — why?
Almost always print quality or size. A low-resolution PNG stretched onto paper blurs the modules, and a code printed smaller than roughly scan-distance ÷ 10 is too fine to resolve. Re-export as SVG, print larger, and keep a white quiet zone around it.
Can colored QR codes be scanned?
Yes, as long as the dark/light contrast holds. Keep the data modules genuinely dark and the background light; avoid inverted (light-on-dark) codes and pale gradients. Test before printing — a color that looks fine on screen can fail under store lighting.
Does adding a logo stop a QR code from scanning?
Not if you do it right. Keep the logo under about a quarter of the code area, center it, and use error-correction level H (which tolerates ~30% damage). QR Cat raises error correction automatically when you add a logo.
How do I test if a QR code will scan before I print 1,000 of them?
Use QR Cat's free scannability test. It decodes your code under several conditions — original, grayscale, boosted contrast, scaled down, and very small — and flags low contrast or a missing quiet zone, so you catch a fragile code before it's on every flyer.