Why Won't My QR Code Scan? The Real Causes and How to Fix Each One
Most QR codes fail for one of two reasons: the code is printed too small for the distance people scan it from, or it does not have enough contrast (it needs a dark code on a light background). Check those two first, before anything else.
I built a free QR code tool, which means I have watched a lot of codes fail. It is almost always one of a short list of causes, and you can usually catch it before you waste a print run. Here they are in rough order of how often they turn out to be the real problem, each with the exact fix. Work down from the top and the answer is usually in the first two.
Your code is too small for the scan distance
You know this one when the code looks fine on screen but nobody can scan it off the printed piece, or people have to lean in close and hold the phone dead still to catch it.
A phone camera can only read a QR code if it can make out the individual squares (called modules). Print it too small for the distance people stand at and the camera cannot resolve them. Nothing is wrong with the code. It is just too small to read from where people are standing.
Fix: use the 10:1 rule. For every 10 units of scanning distance, make the code 1 unit wide. A code read from 10 inches away should be about 1 inch wide. A poster scanned from 10 feet needs a code around 1 foot wide. Add 20 to 30 percent if the lighting is poor or the surface curves. Never go below about 0.8 inches (2 cm) for anything printed. Full sizes by use case are in my guide on how big a QR code should be for print.
Low contrast or inverted colors
This is the number one killer, so if the code is a decent size, check this next.
Symptom: a pale or light-colored code, a code sitting on a busy or dark background, or a reversed code with light squares on a dark field. A few phones read it, most refuse.
Scanners find a code by measuring the difference in brightness between the dark squares and the light background. The standard (ISO/IEC 18004) is built around dark modules on a light background. Flip that (light squares on a dark field, also called an inverted code) and many built-in iPhone and Android camera apps will not see it at all. Low contrast fails the same way: a light gray code, or a brand color that sits too close to its background, does not give the scanner enough of a difference to read.
The fix is simple: dark code on a light background, never the reverse. Keep the contrast strong (dark navy or black on white or a pale tint is safe). If your brand is dark, resist the urge to invert the code to match. Drop a normal dark-on-light code inside a light box or badge instead. My tool checks contrast and warns you before you download if the colors you picked are inverted or too close to scan.
No quiet zone (the missing border)
Here the code scanned fine as a file, then quit the moment it got placed tight against text, an image, or the edge of the page.
The plain border around a QR code is not decoration. It is part of the code. Denso Wave, the company that invented the format, requires a blank margin four modules wide on all four sides. That empty space is how the scanner finds where the code begins. Crop it off, or let a design element crowd right up to the edge, and the scanner can miss the code before it ever tries to read it.
Fix: leave a clear quiet zone around the code, at least the width of four of its own squares, and keep that space empty. When you drop the code into a layout, do not scale the box so tight that it eats the margin. If you cropped the image yourself to clean it up, re-export it with the border intact.
A logo covering the wrong part of the code
Symptom: the code scanned fine, then you (or a designer) dropped a logo into the middle, and now it is unreliable or dead.
A QR code can survive part of its area being covered, thanks to built-in error correction. Denso Wave defines four levels: L recovers about 7 percent of the data, M about 15 percent, Q about 25 percent, and H about 30 percent. A center logo spends part of that budget. Two things break a code here: a logo that is too big, and a logo (or heavy styling) that touches one of the three corner squares, called finder patterns, that the scanner uses to lock onto the code. Cover a finder pattern and the code will not scan, full stop.
Fix: keep a center logo small (roughly 20 to 25 percent of the code area is the safe working limit) and keep it in the center, well clear of all three corners. A code with a logo also needs a higher error correction level to make up for the covered area. My tool raises the error correction automatically when you add a logo, so the pattern keeps enough room to be read. For the exact numbers, see how much of a code a logo can safely cover.
Blurry printing, glare, curves, and wear
Once the design is right, the physical print is the next place codes die. Three related problems:
Blurry or pixelated print. The squares come out soft and fuzzy with no clean edges, usually from a low-resolution PNG or a JPEG stretched up to print size. JPEG compression smears the edges between squares, and the scanner cannot tell where one ends and the next begins. Export a vector SVG (it stays sharp at any size) or a high-resolution PNG, print at 300 DPI or higher (600 DPI for small codes), and never save a QR code as a JPEG.
Glare, lamination, and curved surfaces. It works on flat paper, then dies on a glossy sticker, a bottle, or a laminated menu sitting under a light. Reflections wash out the contrast, and a tight curve distorts the squares. Pick a matte finish where you can, keep codes off sharp curves (or size them up to compensate), and test under the actual lighting the code will live in.
Damage, wrinkles, and fading. An older or well-handled code slowly stops scanning as scratches, folds, sun-fading, and dirt eat past the error-correction budget until there is not enough left to recover. For anything outdoors or heavily handled, print at a higher error correction level so the code tolerates some abuse, and reprint once they start to fade.
The code scans but nothing loads (and how to test)
This last one is different. The phone reads the code instantly and shows a link, but the page is dead, throws an error, or lands somewhere wrong.
Now the QR code is fine. The destination is the problem. Two common cases. First, the URL is broken (a typo, a page that moved, or a link that was never live to begin with). Second, and this one stings: the code was a dynamic code from a paid service, and the subscription lapsed or the account closed, so the redirect it pointed through is gone. The printed code still scans. It just leads nowhere, and you cannot fix it without a reprint.
Fix: open the exact link in a browser and confirm it loads before you print anything. To avoid the second problem for good, use a static code, which has the destination written straight into the pattern with no middleman that can expire or bill you. That is what my tool makes: make a fresh static code the right way.
The test-before-you-print routine. Run this every time, on the real exported file, not the on-screen preview:
- Scan the actual file (or a test print at final size) with an iPhone and an Android phone, using each phone's built-in camera app.
- Scan from the real distance people will use, in similar lighting.
- Confirm the link opens the correct page.
- If it is going on a curved, glossy, or outdoor surface, test one real sample there before the full run.
Two phones, real distance, real surface. That five-minute check is the difference between a code that works and a box of reprints. More walkthroughs are in the rest of the QR guides.
FAQ
Why won't my QR code scan?
Almost always one of a few things: it is printed too small for the distance people scan from, it does not have enough contrast (it needs dark squares on a light background), the blank border around it got cropped, a logo is too big or covering a corner, or the print is blurry. Check size and contrast first, since those two cause most failures.
Why is my QR code not working even though it looks fine on screen?
Looking fine on a screen and scanning off a printed piece are different tests. The usual culprits are size (too small for how far away people stand), a cropped quiet zone once it was placed in a layout, or a low-resolution or JPEG export that went blurry at print size. Test the actual exported file, not the preview.
How do I fix a QR code that won't scan?
Work down the list in order. Make it bigger (about 1 unit wide for every 10 units of scan distance), use a dark code on a light background, leave a clear blank border, keep any logo small and centered away from the corners, and export a vector SVG or high-resolution PNG. Then scan the real file on two phones before you print.
Why does my QR code work on some phones but not others?
That points to a code sitting right at the edge of readable: low contrast, an inverted (light-on-dark) design, a slightly-too-large logo, or a size that is marginal for the distance. Better cameras and scanner apps forgive more, so they read it while stricter built-in camera apps fail. Fix the underlying issue rather than relying on the phones that happen to work.
Can a QR code wear out or expire?
A static code (destination written into the pattern) never expires, but the printed image can physically wear out. Scratches, folds, sun-fading, and dirt slowly eat past the error correction until it stops scanning. A dynamic code is different: it can stop working if the paid service behind it lapses, even though the printed image looks perfect.
Does adding a logo stop a QR code from scanning?
Not if you do it right. Error correction lets a code survive part of its area being covered, so a small logo (about 20 to 25 percent of the area) in the center is safe, as long as the error correction level is raised to match and the logo stays clear of the three corner squares. A logo that is too big, or one that touches a corner, will break the scan.
Make a fresh static code
QR Codes Made Easy builds a clean static code and warns you before you download one that won't scan. Free, no account.
Build your QR code