Design & Best Practices

Common QR Code Scanning Failures & How to Avoid Them

QR code failures aren't mysterious. They come from a short, repeatable list of causes, and — usefully — each one produces a slightly different symptom. If you know how the code is failing, you can usually work out why without guessing. This guide starts with that diagnosis, then covers every cause in detail.

The short version

  • Camera does nothing at all → the code isn't being located: quiet zone, finder pattern, or contrast.
  • Camera hunts then gives up → it found the code but can't read it: too small, too dense, or too damaged.
  • Works sometimes → a marginal code. Treat it as broken; it will fail for others.
  • Works for you, not for customers → your camera and lighting are better than theirs.
  • Scans but goes somewhere wrong → not a scanning problem at all.

Diagnose it from the symptom

A scanner works in a fixed order: locate the code, orient it, read the format information, then decode. Where it stops tells you which stage failed.

Five-step flow: locate the finder patterns, orient the image using alignment patterns, read the format information, reverse the mask, then decode the bits with Reed-Solomon correction.
Failures at steps 1 and 2 happen before error correction is available — no correction level rescues them.
SymptomStage that failedLikely causes
No reaction whatsoever, even up closeLocationNo quiet zone; damaged or covered finder pattern; contrast too low
Reacts only at one specific distanceLocationCode too small, or too dense for its size
Hunts for a second or two, then nothingDecodeLogo too large; damage past the correction budget; blurred modules
Works square-on, fails at an angleOrientationCurved surface; version 1 code with no alignment pattern
Works in some lighting, not othersLocationMarginal contrast; glare from gloss or a screen
Works on your phone, not others'AnyMarginal on every axis — no single cause
Scans instantly, wrong destinationNoneWrong data encoded; dead URL; broken redirect
The most useful distinction

"Nothing happens" and "it tries and fails" are completely different problems. Nothing happening means the scanner never recognised there was a code — that's a quiet zone, finder pattern or contrast issue, and error correction is irrelevant. Trying and failing means it found the code and couldn't recover the data — that's size, density, or damage.

Insufficient quiet zone

The most common cause of failures in otherwise perfect-looking codes. The blank four-module margin is how a scanner separates the code from its surroundings, and it's the first thing sacrificed when a layout gets tight.

Two identical QR codes side by side. The left keeps the required four-module blank margin and scans. The right has headline text and rules pushed against its edges, leaving no quiet zone.
Nothing is wrong with the grid on the right. The margin is the entire problem.

Symptom: no reaction at all, even at ideal distance and lighting.
Fix: four modules of blank space on all sides, treated as immovable. When space is tight, shrink the code, not the margin.

Low contrast

Scanners binarise the image before reading it. A pair of colours that look obviously different to you can be nearly identical in brightness — at which point the code isn't there as far as the camera is concerned.

Six real QR codes in different colour combinations with computed contrast ratios, including red on green at 1 to 1 which is invisible to a scanner despite being visually loud.
Red on green: a 1.0:1 brightness ratio. Completely unreadable, and completely obvious-looking.

Symptom: works in bright light, fails in dim light; or no reaction at all.
Fix: dark modules on a light background at 7:1 or better. Watch for contrast lost in CMYK conversion — a pair that passes on screen can fail on paper. See the colour guide.

Damage or obstruction on a finder pattern

Damage anywhere spends the error correction budget, but damage on one of the three corner squares is categorically different — those are how the scanner locates the code at all.

Two identical QR codes with the same amount of damage in different places. The left has a blot over a corner finder pattern and cannot be located at all. The right has the same sized blot in the data area and still scans.
Identical damaged area in both. We decoded these to confirm it — the right one really does still scan, and the left one really doesn't.

Symptom: no reaction at all.
Fix: keep logos, folds, staples, trims and likely wear points clear of all three corners. Wear elsewhere in the code is survivable; wear on a corner isn't.

Too small for the viewing distance

A code sized to the space available rather than the distance it'll be read from. Purely a dimensional mismatch — nothing to do with print quality or design.

Symptom: works if you get close, fails at the distance people actually stand.
Fix: printed width ≈ scanning distance ÷ 10, plus headroom. Concrete targets by medium are in the sizing guide.

Modules too small to reproduce

Related to size but distinct: the code may be big enough overall while individual modules are below what print can hold.

The same QR code at three module sizes with increasing blur standing in for ink spread: 0.8 millimetres stays crisp, 0.4 millimetres is at the practical floor, and 0.2 millimetres merges adjacent modules together.
Ink spread merging adjacent modules. Invisible in the design file, fatal on press.

Symptom: hunts and fails; module edges look soft or merged under close inspection.
Fix: keep printed modules at 0.4 mm or larger; more on absorbent stock. Export vector, and never scale a raster code up in a layout.

Payload too long

A long URL with tracking parameters, or a full vCard, forces a higher version — a denser grid — which shrinks every module at the same printed size.

Two real QR codes drawn at the same printed width. The short redirect URL has comfortably large modules; the long tracking URL drops below the 0.4 millimetre print floor at a 2 centimetre printed size.
Same printed size, different payloads. This is the root cause behind a lot of "too small" failures. Both codes above scan fine from a screen — that is the point. The right-hand one fails in print at 2 cm, where ink spread merges its 0.38 mm modules. Testing on a monitor will not reproduce it.

This catches people out constantly, and it is worth being blunt about: a screen has no ink spread, effectively unlimited resolution at these sizes, and a backlit high-contrast display. It is the most forgiving scanning surface there is. A dense code that works perfectly on your monitor can still be unusable on a business card, and the only way to know is to print a proof at final size and scan that. See testing before printing.

Symptom: visibly dense code; hunts and fails at normal distance.
Fix: shorten the destination, or use a dynamic code so the encoded URL stays short regardless of the real destination's length.

Logo too large or misplaced

The most common self-inflicted failure, largely because the widely published guidance is too generous.

Symptom: hunts and fails (too large), or no reaction at all (on a corner).
Fix: keep coverage at or below ~15% of the code's area, always at level H, never touching a finder pattern. We measured the real cliff at 16–20% — see the logo guide.

Placement over artwork

A code sitting directly on a photograph has no quiet zone and no stable brightness threshold underneath it.

Two QR codes on the same busy photographic background. The first sits directly on the image with no margin or consistent contrast. The second sits on a solid white plate that restores both.
A solid plate fixes both problems at once. A lightened photo fixes neither reliably.

Symptom: no reaction, or wildly inconsistent behaviour depending on where in the frame the code sits.
Fix: an opaque plate behind the code, sized to include the full four-module margin.

Glare and reflective surfaces

Gloss lamination, varnish, foil and phone screens all reflect light directly back into the camera. Glare doesn't degrade a code gradually — at the wrong angle it erases a region of it outright.

Symptom: works at some angles, not others; worse under bright directional light.
Fix: matte stock, or a matte spot varnish over the code area on an otherwise glossy piece. For screen-displayed codes — tickets, boarding passes — tell users to raise brightness and tilt slightly. On foil or metal, print on an opaque matte patch.

Curvature and viewing angle

Scanners correct distortion using alignment patterns, but tolerance runs out on tight curves — and version 1 codes have no alignment pattern at all.

A flat QR code beside the same code geometrically wrapped around a cylinder, where modules compress toward the left and right edges.
Modules compressing toward the edges. Past a point this becomes a resolution failure no decoder can undo.

Symptom: works square-on, fails at an angle or on the curve.
Fix: keep the code centred on the visible face; avoid version 1 on anything curved; use a flag label on narrow cylinders. See packaging and curved surfaces.

It scans fine and still fails

Worth stating separately because it's the most expensive category and no amount of design review catches it:

  • Wrong data encoded. A typo in a URL, phone number or Wi-Fi password. The code works perfectly and delivers something useless.
  • Dead destination. The campaign page was taken down; the code outlived it.
  • Broken redirect chain. An intermediate hop drops parameters or requires a login.
  • Desktop-only landing page. Every scan arrives on mobile.
  • Expired dynamic code. Some free tools disable dynamic codes after a trial period.

All five are prevented by the same habit: test the destination before the code, on a phone, logged out.

Frequently asked questions

Why is my QR code not scanning?

Start with how it fails. If the camera does nothing at all, the code isn't being located — check the quiet zone (four blank modules on every side), the three corner finder patterns, and the contrast. If the camera clearly finds it but can't complete the read, it's a data problem — the code is too small, too dense, or too much of it is covered by a logo or damage. Those two categories have no fixes in common, so identifying which one you have is most of the work.

Why does my QR code work on my phone but not on others?

Because the code is marginal rather than broken, and your conditions are better than average — a newer camera, good light, and you know exactly where to hold it. Scanning isn't binary: a code near its tolerance limit succeeds under good conditions and fails as any of them degrade. Rather than hunting for a single defect, add margin everywhere: make it larger, raise the contrast, shrink the logo, shorten the payload.

Can a QR code stop working over time?

The printed pattern doesn't degrade on its own, but three things around it do. Physical wear accumulates — scuffing, fading, moisture — and eventually exceeds the error correction budget. The destination can disappear if the page is taken down. And a dynamic code stops working entirely if the redirect service shuts down or the code's subscription lapses. Codes on long-lived items like packaging or signage should be checked periodically.

Does laminating a QR code stop it scanning?

Matte lamination is fine and actually helps by protecting against wear. Gloss lamination is the problem: it reflects light straight back into the camera, and at the wrong angle that erases part of the code entirely rather than merely dimming it. If a piece must be gloss laminated, ask for a matte spot varnish over the code area — it's a routine print request and it removes the failure mode completely.

How do I fix a QR code that's already printed?

If it's a dynamic code and the destination is wrong, repoint it — that's the entire point of dynamic codes and it takes seconds. If it's static and you control the domain, you can sometimes redirect the wrong URL to the right one at the server. If the code physically doesn't scan, there is no fix short of reprinting, which is why a physical proof and a dynamic code are both worth the small upfront cost.