You prepared a QR code and it just won't scan—and most of the time the cause is not the code's data itself but the appearance, printing, and shooting conditions. This article organizes the common reasons a code won't scan from the angles of contrast, margin, resolution, dirt, focus, data volume, and the URL, and lays out, accurately, how to fix each one, plus tips for the creator side that keep trouble from happening in the first place.
1. Low contrast or inverted colors
A QR reader relies on the difference in brightness between the light cells (background) and dark cells (modules) to read the code. When that difference—the contrast—is insufficient, the reader cannot tell the module boundaries apart.
- Inverting the colors is a no-go: most readers assume "dark modules on a light background." A light module on a dark background (color inversion) often cannot be scanned, so avoid it.
- Avoid pale color-on-color: light modules on a light gray field and similar schemes with little brightness difference fail easily.
- Avoid confusing colors: combinations that are hard for the camera to distinguish, such as black on red, also lower the scan rate.
How to fix it: make the background white (or a sufficiently light color) and the modules black (or a sufficiently dark color) to maximize contrast. Even when you want to add color, keeping the brightness difference comes first.
2. Insufficient quiet zone (margin)
A QR code needs an empty margin—the quiet zone—on all four sides. By specification, a margin of at least four modules is required around the code.
- When this margin is too narrow, the reader cannot recognize the extent of the code (where the code begins and ends), and scanning fails.
- If surrounding text, borders, images, or other codes touch the code, it likewise becomes unreadable.
How to fix it: even when you are tempted to tighten the design, do not cut the margin. Always leave at least four modules of blank space around the outer edge of the QR code.
3. Low resolution, too small, or print bleed
When each module is too fine and gets crushed together, the reader cannot make out the cell divisions. This happens when the display or print size and resolution are insufficient.
- Too small: printing it too small on a business card or flyer leaves the camera without enough resolution to read it. It needs a size adequate for the scanning distance.
- Low resolution / blurry enlargement: forcibly enlarging a low-resolution image blurs the module outlines. Prepare the source data at high resolution.
- Print bleed / clogging: ink bleed or printing with soft black-white boundaries makes adjacent modules appear connected.
How to fix it: prepare it as large and high-resolution as possible. For print, choose paper and settings that do not bleed, and it is important to render the code's white areas reliably white.
4. Dirt, damage, and the error-correction level
A QR code has error correction, so it can recover even when part of it is dirty, damaged, or missing. How much can be corrected is set by the error-correction level, which comes in four grades: L, M, Q, and H.
| Level | Approx. recoverable | Characteristics |
|---|---|---|
| L | About 7% | Minimal correction. For the same data, the code can be the smallest |
| M | About 15% | A standard balance. Widely used for general purposes |
| Q | About 25% | Suited to dirt-prone environments and codes with logos |
| H | About 30% | The most robust, but the code tends to get larger (denser) |
- Dirt, fading, or creases consume that much of the correction headroom. Once damage exceeds the correction capacity, it becomes unreadable.
- Hiding too much with a logo needs care. Error correction can hide part of the code, but there is a limit to the area you can cover. You must not hide the finder patterns (the large squares in three corners) or their surroundings.
How to fix it: for dirt-prone uses or when overlaying a logo, set a higher error-correction level (Q or H). Note, though, that the higher it is, the more data there is and the denser the code becomes, so balance it against size and verify on a real device.
5. Focus, shake, reflections, and screen glare
Even when the code itself is correct, it won't scan if the shooting conditions are poor. Problems on the camera side are easily overlooked.
- Out of focus / camera shake: being too close, too far, or shooting while moving prevents the camera from focusing. Hold still for a few seconds and let it focus.
- Reflection / glare: when light reflects off glossy paper, lamination, or a glossy display surface, part of the code blows out to white and becomes unreadable. Changing the angle or avoiding the light source helps.
- Screen glare / brightness: when showing a QR on a phone screen, avoid reflections and raise the screen brightness to secure contrast.
- Too dark / backlit: in the dark or against a backlight, there is no brightness difference. Scan under bright, even light.
6. Too much data makes the cells too fine
In a QR code, the more data it stores, the higher the module count (version) and the finer each cell becomes. Cramming in a long URL or text makes the modules dense at the same display size and harder to scan.
- Shorten long URLs: you can reduce the data volume by dropping unnecessary parameters or using a shorter URL.
- Do not overstuff: rather than putting a large amount of text directly into the QR, design it so the code holds a URL and the information appears at the destination, which keeps the code light.
- Along with reducing data, not setting error correction too high (keeping it just sufficient) lowers the module density.
How to fix it: reduce the data volume and give the code a larger display size with the room you save, so each cell becomes easier to read.
7. Wrong, expired, or broken URLs
When "the code scans but won't open," the cause is in the data inside (the URL). The scan itself succeeds, yet it does not reach the intended page.
- Mistyped URL: a code made by hand can become an invalid link from a spelling mistake or a missing
https. - Expired / broken links: an expired short-URL service, a moved or deleted page, or a not-yet-published URL cannot be reached.
- Disabled dynamic QR: a dynamic QR whose destination can be changed later may be disabled by a lapsed service subscription or a settings change.
How to fix it: before publishing, actually open the URL inside the code and check it. When it scans but won't open, suspect the link destination, not the code's design.
Tips for the creator — designing to prevent trouble
Most "won't scan" trouble can be prevented with care at the creation stage. Keep these four points in mind.
- Enough margin: secure a quiet zone of at least four modules on all four sides.
- Enough size and contrast: a size that matches the scanning distance, with dark modules on a light background.
- Appropriate error correction: higher (Q/H) for dirt-prone uses or codes with logos, otherwise a standard M as a guide, balanced against density.
- Verify on real devices: scan the finished product (print or screen) on actual phones and multiple models before publishing.
Frequently Asked Questions (FAQ)
Can a color-inverted QR code (a light code on a dark background) still be scanned?
Most readers are designed on the assumption of dark modules on a light background, so a color-inverted QR code (light modules on a dark background) often cannot be scanned. To ensure it reads reliably, use the standard color scheme of dark (ideally black) modules on a light (ideally white) background, and keep plenty of contrast between the background and the modules. Also avoid pale color-on-color combinations and hard-to-distinguish pairings such as black on red.
How much quiet zone (margin) does a QR code need around it?
A QR code needs an empty margin (quiet zone) of at least four modules (cells) on all four sides. If this margin is too narrow, or if surrounding text, borders, or images touch the code, the reader cannot recognize the extent of the code and scanning fails. Even when you are tempted to tighten things up in the design, do not cut the margin—keep it.
Can I place a logo in the center of a QR code and still scan it?
Because error correction lets the code recover even when part of it is hidden, you can place a small logo in the center. However, there is a limit to how much area you can hide, and hiding too much makes it unreadable. When adding a logo, set a higher error-correction level (Q or H), do not cover the finder patterns (the large squares in three corners) or their surroundings, and always verify scanning on a real device.