Kit-Bin
Donate

← All guides

Why Won't My QR Code Scan?

A QR code either works or it doesn't, there's no "sort of scans." When one fails, it's almost always one of five specific, physical problems, not some vague bad luck. Here's how to tell which one you're looking at, and how to fix it.

1. The quiet zone got cropped

Every QR code needs a blank margin around it, called the quiet zone, so a scanner can tell where the code's pattern starts and stops against its background. It's not decorative padding, it's part of the spec: a scanner's detection algorithm actively looks for a clean transition from empty space to the finder patterns at the corners. Crop the code tightly to fit a logo, a flyer layout, or a business card and you can cut directly into that margin, and the scanner can fail to detect the code at all, even though every module is still visually intact.

Fix: keep a margin of at least four modules' width of empty space on all four sides. When in doubt, leave more room than looks strictly necessary.

2. Poor contrast or inverted colors

Scanners are built expecting dark modules on a light background, that's the default every camera-based scanning library is tuned for. A code styled with light modules on a dark background, or one printed with insufficient contrast between the two colors (a pale gray on white, for instance), can fail to register at all, or scan unreliably depending on lighting. Some newer scanning apps handle inverted codes fine, but plenty of built-in camera scanners still don't, so an inverted code is a real compatibility risk, not just a style choice.

Fix: stick to dark modules on a light background unless you've specifically tested the inverted version against the scanners your actual audience uses.

3. Printed too small for the scan distance

A QR code sized correctly for a phone screen at arm's length doesn't scale down safely to a tiny flyer someone's expected to scan from a few feet away. As a rough rule of thumb, the code needs about one unit of physical size for every ten units of intended scan distance, a code meant to be scanned from 3 feet away needs to be roughly 3-4 inches across. Shrink it below that and the camera can't resolve individual modules clearly enough to distinguish them, especially at the denser higher versions used for longer URLs.

Fix: size the printed code for the distance people will actually stand from it, not the size that looks proportionate on the page layout.

4. Pixelation from stretching a low-res image

A QR code exported as a small PNG and then stretched up to poster size doesn't scale cleanly, it gets rasterized, meaning the sharp module edges the scanner relies on turn into blurry, jagged approximations as the image is upscaled. Those blurred edges corrupt exactly the fine detail a scanner needs to tell one module boundary from the next, especially at higher versions where modules are already small relative to the whole grid.

Fix: for anything printed larger than a business card, generate or export the code as SVG rather than a fixed-resolution PNG, SVG is vector-based and scales to any size with perfectly sharp edges. If you're stuck with a bitmap PNG that needs to go larger, resize it up front at the target print resolution rather than letting a print program stretch it blindly, or convert an SVG version with SVG to PNG at the exact pixel dimensions you need.

5. A logo or custom styling covers a finder pattern

A logo dropped in the center of a QR code is usually fine, that area typically overlaps redundant data the error-correction budget can absorb (see how error correction works). A logo, rounded corner treatment, or color overlay placed on or near one of the three corner squares is a different problem entirely, those finder patterns are how a scanner locates and orients the code in the first place, and damaging one isn't something error correction can compensate for the way it can a few missing data modules in the middle of the grid.

Fix: keep any logo or decoration centered and small, well clear of all three corner squares, and raise the error-correction level to Q or H before adding one, so there's more redundancy to spare.

Generating a code that avoids all four

Generate a QR code entirely in your browser, with the quiet zone and contrast handled correctly by default.

Written by the Kit-Bin teamPublished Spotted an error? Tell us