QR Code Not Working? 11 Fixes for Codes That Won't Scan
6 min read · updated 2026-09-07
A QR code that won't scan always has one of about eleven causes — and roughly eight of them are fixable in minutes. Work through this list from the top; it's ordered by how often each cause turns out to be the culprit.
First: is it the code or the phone?
Scan a different QR code — any other one, or generate a test code and scan that.
- Other codes scan fine → the problem is this specific code; keep reading
- Nothing scans → it's the phone/camera side: clean the lens (pocket lint is cause #1), check you're 20–30 cm away, improve the lighting, and confirm you don't need to tap a "scan" mode in the camera app. On iPhone: Settings → Camera → Scan QR Codes must be on
1. The code is printed too small
The most common cause by far. A code needs to be about 1/10th of the scanning distance in size, with a 2 × 2 cm absolute floor — a code scanned across a table needs 5+ cm; a window code scanned from the sidewalk needs 20+ cm. Measure the code and the distance against the QR code size guide.
Fix: print bigger, or shorten the content so the modules print larger at the same size.
2. Poor contrast
Gray-on-white, brand-blue-on-brand-navy, light codes on dark backgrounds — the camera needs a strong brightness difference, not tasteful colors. Inverted codes (light modules on dark background) are especially unreliable.
Fix: near-black code on white or very light background. If the design is dark, put the code in a white box. The generator warns when contrast drops too low — regenerate with darker colors.
3. Glare or bad lighting
Laminated and glossy surfaces reflect light exactly into the camera. Direct sunlight on a screen can wash a code out; deep shade starves the sensor.
Fix: tilt the print, move the light, or ask the scanner to shade the code with their hand. For prints you control: matte finish over gloss (see the printing guide).
4. The quiet zone is missing or crowded
The blank margin around the code (four modules wide, by specification) is how the camera finds the code's edges. A code that touches text, borders, images, or a busy background often isn't detected at all.
Fix: regenerate the code with the margin intact — this generator defaults to the spec-compliant four-module quiet zone — or reprint with clear space around it.
5. Damage, dirt or distortion
Torn, scratched, sun-faded, smeared, wrapped around a bottle's curve, photographed through warped plastic. Error correction is impressive (up to 30% of the code can be destroyed) but it's not magic.
Fix: for damaged prints, replace them. For curved surfaces, print the code smaller relative to the curve (under ~15% of the cylinder's circumference) and re-test. For codes that must survive abuse, generate with error correction H from the start.
6. The code is too dense
A huge amount of content produces a version-20-something code whose modules are microscopic at normal print sizes. It scans only dead-center at point-blank range — if at all.
Fix: shorten the content dramatically. A shorter URL, a leaner contact card (drop the address and photo), less text. If the content can't shrink, link to a web page instead and put the content there.
7. A stylized design broke the structure
Custom codes with dot patterns, rounded modules and logos scan fine — until a design crosses a line: finder patterns (the three corner squares) reshaped beyond recognition, a logo grown past ~30% of the code, colors with too little contrast, or modules shrunk to fit a decorative frame.
Fix: regenerate with the structure intact — finder patterns clearly visible, logo under ~20% with error correction H, quiet zone untouched. The generator enforces and warns about all three.
8. The scan happens at a bad angle or distance
Steep angles (more than ~30–40° off perpendicular) distort the module grid; too close and the camera can't focus, too far and the modules fall below its resolution.
Fix: straighten out, back off to ~25 cm for a hand-held print, and give the autofocus a beat. This cause is symmetric with cause #1 — if the natural scanning distance is too far, the code is too small.
9. An old or quirky phone
iPhones before iOS 11 don't scan natively; some heavily customized Android cameras don't either; a few budget models have cameras that struggle with small dense codes.
Fix: for your own phone, a free scanner app or the Google app. For codes you're printing for others: this is why you size generously and print a fallback URL next to the code (see best practices).
10. The code itself is fine — the destination is broken
The scan works, but the link opens an error page. That's not a scanning problem: the URL moved, the site is down, or (for dynamic codes from a commercial service) the subscription lapsed and the redirect died. This is the failure mode behind most "QR codes stop working after a while" stories — see do QR codes expire?.
Fix: if the destination moved and the code is static, print a new code with the new URL. If you need future-proofing, use a static code pointing at a URL you control, so the page can change without reprinting (static vs dynamic).
11. It was never a real QR code
Screenshots of screenshots, low-resolution images copied from the web, or "QR-inspired" decorative art with no actual data in it. If the pattern doesn't have three clear finder squares and it came from a Google Image search, it may simply be junk.
Fix: regenerate from the source. If you need a code for that exact content, the generator will make a clean one in seconds.
The 60-second triage summary
| Symptom | Most likely cause |
|---|---|
| Camera doesn't react at all | Small code, missing quiet zone, no contrast, or phone-side issue |
| Camera sees it, won't lock | Glare, density, angle, damage |
| Scans, opens an error page | Dead destination — not a QR problem |
| Works on one phone, not another | Marginal size/contrast — fix the print, not the phone |
| Used to work, stopped | Dynamic code's service lapsed, or the destination moved |
If you're generating a fresh code and want to start from a known-good place: the free QR generator applies the defaults that prevent most of this list — spec-compliant quiet zone, contrast warnings, logo limits, error correction options — for URLs, Wi-Fi, contacts and every other type.