Why Your QR Code Isn't Scanning: 10 Fixes, Ranked

You printed the flyer. The code looked perfect on screen. Three people have held a phone over it. Nothing happens.
A QR code that is not scanning is almost always one of ten problems. Start with the first three: no quiet zone, printed too small, or a destination URL that is far too long. Work down the list in order.
Why is my QR code not scanning?
| # | The cause | What goes wrong |
|---|---|---|
| 1 | No quiet zone | The scanner never finds the code |
| 2 | Too small for the distance | The camera cannot resolve modules |
| 3 | Too much data inside | The same blur, self-inflicted |
| 4 | Poor colour contrast | Dark and light look alike |
| 5 | A logo over a corner | Corner patterns have no backup |
| 6 | Glare from gloss or glass | A bright patch erases a region |
| 7 | A curved or creased surface | The sampling grid bends |
| 8 | Low print resolution | Module edges smear together |
| 9 | The phone is too close | The lens cannot focus |
| 10 | The destination is dead | The scan worked, the link did not |
That order is our own judgement, not a measured study.
Fixes 1 to 3: start here
1. The quiet zone is missing
Every QR code needs clear space around it: the quiet zone. ISO/IEC 18004, the QR standard, says the symbol shall be surrounded by one. Denso Wave, the inventor, puts it at four modules — four of the small squares.
The scanner finds a code by measuring dark and light runs across its three corner patterns. Crowd it against text and the measurement breaks. Decoding never starts, so error correction cannot help.
Fix: clear space equal to four modules on every side.
2. It is too small for the reading distance
Nielsen Norman Group's 2024 QR code guidelines give a rule of thumb: for every 10 cm of distance, add 1 cm of width. So a code read from 2 m wants about 20 cm.
It is a heuristic, not a standard: ISO/IEC 18004 sets no physical size at all. It also ignores module count, so it undersizes dense codes.
Fix: measure the real reading distance, then size up. The QR code size guide has widths per placement.
3. There is too much data inside
A longer URL needs more modules, packed into the same printed area.
A 22-character short link needs a 29-module grid at the highest error correction level. A 100-character campaign URL with UTM tags needs 57. At the same printed width, each module is about half as wide, and much harder for a camera to read.
Fix: shorten the destination before you generate the code. That is the real reason short links scan better. It has nothing to do with looks.

Fixes 4 to 8: colour, printing and surface
4. The colour contrast is poor
Black on white is the safe default. Print quality is graded under ISO/IEC 15415, which measures Symbol Contrast — the reflectance gap between the lightest and darkest module. Below 20% it grades F.
WCAG contrast ratios are the wrong tool here. They describe screens, not ink.
Many fixed scanners, at tills and ticket gates, use red or infrared light. Red, orange and yellow reflect it, so they read as blank. A red code on white paper fails there, though your phone reads it fine.
Fix: dark, dull ink on a plain light background.
5. A logo covers a corner
A QR code has three corner patterns, not four. These finder patterns tell the scanner where the code sits and which way up.
None of them carry error correction. Cover one by any amount and the code is dead, at every correction level. The centre is different: that part is data, and data can be rebuilt.
Fix: keep logos, stickers and price labels off all three corners. More in putting a logo in a QR code.
6. Glare from gloss or glass
Gloss lamination, glass and plastic menu sleeves throw a bright highlight into the camera. In that patch the scanner sees white where modules should be.
Fix: ask for a matte finish. Behind glass, move the code to eye height, away from a lamp.
7. A curved or creased surface
Bottles, cups and folded flyers bend the grid. The scanner samples each module centre against a straight grid, and a curve drifts them off the real ones.
Alignment patterns correct exactly this, and the smallest QR code, 21 modules across, has none.
Fix: choose the flattest panel you have.
8. The print resolution is too low
A code blown up from a small PNG has fuzzy module edges before it reaches the press. Ink spread blurs them further.
Denso Wave asks for at least four printer dots per module. In practice, generate at 300 DPI or more at final size.
Fix: regenerate at the size it will be printed.

Fixes 9 and 10: the phone and the destination
9. The phone is held too close
This one works backwards. Modern phone cameras have big sensors and long minimum focus distances, around 12 to 15 cm on some models. Lean in on a small code and the lens cannot focus.
Fix: step back, not closer. If a code needs a phone at 5 cm, the code is too small.
10. The scan worked, the destination is dead
Sometimes the phone reads the code and opens nothing useful. That is not a scanning failure.
A printed QR code cannot expire. The standard has no expiry field and no counter. What dies is the destination page, the redirect, or the account that owns it.
Fix: scan it yourself and read the URL your phone shows. If that short link now 404s, the print is fine and the redirect needs repointing — the difference between static and dynamic codes. A clik.so QR code is built from an editable short link, on the free plan too.
Why raising error correction often makes things worse
Most guides tell you to pick level H. That is backwards more often than you think.
The four levels restore 7%, 15%, 25% and 30% of a code's codewords, says Denso Wave. A codeword is a block of eight modules.
More recovery means more to store, so the grid grows. At a fixed width, a bigger grid means smaller modules. A 22-character short link needs 25 modules at level M and 29 at level H. Printed 30 mm wide, each module shrinks from about 1.20 mm to 1.03 mm.
So H can scan worse than M on a small, clean print. Denso Wave notes that M is the level people pick most often. Save H for logos and rough surfaces.
No error correction level fixes causes 1, 5 or 9. Those fail before decoding begins.
FAQ
Does a white-on-black QR code work?
Sometimes. The standard allows reflectance reversal, so light-on-dark is valid. The catch is decoder support, which is optional. ZXing, the decoder behind many scanner apps, skips inverted codes by default. Most phones cope; shop scanners often do not.
Will higher error correction rescue a code that will not scan?
Only if the damage is scuffing or wear inside the data area. It cannot help with a missing quiet zone or a covered corner: those fail before decoding starts.
How small can a QR code be?
There is no official minimum. ISO/IEC 18004 defines modules, not millimetres. Denso Wave gives 3.57 mm as an industrial printing floor, no use for a menu. Nielsen Norman Group suggests at least 2 cm by 2 cm.
Check yours before it goes to print
The free QR code generator needs no account. Shorten the destination first, then paste the short link into it, so the payload stays small and the modules stay big.
Print one at final size, on the real material, and scan it with two phones before you order two hundred.

