When a QR code will not scan, the cause is almost always one of twelve things: a problem with the code's colors, its size, the way it was printed or displayed, the link behind it, or the way the camera is being used. Work through the list below and you will usually find the culprit within a minute or two. Each cause comes with a concrete fix, whether you are the one holding the phone or the one who made the code.
Contrast and color problems
Low contrast. A scanner reads the difference between the dark and light squares, so pale gray on white, yellow on cream, or any pastel-on-pastel combination can fail even when the code looks fine to the eye. The fix is simple: make the dark modules genuinely dark and the background genuinely light. Black on white is the most reliable combination there is, and it is what every scanner is tuned for. If you want brand colors, keep the modules a dark shade and the background near-white, then test on at least two different phones before printing anything.
Inverted colors. A code with light squares on a dark background — white on navy, for example — is the mirror case. Some camera apps handle it, others do not, and dedicated scanners in shops and warehouses are the least forgiving. The fix: flip the scheme so the modules are dark on a light background. If the design demands a dark panel, place a white rounded square behind the code rather than inverting the code itself.
Size and density problems
The code is too small. A widely used rule of thumb is that a QR code should be at least one tenth of the distance you expect to scan it from. A code on a business card, scanned from about 30 cm, should be at least 3 cm wide; a poster read from 3 meters needs a code around 30 cm across. If yours is under that, regenerate it at a larger size rather than stretching the existing image, and reprint.
Too much data makes the pattern dense. A QR code is a grid of squares, and every extra character of data adds squares. A 60-character URL produces a noticeably finer grid than a 15-character one, and a full contact card with a dozen fields denser still. Fine grids fail first on cheap printers, low-resolution screens, and distant cameras. The fix: put less in the code. Shorten the URL, trim the vCard to the fields people actually need, or use a dynamic code that stores only a short redirect. A free generator such as QRCodeMax.Vip will show you the pattern getting visibly simpler as the data shrinks — fewer, larger squares mean far fewer scan failures.
Quiet zone and logo problems
Missing quiet zone. The quiet zone is the empty margin around the code, and the QR specification calls for a margin four modules wide — four times the width of one small square. Designers often crop it away or let text and graphics crowd up against the edge, and the scanner then cannot tell where the code begins. The fix: keep a clear margin of at least four modules on all sides, and never place a border so close that it touches the outer squares.
Oversized logo. Embedding a logo means covering data modules and trusting error correction to fill the gap. Push the logo too large and the code simply stops decoding. As a rule of thumb, keep the logo to about a quarter of the code's width or less, set the error correction level to high when you generate the code, and test a printed copy — not just the on-screen preview — before committing to a print run.
Print and surface problems
Glare or a curved surface. Glossy lamination, picture-frame glass, shiny stickers, and curved objects like bottles turn part of the code into a mirror; the camera sees a white blotch where squares should be. The fixes: choose a matte finish for printed material, place the code on the flattest part of the product, and when scanning a code under glass, tilt the phone slightly or shift sideways until the reflection moves off the code.
Damaged or low-resolution print. Ink bleed on absorbent paper, a fuzzy screenshot enlarged past its limits, a torn label, a thermal receipt fading in the sun — all of these break the pattern. The fix is to reprint from a proper source: export the code as a vector file (SVG) for print, or use a high-resolution PNG at around 300 dpi, which is the usual rule of thumb for print quality. If the code is physically damaged or faded, there is nothing to repair — replace it.
Stretched aspect ratio. Dragging a side handle in a design or document tool stretches the squares into rectangles, and scanners expect squares. This happens constantly when a code is squeezed into a banner or a sidebar. The fix: resize only from the corner handles with the aspect ratio locked, or better, regenerate the code at the exact size you need. Once a code has been distorted, no amount of editing will fix it — generate a fresh one.
When the code scans but nothing happens
Broken link or expired dynamic code. Sometimes the pattern is perfect and the phone reads it instantly — but the destination is dead. The page was deleted, the domain lapsed, or the code was dynamic and the redirect service behind it expired, which is common with free trials. The fix: open the link in a desktop browser first to confirm the problem is the destination, not the code. A static code has the URL baked into the pattern, so you must generate a new code pointing at a working address. A dynamic code can be fixed by renewing the service — or replaced with a static code pointing to a permanent address on a domain you control.
Camera and distance problems
Camera focus. A smudged lens, a cracked screen protector, or a camera pushed closer than its minimum focusing distance will blur the squares just enough to fail. The fixes: wipe the lens (it collects pocket lint remarkably well), tap the code on the screen to force a focus lock, hold the phone steadier or rest it on something, and back up a few centimeters — many phone cameras cannot focus as close as people naturally hold them.
Scanning too close or too far. Too close and the code fills the entire frame with no margin visible, which many scanners refuse to read; too far and the squares melt into gray noise. A practical starting point: hold the phone so the code fills most of the frame but with a clear band of background visible all around, roughly 20–30 cm away for a small printed code, then adjust. Move slowly — the scanner needs a moment to lock on.
A quick troubleshooting checklist
- Dark modules on a light background? If not, invert or recolor.
- Clear margin of at least four modules on all sides?
- At least one tenth of the scanning distance in size?
- Squares still square, not stretched?
- Logo small, error correction set to high?
- Matte surface, no glare, lying flat?
- Printed from a vector file or high-resolution image?
- Link opens in a desktop browser?
- Lens clean, whole code in frame with visible margin?
If you answer no to any of these, you have found your problem.
The key takeaway
Most unscannable QR codes fail for boring reasons: weak contrast, a missing quiet zone, a pattern made too dense by too much data, or a link that no longer exists. Fix the design, print from a quality source, and — above all — test the finished code with a couple of different phones before you print five thousand of them. Ten seconds of testing beats a reprint.