QR Code Not Scanning? 12 Causes and How to Fix Each One
Work out in thirty seconds whether the problem is the code, the print, the link, or the phone — then fix it with the matching remedy.

A QR code that does not scan is usually failing for a boring, fixable reason. Thirty seconds of triage tells you which category you are in.

Thirty-second triage
- Does the code scan on screen, at full size, from your own monitor?
- No → the code itself is the problem. Causes 1–5.
- Yes → the design is fine. Move on.
- Does the printed copy scan from 20 cm?
- No → printing or surface. Causes 6–9.
- Yes, but not from the real distance → it is too small. See the size guide.
- Does it scan but land somewhere wrong or broken? → the link, not the code. Causes 10–11.
- Does it work on your phone but not theirs? → cause 12.
The code itself
1. Not enough contrast
Scanners need a clear difference between dark modules and light background. Pale grey on white, or two mid-tone brand colours, will fail — often intermittently, which is worse than failing outright.
Fix: keep a contrast ratio of at least 3:1, and ideally much more. Dark, saturated colours on white are safe. Our generator warns you below 3:1 and runs a scan check on the finished design.
2. Inverted colours (light code on a dark background)
A white code on a black background looks great and fails on a lot of phone cameras, which expect dark-on-light.
Fix: invert it. Put a light panel behind the code, with the quiet zone included, and keep the dark modules dark. A dark surrounding design is fine as long as the code sits in its own light block.
3. The logo is too big
A centre logo covers modules. Error correction can reconstruct roughly 30% of the pattern at level H, but that budget is shared with print damage and glare.
Fix: keep the logo to 20–25% of the code's width, keep it central (the corners carry the finder patterns), and use level H whenever there is a logo. Our tool switches to H automatically and lets you resize the logo while watching the scan check.
4. The quiet zone is missing
The blank margin is part of the code. Crop it, or push text and borders against it, and scanners cannot find the pattern's edges.
Fix: leave 4 modules of clear space on all sides. If a designer has tightened the layout, this is the first thing to check.
5. Too much data
Everything you encode adds modules. A full vCard or a long URL with tracking parameters produces a dense grid that needs more resolution and more size to read.
Fix: shorten the URL, drop optional vCard fields, and lower error correction to M when there is no logo. Our generator blocks payloads too large for a single code rather than producing something unreadable.
Printing and surfaces
6. Printed too small
The most common print failure. The rule: the code should be about one tenth of the scanning distance, and never under 2 cm.
Fix: measure the real distance, divide by ten, round up.
7. Blurry, low-resolution, or upscaled
A small PNG stretched to fill a poster produces soft module edges, and soft edges break decoding.
Fix: print from SVG or PDF, or from a raster file at 300 DPI at final size. Never enlarge a small PNG.
8. Glare, gloss, and lamination
Shiny stock reflects overhead lighting straight into the camera, washing out the middle of the code — where the data is densest.
Fix: matte finish where you can. Otherwise enlarge the code and place it where reflections are less likely, away from spotlights.
9. Curved, textured, or creased surfaces
Bottles, cans, fabric, and anything folded distort the grid. A crease through the middle of a code can kill it outright.
Fix: enlarge it, put it on the flattest available area, keep it away from fold lines, and test on the real object rather than a flat proof.
The destination
10. The link is broken, private, or expired
The pattern scans perfectly and the page fails. Common culprits: a Google Drive file still set to "Restricted", a closed Google Form, a staging URL that only resolves on office WiFi, or a missing https:// making the code read as plain text.
Fix: scan your own code and read the URL it shows. Then open that URL in a private browsing window on mobile data. If it fails there, the link is the problem.
11. The code expired
If it was made with a free trial of a dynamic QR service, the redirect may have been switched off. Everything printed stops working at once.
Fix: check where the code points. An unfamiliar short domain means a third party controls it. Static vs dynamic QR codes explains how to avoid this permanently — including how to keep editable destinations without renting them.
The phone
12. The phone is old, or the camera app does not scan
Built-in scanning arrived with iOS 11 (2017) and Android 10 (2019). Older devices need an app, and some Android skins only scan through Google Lens rather than the plain camera app.
Fix: nothing you can do to the code, but you can help: print the URL in readable text underneath. Anyone whose camera will not cooperate can type it, and it also tells people where the code goes, which measurably increases scans.
How to test properly before a print run
- Scan the on-screen version at full size.
- Print a proof at final size and scan from the real distance.
- Use at least two phones — one iPhone, one Android, ideally one a few years old.
- Test in the real lighting, including dim conditions.
- Test at an angle, not just straight on.
- Confirm the destination opens for someone who is not signed in.
Prevention checklist
- Dark modules on a light background, contrast well above 3:1.
- Quiet zone of 4 modules, completely clear.
- Logo at 20–25% maximum, error correction H when a logo is present.
- Short URL, so modules stay large.
- Vector (SVG or PDF) for print; 300 DPI if raster.
- Size = distance ÷ 10, minimum 2 cm.
- Matte, flat, at a sensible height.
- Readable URL printed underneath.
The QR code generator covers the design half of this list for you: it warns on low contrast, keeps the quiet zone, manages error correction when you add a logo, and decodes the finished image to confirm it scans before you download it. The print half is on you and your printer — so test the proof.
Try the related tools
Related articles

Static vs Dynamic QR Codes: Which Ones Never Expire
Why some "free" QR codes stop working after a trial, how to tell which kind you have, and how to get editable codes without renting them from anyone.
Read article
How to Create a WiFi QR Code for Guests (iPhone and Android)
Let guests join your WiFi by scanning instead of typing a 20-character password — how the format works, how to print it, and the security trade-off.
Read article