Why is my QR code not scanning
Tools Nimbus is a free, no-signup developer toolkit that runs entirely in your browser, so your data is never uploaded to a server. A QR code that will not scan is almost always one of nine problems: too small, too dense, low contrast, inverted colors, a missing quiet zone, blur, a dead redirect, a typo in the URL, or screen glare. This guide walks each fix; you can regenerate a clean code in seconds with the Tools Nimbus QR Code Generator.
Last updated June 2026
First, find out which kind of failure you have
There are two different failures that people call "not scanning," and they have different causes. If the camera never reacts at all, the scanner cannot read the pattern: a physical problem with size, contrast, focus, or layout. If the camera reads the code but the destination is wrong, dead, or shows someone else's error page, the pattern is fine and the problem is the data inside it. Work out which one you have before changing anything, because the fixes do not overlap.
The nine causes and fixes
| Symptom | Cause | Fix |
|---|---|---|
| Camera never reacts | Code printed too small for the scanning distance | Minimum 2 x 2 cm; use a 10:1 distance-to-size ratio |
| Camera never reacts | Code too dense (very long URL) | Shorten the URL so the module grid is coarser |
| Scans erratically | Low contrast between modules and background | Dark modules on a white or very light background |
| Camera never reacts | Inverted colors (light modules on dark) | Re-export with standard dark-on-light polarity |
| Camera never reacts | No quiet zone (cropped tight) | Leave at least 4 modules of empty margin on all sides |
| Scans up close only | Blurry print or upscaled low-resolution image | Export at full resolution; print sharp, never stretch a small PNG |
| Scans, then error page | Dynamic code whose redirect expired | Generate a static code that encodes your real URL directly |
| Scans, wrong destination | Typo or missing https:// in the encoded text | Decode the code, read the raw text, regenerate |
| Works printed, not on screen | Glare, night mode, or low screen brightness | Raise brightness, disable color-shifting modes, avoid glossy reflections |
Size and density: the two that cause most print failures
A QR code is a grid of modules, and a phone camera has to resolve every module to read it. Two things shrink modules: printing the whole code small, and stuffing in long data. They compound. A 600-character URL in a 2 cm sticker produces modules well under half a millimeter, beyond what a camera at arm's length resolves. Keep the encoded text short (a clean URL, not one dragging tracking parameters), and never print below 2 x 2 cm. For posters and signage, size the code for the farthest realistic scanning distance using the 10:1 rule.
Contrast, inversion, and the quiet zone
Scanners binarize the image: every pixel becomes either dark or light. Brand-colored codes in mid-tones, dark-on-dark palettes, and busy background imagery all collapse in that step. Standard polarity is dark modules on a light background; many scanners simply do not attempt the inverted form. And the quiet zone is not decoration, it is part of the spec: the scanner needs roughly four modules of clean margin to find the code's edges. The classic failure is a designer cropping the code flush against a border in a layout tool.
Expired codes: the failure that is not about the pattern
Static QR codes cannot expire. The pattern is nothing more than your text, and ink does not stop working. What expires are dynamic codes from subscription QR services: they encode a short redirect URL on the provider's domain, and when the free trial or plan lapses, the redirect dies. The code still scans perfectly and lands on an upgrade or error page. This is the most common reason a code that worked for weeks suddenly stops. The fix is to generate a static code that encodes your destination directly. The QR Code Generator builds static codes in your browser: the URL never leaves your machine, no account is involved, and there is no service in the middle that can expire, track scans, or break your links later. The trade-off is honest and worth knowing: a static code cannot be edited after printing, so if you need to change the destination of an already-printed code, a dynamic provider you pay for and trust is the right tool for that job.
A 60-second debugging checklist
- Scan someone else's known-good code: rules out your camera.
- Scan your code from a phone screenshot at full brightness: if that works but print fails, the problem is size, contrast, or print quality.
- Read the decoded text with any scanner app: if the text is wrong or is a shortener you do not recognize, regenerate the code from the correct URL with the QR Code Generator.
- Check the margin: if anything sits within four modules of the code, add space and reprint.
- Long URL? Trim tracking parameters, or use a clean slug on a short path you control, then regenerate.