QR Studio Pro
Studio-grade QR codes, generated instantly.

Why Won't My QR Code Scan? 10 Causes and How to Fix Them

A checklist for QR codes that fail to scan, ordered by how often each cause is the real one. Covers contrast, inverted colours, size, quiet zone and print problems.


A QR code that doesn't scan usually fails for one of a small number of reasons. This list is ordered roughly by how often each turns out to be the actual cause, so start at the top.

Before anything else, check the obvious one: does it scan on screen but not in print? If so, skip to causes 3–6. If it fails everywhere including on screen, the problem is in the code itself — causes 1, 2 or 10.


1. The colours are inverted

Light modules on a dark background. This is the most common design-led failure, and the most surprising, because the code can have excellent contrast and still be completely unreadable.

The QR specification assumes dark modules on a light background. Most decoders only look for that arrangement. We tested a high-contrast inverted code — white on near-black, a ratio of 18:1 — against a real decoder and it failed outright, while the same code the right way round read instantly.

Fix: swap the colours. Dark code, light background, always. Our generator refuses to produce inverted codes for this reason.

2. Not enough contrast

Scanners convert the image to black and white before reading it. If your foreground and background are too close in brightness, that step turns your code into mush.

Aim for a contrast ratio of at least 3:1, and considerably more for print. Pure black on pure white is ideal. A dark brand colour on white is usually fine. Mid-grey on cream is not.

Watch out for the specific trap of a mid-tone brand colour that looks strong on a bright monitor and washes out on paper. Ink spread on uncoated stock reduces effective contrast compared with what you saw on screen.

Fix: darken the foreground or lighten the background. Our generator blocks anything below 3:1.

3. It's too small for the amount of data

This is the big one for print, and it's frequently misdiagnosed as "the printer did something wrong."

What matters isn't the overall size of the code — it's the size of each individual module (the little squares). Scanners need roughly 0.4 mm per module minimum, and 0.6 mm is a safer target.

Two codes at the same physical size can be wildly different:

Content Version Modules At 30 mm square
Short link v2 25 × 25 0.91 mm — comfortable
Full vCard v11 61 × 61 0.43 mm — borderline
Same vCard at error correction H v16 81 × 81 0.34 mm — likely to fail

Fix: either print it bigger, or — much better — shorten the content. Dropping a 75-character tracking URL to a 22-character short link takes you from v5 to v2 and makes every module 36% larger at the same printed size. Full detail in the print size guide.

4. The quiet zone was removed

The blank margin around the code is not decoration. Scanners use it to work out where the code ends. The specification requires four modules of clear space on all sides.

Designers trim it constantly, because it looks like wasted whitespace. It isn't, and a code with text or a border crowding its edge will fail on phones that would otherwise read it fine.

The margin also has to be the same colour as the code's background. A white-background code dropped onto a dark poster needs its white margin intact, not the poster showing through.

Fix: restore the margin. If it's going on a coloured background, generate the code with that background colour rather than letting the design encroach.

5. It was stretched or distorted

QR codes must stay perfectly square. A designer nudging a corner handle to make something fit is a very common and completely fatal error.

Fix: resize proportionally. If you've lost the original, regenerate it — it takes seconds.

6. It was printed from a low-resolution image

Enlarging a small PNG blurs every module edge. The scanner is trying to decide whether each cell is dark or light, and a gradient makes that ambiguous.

The tell-tale sign: it scans fine on your monitor and fine on a small proof, then fails intermittently at full size. Intermittent is the worst outcome, because it passes your quick check and then fails for a share of real customers who simply give up without telling you.

Fix: use SVG for anything printed. And never save a QR code as a JPEG — JPEG compression creates artefacts exactly at hard edges, which is the entire content of a QR code.

7. Glare, gloss or curvature

Physical problems that don't show up in any digital test:

Fix: matte finish, flat surface, and place it away from direct light sources or reflections.

8. A logo is covering too much

If you've overlaid a logo, you're deliberately damaging the code and relying on error correction to compensate.

Even at the highest error correction level (H), keep the logo to 5–7% of the code's area — roughly a quarter of its width. The widely-repeated "up to 30%" is wrong: H recovers ~30% of codewords, not 30% of the visible area.

We measured the point where codes stop decoding: a short URL fails above 9% coverage, a long URL above 16%, a full vCard above 18%. Small codes are the fragile case. Those are also best-case figures from a clean digital render, so leave margin for print and bad lighting.

Critically, the logo must never touch the three large corner squares. Those are the finder patterns — they're how a scanner locates the code in the first place, and no amount of error correction recovers them.

Fix: shrink the logo, centre it, and give it a solid background. See error correction levels.

9. The error correction level is too high

Counter-intuitive, but real. Raising error correction adds redundant data, which grows the matrix, which shrinks every module at a fixed printed size.

That's why the table in cause 3 shows the same vCard becoming harder to scan at level H than at level M. Beyond a point, you're trading readable modules for redundancy you don't need.

Fix: use M for most things, Q for print that gets handled. Reserve H for logo overlays and genuinely hostile environments.

10. The code is fine — the content isn't

Sometimes it scans perfectly and the problem is what's inside:


A 60-second diagnostic

  1. Scan it on screen at full size. Fails? The problem is in the code — check colours, contrast, and content.
  2. Scans on screen but not in print? Measure a module with a ruler. Under 0.4 mm is your answer.
  3. Check the margin is intact and the same colour as the code background.
  4. Check it's square, not stretched.
  5. Try a second phone. One old device failing while others succeed is a device problem, not a code problem.

Before any print run

Print one proof at final size, on the actual stock and finish, and scan it in the lighting where it will actually live — a restaurant at dinner service is far darker than your desk. Twenty minutes of testing is cheaper than reprinting 5,000 menus.


Our generator blocks the two most common causes outright — inverted colours and insufficient contrast — and shows you the version and module count live, so you can catch a too-dense code before it reaches a printer.

Make a QR code now
Free, no sign-up, unlimited previews.
Open the studio