You hold your phone over the code on a menu, a parcel label or a poster, and nothing happens. No banner, no notification, just the camera looking at a square of black and white. Ten seconds later you feel slightly ridiculous and start moving the phone around at random.
Almost every one of these failures comes down to nine causes, and you can work through the whole list faster than you can find someone to ask. The first job is to find out whether the fault is on your side of the camera or the other one.
The 30-Second Triage
Before you troubleshoot anything, run one test. Open a QR code you know works, on a laptop screen or another phone, and point your camera at it.
| Result | What it means | Where to look |
|---|---|---|
| Known code scans, target code does not | The code is at fault | Print quality, size, contrast, quiet zone |
| Nothing scans at all | Your phone or its settings | Camera settings, lens, focus, case |
| Code scans but the page fails | Neither, the link is dead | Expired dynamic code, moved page, no signal |
That single test saves you from cleaning a lens for two minutes when the real problem is a poster that was printed at 40 percent scale.
Causes 1 to 5: Your Phone
1. QR scanning is switched off
The iPhone camera reads QR codes through a setting that can be turned off, and plenty of people turn it off years ago and forget. Go to Settings, Camera, and check that Scan QR Codes is on. On Android the equivalent lives in the camera app settings, sometimes labelled Google Lens suggestions or Scan QR codes.
If the setting is on and still nothing appears, force close the camera app and reopen it. A camera session that has been running in the background for a long time occasionally stops offering the scan banner until it restarts.
2. You are too close, or too far
This is the single most common technique error. Phone cameras need a minimum focus distance, and holding the phone right against a small code puts it inside that distance, so the image never sharpens enough to decode.
Start at about 20 to 30 centimetres and move slowly. For a large code on a wall or a window, step back rather than forward: a big code read from half a metre works, the same code read from 5 centimetres does not. Keep the phone still for a full second so autofocus can settle. Constant hand movement is why the code that eventually scans always seems to scan when you give up and hold still.
3. The whole code is not in frame
A QR code needs all three big corner squares, the finder patterns, plus the quiet zone around the edges. Crop off a corner or zoom in so tightly that the white margin disappears and decoding fails even though the picture looks fine to you.
Frame the entire square with a visible margin of background around it. If the code is on a curved surface such as a bottle or a coffee cup, rotate the object so the code is as flat as possible before you try again.
4. Light, glare and reflections
Two opposite problems produce the same result. In dim light the camera raises exposure, the image gets noisy and the small modules smear together. Under a bright light or behind glass, a specular reflection wipes out part of the pattern entirely.
For dark places, turn on the flashlight from Control Centre before you open the camera. For glare, do not add light. Change the angle instead. Tilt the phone 15 to 20 degrees so the reflection moves off the code, or move your own shadow over it. QR decoding tolerates a surprising amount of perspective distortion, so an angled shot is usually fine.
5. A dirty lens or a case in the way
Pocket lint, a fingerprint or a smear of sunscreen turns every close subject into a soft blur, and a QR code is a close subject with fine detail. Wipe the rear lens on a cloth, not on your shirt.
Thick cases cause a subtler version of the same problem. A raised camera bezel can vignette the corner of the frame, and a stick on lens protector that has scratched will scatter light at exactly the wrong scale. If your camera struggles with close detail generally, the case is a fair suspect.
Causes 6 to 9: The Code
6. Printed too small for the reading distance
The practical rule for printed codes is that the code should be roughly one tenth of the distance it will be read from. A code you scan at arm's length, around 30 centimetres, wants to be about 3 centimetres square. A code on a shop window read from 3 metres needs to be about 30 centimetres across.
Most print guidance treats 2 by 2 centimetres as the smallest usable size for a phone camera, and codes below that fail regularly even in good light. If you are looking at a code the size of a postage stamp on a receipt, it is not you.
7. No quiet zone
The quiet zone is the blank margin around the code, and the specification asks for four modules of clear space on all four sides. A module is one of the small squares that make up the pattern, so on a dense code that margin is small in absolute terms and very easy for a designer to delete.
Codes butted straight up against text, a photo edge or a coloured background block often fail on the first try and scan only from an unusual angle. There is nothing you can do about it as a scanner except try to isolate the code, for example by covering the busy area next to it with a piece of paper.
8. Low contrast, inverted or over-designed
QR decoding needs dark modules on a light background. Three design decisions break it:
- Inverted colours. Light modules on a dark background fail on many scanners, because most decoders assume dark on light.
- Weak contrast. Mid grey on light grey, or a dark blue on black, may look elegant and still leave too little separation to threshold reliably.
- Heavy customisation. A logo dropped in the middle is fine within limits, because error correction can rebuild lost data. Push past that limit, round every module, or run a gradient across the pattern, and you have spent the entire error correction budget on decoration.
Error correction levels are the reason some decorated codes still work. Level L recovers about 7 percent of the data, M about 15, Q about 25, and H about 30. A code printed at level H survives a logo and a coffee stain. A code at level L survives neither.
9. Damage, wear and screen problems
Physical codes wear out. Parcel labels get scuffed, restaurant table stickers get scrubbed with cleaner every night, and outdoor posters fade in sun and rain. Fading hurts contrast, and scratches through the finder patterns are usually fatal, since those three corner squares are how the decoder locates and orients the code in the first place.
Codes displayed on a screen have their own failure mode. Low brightness, an aggressive blue light filter or a matte screen protector can all push contrast below the threshold. Turn the brightness up before you show a boarding pass or a ticket to a scanner.
When the Code Scans but the Link Fails
If your phone shows a URL banner and the page then fails, the decoding worked perfectly. What you have is a dead destination, and it is worth knowing which kind.
| Type | How it stores the link | Why it dies |
|---|---|---|
| Static | The URL is encoded in the pattern itself | Only if the page moves or goes offline |
| Dynamic | Encodes a short redirect the provider controls | Expired plan, deleted campaign, provider shut down |
Dynamic codes are convenient because you can change the destination after printing, and that convenience is exactly what makes thousands of printed codes stop working when a subscription lapses. For anything printed to last, on packaging, signage or equipment labels, a static code pointing at a URL you control is the durable choice. Our guide to making a QR code for free walks through both types and when each one is worth it.
One more possibility: the link resolves fine but you have no data connection. A code in a car park basement or on a plane will decode and go nowhere. That is not a QR problem either.
A Note on Codes You Should Not Force
If a code fails and something about the situation feels off, a sticker layered over the original on a parking meter, a code on an unexpected letter, a poster promising a refund, stop trying to make it work. Overlaid stickers on public codes are a standard scam technique, and persistence is precisely what the attacker is counting on. Our guide on spotting a quishing scam covers what to check before you tap any decoded link.
If You Are the One Printing the Code
Most unscannable codes in the world were broken by the person who published them. Five rules prevent nearly all of it:
1. **Size for the reading distance.** One tenth of the distance, and never below 2 centimetres square in print.
2. **Keep the quiet zone.** Four modules of clear space, all four sides, no exceptions for layout.
3. **Dark on light, high contrast.** Test any coloured version in greyscale. If it looks weak there, it will scan weakly.
4. **Use error correction level Q or H if you are adding a logo.** Then keep the logo under the recovery budget.
5. **Test the final printed piece.** Not the file on screen. Print it at the real size, on the real material, and scan it with an old phone in poor light. That is the worst case your customers actually have.
Shorten the URL before you encode it, too. Fewer characters means a lower module count, larger individual modules at the same physical size, and a code that reads faster from further away.
Where a Scanner App Fits
The stock camera is fine for a healthy code in good light. It is deliberately conservative, because it is a camera first, and it gives you a single banner with no history and no help when the code is marginal.
Smart QR & Barcode Reader helps in the cases the camera app handles poorly. You can scan from a photo, which is the fix when a code is on a screen you cannot hold still or on a label you photographed earlier. It keeps a scan history, so a code you scanned last week is still there when the printed copy is gone. It also reads the linear barcode formats the camera app largely ignores, and it can generate codes, which is useful when you want to test your own before printing a thousand copies. If you want the background on the formats themselves, our barcode versus QR code comparison explains what each one can carry.
The limits are worth being straight about. No app can decode a code that is physically damaged through its finder patterns, printed at half the size it needed, or missing its quiet zone. Software can improve thresholding and give you more attempts. It cannot invent data that was never printed. And no scanner makes a suspicious link safe: reading the destination before you tap is still your job. For the basics of the built in flow, see our guide to scanning QR codes on iPhone.
The Bottom Line
Work the list in order. Check the camera setting, back off to 20 or 30 centimetres, hold still for a second, frame the whole code with its margin, add light or change the angle, wipe the lens. If a known good code scans and this one does not, stop blaming your phone: the code is too small, too faint, too damaged or too decorated, and no amount of waving will fix that.
And if you print codes, print one, take it outside, and try to scan it with the oldest phone in the office. That five minute test prevents the most expensive version of this problem, which is discovering it after the run has shipped.