Guide
QR Code Not Scanning? Find the Cause by Symptom
Almost every unscannable QR code is one of a dozen specific faults, and which dozen depends on the symptom. A code that has never worked for anybody is a printing problem. A code that worked last month is a destination problem. A code that scans and opens the wrong page is neither. Start by working out which of the three you have — the rest of this is organised that way, in the order that finds the cause fastest.
First, separate the three failures
Ask two questions before touching anything. Has this code ever worked, for anyone? And does the phone react at all — a link preview, a wrong page — or does nothing happen?
Never worked, no reaction: the pattern cannot be read. It is a printing or artwork fault, and the section below covers it.
Worked before, now nothing or an error page: the pattern is fine and the destination is gone. Jump to the third section.
Scans instantly but opens something wrong: neither the code nor the destination is broken; the link is. That is the fourth section.
It has never been readable
The camera cannot resolve the pattern into data. These are the causes, roughly in order of how often they turn out to be the one.
- Too small for the distance. A code read from three metres needs about thirty centimetres; from thirty centimetres, about three. Below roughly half a millimetre per module, phone cameras start to fail.
- Not enough contrast. Dark on light, with a real difference between them. Light grey on white, or a brand colour on a dark background, is the most common design-led failure.
- The quiet zone is gone. The specification wants four clear modules on every side; text, a border or a background image running into the edge removes the boundary the scanner looks for.
- Inverted. Light modules on a dark background reads on some phones and not others — treat it as broken rather than as a style.
- Stretched or upscaled. A small PNG blown up has soft module edges, which fails for the same reason as printing it too small. Print from vector.
- The logo covers too much, or error correction was not raised to compensate.
- The surface fights it: a curved bottle, foil, fabric, or a laminate reflecting the ceiling light straight back into the lens.
It scans for you and not for the customer
This one is worth its own section because the code is usually fine. The difference is the phone, the light or the distance — and you are testing under the best conditions the code will ever meet.
Older cameras resolve less; a scratched or greasy lens resolves less again. A dim room costs you distance, and so does the angle: a code flat on a table read by someone standing over it is being read at a slant.
There is also a software difference. The native camera on both platforms reads QR codes, but not always with the same tolerance as a dedicated scanner app, and an older phone may need the app. If a code works on your new phone and fails on a three-year-old one, the code is too tight, not the phone too old — print it larger.
It worked before and stopped
The pattern has not changed — it cannot. Something behind it has.
- The destination moved or was deleted: the page was reorganised, the file share expired, the campaign landing page came down with the campaign.
- The redirect was switched off. A dynamic code depends on a service forwarding the scan; a lapsed account, a closed one, or a free-plan limit stops every printed copy at once.
- It was a trial. Many free generators hand out a dynamic redirect that stops after a week or two and shows an upgrade page instead.
- The domain was not renewed, or the certificate expired — the phone will refuse or warn rather than open.
- The destination now needs a login. It still works for you because your browser is signed in.
It scans but opens the wrong thing
The code is doing exactly what it was made to do; what it was made to do is wrong. Read the address the phone previews before you open it — that alone identifies most of these.
The commonest cause is the wrong code printed on the wrong material: two campaigns, two branches, one artwork file mixed up at the printer. Compare the preview against what you meant to encode.
After that: a stale cache showing an old version of the page, a link that opens an app rather than the browser because the destination is a deep link, or an http address that redirects somewhere unexpected on the way to https.
If a dynamic code opens the previous destination, the change was made but the redirect has not propagated to that device yet, or the phone cached it. Test in a private window on mobile data.
The five-minute diagnosis
In this order, because each step rules out the largest number of causes for the least effort.
- Scan the printed piece and read the address the phone previews without opening it. If the preview is wrong, the fault is the artwork or the link, not the code.
- Open that address by hand in a private window on mobile data. If it fails there, the destination is the fault.
- Try a second phone, ideally an older one, and a third if the second disagrees.
- Take the printed piece to a bright, even light. If it suddenly scans, the fault is size or contrast, not the code.
- Measure the code and the clear space around it, and compare against the distance it is read from.
- Scan the original digital file on screen. If the file scans and the print does not, the fault entered at production.
- Only then regenerate the code — and if it is static, remember that regenerating produces a different pattern, so anything already printed is unaffected.
FAQ
Frequently asked questions
Why does my QR code work on one phone but not another?
Almost always because the code is at the edge of what a camera can resolve, and the second phone has a slightly older or dirtier lens. The fix is to print it larger rather than to blame the device: a code with margin works on both.
Can a QR code be damaged and still work?
Yes, up to a point. Error correction reconstructs missing modules, and depending on the level a code can survive losing a meaningful part of its area — which is what makes a logo in the middle possible. Damage to a corner marker is different: those are what the scanner uses to find the code at all.
Why does my code scan on screen but not in print?
Because something happened between the file and the paper: it was scaled from a small raster, printed at low contrast, lost its quiet zone in the layout, or landed on a material that scatters the edges. Scan the digital file to confirm it is sound, then look at the production step.
Do I need to regenerate the code to fix it?
Usually not. If the destination is the problem and the code is dynamic, repoint it and every printed copy follows. Regenerating only helps when the pattern itself is at fault — and it produces a new pattern, so the material already printed keeps the old one.
NEXT STEP