Why QR Codes Fail to Scan (and How to Fix Each Cause)
Codes rarely fail mysteriously. There is a short list of causes, and they are not equally likely. Work through them in this order and you will usually find it within a couple of minutes.
When a printed QR code does not work, the frustrating part is that it gives you no information. It just sits there while somebody waves a phone at it. But codes do not fail randomly — there is a short list of causes, and some are far more common than others.
Work through these in order. The first three account for most real-world failures.
First: is it the code or the destination?
Before anything else, establish which half is broken, because the fixes are completely different.
Scan the code with a QR reader app that displays the decoded text rather than opening it. If the text appears, the code itself is fine and your problem is the destination — a dead page, a broken link, a site that will not load on mobile. If nothing appears at all, the code is the problem and the rest of this article applies.
1. The code is printed too small
By some distance the most common cause. A code that scans on your monitor can be far too small once printed, and it fails completely rather than degrading.
The rule is that a code should be at least one tenth as wide as the distance it is scanned from. A poster read from two metres needs a code about 20cm wide. A menu held at 30cm needs about 3cm. The floor for anything is roughly 2cm.
Fix: measure the real viewing distance, divide by ten, and reprint at that size or larger. Full sizing tables are in what size a QR code should be.
2. The quiet zone has been cropped
Every QR code needs a blank margin — at least four modules — on all four sides so a scanner can find its boundaries. Designers routinely crop this away to save space, or run a border, caption or background image right up to the pattern.
The code looks complete. It is not. Without the margin, edge detection fails and the scanner never recognises there is a code there at all.
Fix: restore a clear margin of about 10% of the code's width on every side. It must be blank — no text, no rules, no decorative frame, no photograph showing through.
3. Contrast is too low, or the code is inverted
Scanners work by distinguishing dark modules from a light background. Two things break that.
Low contrast: mid-grey on cream, navy on black, gold on white, or any brand-palette pairing chosen for looks rather than legibility. It may scan in bright office light and fail in a dim restaurant.
Inversion: a light pattern on a dark background. Some modern scanners handle this; plenty do not. There is no upside worth the risk.
Fix: dark pattern, light background, high contrast. Black on white is ideal. If you need brand colour, use a strong dark tone for the modules and keep the background near-white — and test it in poor lighting.
4. The pattern is too dense for its size
A QR code grows more modules as you add data. A code holding a 120-character tracked URL has a far finer grid than one holding a 20-character link. Printed at the same width, each module is physically smaller — sometimes below what a camera can resolve.
This is why a code can be "big enough" by the 10:1 rule and still fail. Size and density interact.
Fix: shorten what you encode. Drop UTM parameters from the encoded link, trim unnecessary vCard fields, or switch to a dynamic code, which encodes only a short redirect no matter how long the real destination is.
5. Print quality problems
Several print issues produce the same symptom of a code that looks right but will not read:
- Raster art scaled up. A PNG enlarged past its native resolution gives soft, blurred module edges. Always send vector — SVG or EPS.
- Low resolution. A raster code should be 300 DPI at final printed size, not at screen size and then scaled.
- Ink spread. On absorbent stock, ink bleeds and thickens modules until they merge. Newsprint and uncoated card are the usual offenders. Print larger to compensate.
- Stretching. A code must stay square. Any non-uniform scaling destroys it.
- Misregistration. In multi-colour printing, a code built from more than one ink can go soft if plates are slightly out of alignment. Print codes in a single solid colour, ideally black only.
6. The surface fights the scanner
The same file that scans perfectly on flat paper can fail on other materials:
- Curved surfaces — bottles, cups, cans — distort the geometry. Keep the code small enough to sit on the flattest available area, and larger than you would need on paper.
- Glossy laminate and foil reflect overhead lighting straight into the lens. Matt finish scans far more reliably.
- Fabric and textured stock blur module edges. Print larger and raise error correction.
- Behind glass adds reflections. Angle matters more than size here.
- Very dark or transparent substrates eliminate the contrast the scanner needs.
Fix: for any awkward material, print larger than the rule suggests, use matt finish where you can, and test on the real substrate before committing to a run.
7. Lighting and glare
A code can be perfect and still fail in the room it lives in. Direct spotlights on glossy stock create a hotspot that erases part of the pattern. Dim venues push phone cameras into longer exposures and motion blur. Backlit positions leave the code in shadow.
Fix: test in the actual location at the actual time of day. If glare is the problem, change the finish or the angle rather than the code.
8. A logo is covering too much
Logos in the centre work because error correction can reconstruct the obscured data — but only up to a point. Level M recovers about 15% and level H about 30%, and that budget is shared with real-world damage and dirt.
Fix: keep any logo under about 20% of the code's area even at level H, centre it, and give it a small clear margin. Never let it touch the three large corner squares — those are the position markers a scanner looks for first, and covering them is fatal.
9. Damage, wear and obstruction
Outdoor and high-traffic codes degrade. Rain, sun-fade, scuffing, stickers, and posters half-covered by later posters all eat into the pattern. Error correction absorbs some of this, which is exactly what it is for, but it is a budget and it runs out.
Fix: for anything outdoors or handled, use error correction level Q or H, print larger to compensate for the denser pattern, and laminate where practical. Check placements periodically — a code nobody has looked at in six months may have been covered for five of them.
10. The code scans but the destination is broken
If your reader app showed the decoded text earlier, this is where the problem is. Common causes:
- The page has moved or been deleted since the code was printed. With a static code this is fatal — the destination is fixed in the pattern.
- A typo in the URL that nobody caught before print.
- Missing
https://, so the text is read as plain text rather than a link. - The page is not mobile-friendly, or is so slow that people leave before it loads.
- The link needs a login, or is blocked in the country where it is being scanned.
- Wrong format for the type — a Wi-Fi code with a mismatched SSID scans fine and then fails to join. Our Wi-Fi generator covers the exact-match requirements.
This is the failure mode dynamic codes exist to solve. With a static code, a dead destination means a reprint; with a dynamic one, you repoint it and every printed code starts working again.
A checklist before you print
- Print at final size on the real stock and scan from where the reader will stand.
- Test on at least two phones, one of them older.
- Test in the actual lighting the code will live in.
- Confirm the quiet zone is blank on all four sides.
- Confirm the artwork is vector, square, and a single solid dark colour.
- Open the destination on mobile data, not office Wi-Fi.
- Scan the printer's proof, not just your desktop printout.
Most failures are caught by the first two steps. Almost all are caught by all seven.
Generate a clean, print-ready SVG with the correct quiet zone built in — free, no sign-up.
Open the free QR code generatorFrequently asked questions
Why is my QR code not scanning?
In order of likelihood: it is printed too small for the distance, the blank quiet zone around it has been cropped, or the contrast is too low. Check those three first. If a reader app can display the decoded text but nothing opens, the code is fine and the destination is the problem.
Why does my QR code work on one phone but not another?
That is the signature of a code sitting near the edge of readability rather than an outright break — usually too small, too dense, or too low in contrast. Newer cameras and better sensors cope; older ones do not. Increase the size, shorten the encoded data, or raise the contrast.
Can a QR code be too small to scan?
Yes, and it fails completely rather than degrading. A code should be at least one tenth as wide as the distance it is scanned from, with a practical floor of about 2cm. A code holding a long URL needs to be larger still, because the pattern is denser.
Does adding a logo stop a QR code from scanning?
It can. Error correction reconstructs obscured data, but only about 15% at level M or 30% at level H, and that budget is shared with dirt and damage. Keep a logo under roughly 20% of the code's area, centre it, and never let it touch the three large corner squares.
Can I fix a printed QR code that points to the wrong page?
Only if it is a dynamic code, in which case you repoint the redirect and every printed copy starts working again. A static code has the destination fixed in the pattern, so the only fix is a reprint — unless the URL is on a domain you control and can redirect server-side.