Why your QR code isn't scanning
A QR code that will not scan is either a printing problem or a plumbing problem. The printing causes take seconds to check; the plumbing one — a dead redirect — is the one that quietly kills codes that used to work.
The one-minute diagnosis
- Scan a screenshot of the original file. If the digital version scans and the print does not, the problem is physical: size, contrast, margin, or glare.
- If the digital version also fails, the pattern itself is broken — usually over-styling or a logo that ate the error-correction budget. Regenerate with less decoration.
- If it scans but nothing loads, the code is fine and the link is dead. If it was made with a “free” dynamic-QR service, the trial likely ended and the redirect was switched off.
Cause 1: too small for the distance
Cameras need enough pixels of pattern to lock on. The working rule: the code’s printed width should be at least one tenth of the scanning distance. A 2 cm code on a poster read from across a room will never scan, no matter how long the customer hovers. And 2 × 2 cm is the absolute floor even up close — below that, ordinary phone cameras hunt for focus and give up.
Density multiplies the problem. A code holding WiFi credentials or a full contact card packs far more modules into the same square than a short URL does, so give data-heavy codes half again as much space. If you can shorten what the code contains, do — a short clean URL produces the most forgiving pattern there is.
Cause 2: contrast and inversion
Scanners want a dark pattern on a light background. Brand-coloured codes fail when the two tones drift too close — mid-grey on white, orange on yellow, anything pastel on anything pale. And inverted codes (white pattern on a dark card) fail outright on many phones: plenty of camera apps simply do not try the inverted reading.
Quick test: squint at the code, or photograph it and drop the saturation. If the pattern does not jump out in black-and-white, a camera will struggle too. Style the corners and shapes if you like — but keep the tones far apart and the background lighter.
Cause 3: no quiet zone
The white margin around a QR code is not decoration — it is how the scanner finds the code’s edges. Designs that crowd text, borders, or background art right up against the pattern routinely break scanning. Leave a margin of at least four modules (roughly the width of one of the three corner squares) clear on every side, in the same light colour as the code’s background.
Cause 4: over-styling and logos
QR codes survive damage because of built-in error correction — the pattern carries redundancy, so a scratch or a centred logo can be reconstructed around. But that headroom is a budget: a big logo, heavy corner styling, and rounded custom modules can spend it all, leaving nothing for real-world wear. If a styled code fails while its plain version scans, remove decorations one at a time until it recovers, and always re-test after styling.
Cause 5: glare, curves, and wear
- Glossy laminate under a ceiling spotlight reflects a white stripe straight across the pattern. Matte lamination scans identically and glares far less.
- Curved surfaces — bottles, mugs, sleeves — bend the pattern. Keep codes on the flattest face and print them smaller than the flat area, never wrapping an edge.
- Fading and scratches lower contrast over months in sunlight. The code has not “expired” — it has worn. Reprint from the original file and it works again.
Cause 6: the code scans, but the link is dead
This is the failure that confuses everyone, because the camera reads the code perfectly — and then the phone lands on an error page, a “this code has expired” notice, or a stranger’s upgrade prompt. It means the code is dynamic: it points at a redirect service, not at your actual page, and the service has stopped forwarding. Free trials ending is the classic cause — printed menus and flyers die in bulk the day the plan lapses. Worth checking the other meter too: if the plan is current and the code still lands on an upgrade prompt, you have probably hit a monthly scan cap, which fires on the busiest day rather than a predictable one.
There is no repair for a printed dynamic code whose service is gone; the middleman’s address is baked into the pattern. The durable fix is to regenerate the code as a static one, where your URL itself is encoded in the pixels. No service, no account, nothing to lapse — if the destination page is up, the code works. Full explanation: do QR codes expire?