Why your QR code won't scan
Last updated 16 September 2026
A QR code either scans or it does not, and when it does not, the cause is usually one of about six things. Here they are in the order I see them, easiest fix first.
1. It is too small for the distance
This is the big one. A code that fills your monitor looks generous. The same code printed on a business card is a thumbnail. Phones need the whole code in frame, in focus, and the modules need to be big enough to resolve.
The rough rule: the scan distance should be about ten times the width of the code. A 2cm code works at 20cm. If you want someone to scan it from two metres, you need a 20cm code. Nothing else on this list matters if the size is wrong.
2. Low contrast between code and background
Dark modules on a light background is what scanners expect. Invert it and many phone cameras still cope, but plenty of older or cheaper scanner apps will not. There is no upside to being clever here.
The same applies to colour. A mid-blue on mid-green can look fine to you and sit well under the scanner's threshold. If you want colour, keep the contrast ratio high and test it before you print a thousand of them.
3. Modules rendered unevenly
This happens when a code is scaled. The modules are supposed to be crisp squares at exact pixel boundaries. If the image is resized by a lazy algorithm, some modules end up a pixel wider than their neighbours. The grid stops being a grid.
Fix: download and use the PNG or SVG at its native size, or scale by whole numbers. Do not screenshot it. Do not let a word processor resize it by dragging a corner. A screenshot of a QR code is a resampled QR code, and it fails more often than people expect.
4. Damaged or covered
QR codes carry error correction, so a scratch or a sticker does not necessarily kill them. That tolerance is limited. Covering a corner is usually survivable. Covering the three big squares in the corners is not, because those are the position markers the scanner uses to find the code in the first place.
If you are putting a logo in the middle, use high error correction and keep the logo small. Under a quarter of the width is safe. Half the width is asking for trouble.
5. Glare, curve, or a bad angle
A code behind glass under a downlight is harder to scan than the same code on paper. A code wrapped around a bottle or a pillar is distorted from every angle except one. A code stuck on the inside of a window at night has no light behind it.
These are placement problems, not code problems. Test in the real location, at the real time of day, with a real phone. A code in a shop window that only scans in daylight is a bug you will not find at your desk.
6. The payload is wrong or too long
If the code scans but goes nowhere, the content is the issue. Common causes: a URL without the scheme so the phone does not know it is a link, a Wi-Fi password containing a character that needs escaping, or a vCard field with a stray comma.
If the code scans and shows nothing at all, the content is probably too long for the version, and the code was generated malformed. Shorten the payload and generate again.
Testing that actually tells you something
- Use two phones, one old and one new. The old one is your worst case.
- Test the printed proof, not the screen. Ink on paper is less contrasty than a display.
- Test at the intended distance, not by holding the phone against the page.
- Test in the intended light, including at night if the code will be seen then.
- Scan it yourself before anyone else does. It takes ten seconds.
If you have been through all six and it still fails, generate a fresh code with a shorter payload. It costs nothing and rules out the whole category of generation problems.