Why Is My QR Code Not Scanning? 9 Common Causes and Fixes
A QR code that won't scan almost always fails for one of nine reasons — low contrast, too small, no quiet zone, a big logo, or a dead destination. Here's how to diagnose and fix each, and how to make sure it never happens again.
Short answer: A QR code that won't scan almost always fails for one of nine reasons — low contrast, printed too small, a missing quiet-zone margin, a logo covering too much, inverted (light-on-dark) colors, a blurry or stretched print, a dead or expired destination, too much data crammed in, or glare from a glossy surface. Fix the physical problem, or — if it's already printed — repoint a dynamic code to a working link so every copy scans again without a reprint. Build a code that always resolves on Qre.gg.
First, find where it's failing
Before you blame the code, figure out which half is broken:
- The camera never recognizes the pattern → it's a scanning problem (contrast, size, margin, logo, print quality). Fixes 1–6 and 8–9 below.
- The phone reads it but the page is dead, wrong, or expired → it's a destination problem. Fix 7 — and the reason dynamic codes exist.
That one distinction saves you an hour of guessing. Now the nine causes, most common first.
1. Not enough contrast
QR scanners need a clear difference between the dark modules and the light background. The safest combination is dark on light — classic black modules on white. Trouble starts with pale gray codes, dark-on-dark, or brand colors that are too close in brightness. If you use color, keep the modules significantly darker than the background, and never invert to a light code on a dark field (see #5).
Fix: increase contrast. Dark modules, light background, and avoid low-contrast color pairs.
2. The code is printed too small
Below roughly 2 x 2 cm (0.8 inch), the individual modules get too fine for a camera to resolve at a normal distance. The rule of thumb is 10:1 — the code should be at least one-tenth of the distance people scan it from.
Fix: enlarge the code and follow the QR code size-for-printing chart.
3. No quiet zone (the missing margin)
Every QR code needs a blank border — the quiet zone — of at least four modules on all sides. Scanners use that empty space to lock onto the code. Designers routinely crop it away to fit a layout, or butt the code against a photo or the page edge, and the scan dies.
Fix: restore a clean, blank margin around the whole code and keep all text and graphics out of it.
4. Error correction too low for the logo
Adding a center logo covers some modules. QR codes can rebuild covered modules using error correction, but only if the level is high enough. A logo on a code still set to Low or Medium correction pushes past what can be recovered, and it stops scanning.
Fix: set error correction to High (H) and keep the logo under about 30% of the code area. Good tools do this automatically — on Qre.gg, adding a logo bumps correction to H for you. Full walkthrough: how to add a logo without breaking the scan.
5. Inverted colors (light on dark)
Most scanners expect dark modules on a light background. A "negative" code — light modules on a dark background — reads on some phones and fails on others. It looks slick; it scans unreliably.
Fix: use dark-on-light. If your brand demands a dark look, keep the code itself conventional and put the dark styling in the frame around it.
6. Blurry, stretched, or damaged print
A code that looked perfect on screen can be ruined at the printer: a small PNG stretched up to poster size, a low-DPI export, ink bleed on cheap stock, or a physical scratch across the pattern.
Fix: export as SVG (vector, sharp at any size) or a 300 DPI PNG at final size, never scale a small raster up, and protect the printed piece.
7. The destination is broken or expired (the "printed and dead" problem)
Here's the failure that isn't about the pattern at all. The code scans perfectly — and lands on a 404, a moved page, or an expired link. With a static code, the URL is baked into the pattern, so a dead destination means the printed code is dead too. This is the exact anxiety QR codes are infamous for: you printed 5,000 flyers and the link changed.
Fix (and prevention): use a dynamic QR code. It points to an editable short link, so if the destination breaks or moves, you just repoint it and every printed copy works again within seconds — no reprint. And unlike some tools' free codes, a good dynamic code never expires. This is the whole reason dynamic codes exist.
8. Too much data crammed in
The more you encode — a long URL, a full vCard, a paragraph of text — the denser the pattern and the smaller each module at a given size, which makes it fail sooner when printed small.
Fix: shorten the data. A dynamic short link like qre.gg/aB3x9Kd produces a sparse, forgiving code with large modules that scans from farther away.
9. Glare, curves, and awkward surfaces
Physics gets a vote. A glossy laminate throws reflections; a code wrapped around a curved bottle or crumpled bag distorts the grid; a code behind glass catches light.
Fix: prefer matte finishes, keep the code on a flat area, size it generously, and test it in the real lighting where it will live.
Quick diagnostic table
| Symptom | Most likely cause | Fix |
|---|---|---|
| No phone recognizes it | Contrast, size, or missing quiet zone | #1, #2, #3 |
| Works on screen, not on paper | Print quality or scaling | #6 |
| Scans on some phones only | Inverted colors or big logo | #4, #5 |
| Scans but lands on a dead page | Broken / expired destination | #7 |
| Hesitates from a distance | Too small or too much data | #2, #8 |
| Fails on the product but not on paper | Glare or curved surface | #9 |
The permanent fix: a code you can repoint
You can prevent most of the list above with good design — but you can only prevent the worst one, a dead destination on already-printed material, with a dynamic code. Because the destination lives on an editable link instead of in the ink, a dynamic QR code lets you:
- Fix a broken or wrong link after printing, without reprinting.
- Redirect a whole campaign to a new page when the old one retires.
- Watch scans in real time so you notice a problem the moment it starts (see how to track QR code scans).
Reliability is the point of a QR code. A dynamic one is how you guarantee it.
Make a QR code that always scans
Get the fundamentals right — dark on light, at least 2 cm, a clean quiet zone, error-correction H under any logo, exported as SVG — and test the printed piece on more than one phone. Then make it dynamic so a link change never turns your print into a dead end.
Create a QR code that always resolves →, or open the free QR code generator. Printing soon? Get the dimensions right with our QR code size-for-printing guide.
Make a QR code that never breaks.
Create a free dynamic QR code in seconds — editable after printing.
Create your first QR →Keep reading
The right QR code size for printing, explained: the 10:1 distance rule, a minimum-size chart for business cards to billboards, why you need 300 DPI or SVG, and the quiet-zone margin that makes codes scan.
How to Track QR Code Scans: Count, Location, Device & TimeTrack every QR code scan in real time — total scans, location, device, and time. Learn why only dynamic QR codes are trackable, how to read the analytics, and how to add UTM campaign tracking.