QR Code Not Scanning? 10 Causes and How to Fix Them
Published: 2026-08-31 · Updated: 2026-08-31
A QR code that will not scan is almost never broken data — it is usually a physical problem: too small, too pale, too blurry, or missing its margin. Work through the ten causes below in order. Each one lists the symptom you would actually see, then the fix.
Reproduce the failure first
Before changing anything, note exactly when it fails. Does it scan on your monitor but not on paper? Does it work at 10 cm but not at arm’s length? Does one phone read it and another not? That single observation usually points straight at one of the causes below.
Causes 1–4: size, color and margin
- Too small for the distance. Symptom: it scans when you push the phone right up to it, but not from where people actually stand. Fix: apply the 10:1 rule — the printed code should be at least one tenth of the scanning distance, and never below 2 cm. See the size chart by scanning distance.
- Not enough contrast. Symptom: fine on a bright screen, unreliable on paper or in dim light. Cameras see brightness, not hue, so red-on-white and anything pastel or yellow reads as “light on light”. Fix: keep a contrast ratio of at least 3:1, ideally 4.5:1. This generator warns you when your color pair falls below that.
- Inverted colors. Symptom: a light code on a dark background scans on some phones and fails on many others. The specification expects dark modules on a light background, and plenty of decoders never try the inverse. Fix: swap them back. The generator flags inverted pairs for this reason.
- No quiet zone. Symptom: the code sits flush against artwork, a border or a photo, and scanners hunt without locking on. QR codes need a blank margin four modules wide so the decoder can isolate the grid. Fix: restore the margin, and make it the same light color as the code background — not the color of the surrounding layout.
Causes 5–7: print, surface and damage
- Blurry or low-resolution printing. Symptom: edges look soft or grey; the code is fuzzy under a magnifier. Usually a small PNG was scaled up. Fix: use SVG, or a PNG of at least 1024 px placed at or below its native size — see PNG vs SVG and printing QR codes.
- Glare or a curved surface. Symptom: it scans on a flat proof but not on the finished bottle, cup, laminated card or glossy poster. Reflections wash out modules, and curvature distorts the grid. Fix: choose matte stock, place the code on the flattest area available, and make it larger than the minimum.
- Damage beyond the error-correction budget. Symptom: it worked when new, fails once scuffed, folded, or after a logo was dropped on top. Error correction recovers roughly 7% (L), 15% (M), 25% (Q) or 30% (H) of the code — and a logo eats into that same budget. Fix: raise the level to Q or H, keep any overlay well under the limit, and reprint.
Causes 8–10: data, camera and destination
- Too much data. Symptom: a long URL with tracking parameters or a full vCard produces a visibly dense code that fails at small sizes. More bytes means a higher version, which means more, smaller modules at the same physical width. Fix: shorten the payload — see how QR codes work.
- The camera, not the code. Symptom: one phone reads it instantly, another never does. Most cameras cannot focus closer than about 10 cm, lenses get greasy, and screens displaying a code may be too dim or set to auto-brightness. Fix: clean the lens, step back, raise the screen brightness, and on older Android devices use a dedicated scanner app.
- Wrong or dead destination. Symptom: the code scans fine — the phone shows a URL — but the page 404s or nothing useful happens. Causes: a typo, a missing
https://, or a dynamic short link whose vendor expired or paywalled it. Fix: check the decoded text, and read static vs dynamic QR codes before you depend on a third-party redirect.
Two-minute checklist
- Measure the code and compare it with the intended scanning distance.
- Confirm dark modules on a light background, with no contrast warning.
- Check the four-module quiet zone is intact in the layout file.
- Scan the real, final artifact with an iPhone and an Android phone under real lighting.
- Read the decoded text out loud and open it in a browser.
If several of these apply, regenerate the code rather than patching the file — it takes a few seconds, and a fresh code with the right size, colors and error correction is far more reliable than a rescued one.