Troubleshooting · 7 min read

Why QR Codes Fail to Scan (And How to Fix Yours)

When a QR code fails, it usually fails for one of about a dozen specific reasons. None of them are mysterious. Here's how to figure out which one is breaking your code, and what to do about it.

QR codes have a reputation for being temperamental, but the truth is they're remarkably reliable when generated and printed correctly. Almost every QR code failure traces back to a small set of well-understood causes. If you can identify which one is happening, the fix is usually straightforward.

Here's the diagnostic walkthrough — start at the top and work down.

1. The code is too small for the scan distance

This is the single most common cause of QR code failure in print, and it's the easiest one to test for. Hold the code at the distance you expect people to scan from. If you can't make out individual squares with your naked eye, your phone's camera probably can't either.

The fix is the 10-to-1 rule: the printed code should be at least one-tenth as wide as the maximum scan distance. A code on a poster meant to be scanned from five feet away needs to be at least six inches wide. A code on a billboard meant to be read from across a parking lot needs to be measured in feet, not inches. There's no clever workaround — physics requires the modules to subtend a minimum angle in the camera's field of view.

2. Insufficient contrast between code and background

QR scanners read luminance, not color. A dark blue code on a white background works because the luminance difference is high. A medium gray code on a slightly lighter gray background fails because the camera can't reliably distinguish the modules from the background.

The same problem appears with colored codes that look fine to a human eye but lack the contrast scanners need. Pastel codes on cream paper, light brown on tan, navy on dark gray — all of these can fail despite looking visually distinct.

The fix is to test the contrast in grayscale. Convert your design to black and white in any image editor. If the QR code modules are clearly distinguishable from the background in the grayscale version, you're fine. If they blur together, you need higher contrast.

3. Inverted colors (light code on dark background)

A QR code with light modules on a dark background — say, white squares on a black background — looks striking but fails to scan on many devices. The QR specification doesn't strictly require dark-on-light, but a meaningful percentage of scanner apps and built-in camera apps assume that orientation and won't recognize an inverted code.

If you want a dark-themed design, the safest path is to keep the QR code itself dark-on-light and surround it with the dark design elements. Some modern scanners handle inverted codes gracefully; many older ones don't. Defaulting to the standard orientation eliminates an entire category of failure.

4. Missing or compromised quiet zone

Every QR code needs an empty margin around it — typically equal to four modules wide — so the scanner can identify where the code begins. This is called the quiet zone. When designers crop layouts tight or place text right against the edge of a code, they often eat into the quiet zone without realizing it.

A code with a compromised quiet zone may scan inconsistently — sometimes working, sometimes not, depending on lighting and angle. The fix is to give the code more breathing room. The whitespace built into a generated QR code file is usually adequate; just don't crop it out when placing the code in a layout.

5. Logo too large or improperly placed

A logo in the center of a QR code is fine if you set the error correction high enough and keep the logo small enough. It breaks the code if either of those conditions isn't met.

If you've added a logo and the code won't scan reliably, the cause is one of three things: the error correction was set too low when the code was generated, the logo is covering more than about 25% of the code's area, or the logo is overlapping one of the three large corner squares (which scanners use to find and orient the code). The fixes are to regenerate at error correction H, shrink the logo, or move it back to dead center respectively.

Important Error correction level is set at the moment the QR code is generated and cannot be changed afterwards. If you need to add a logo to a code that was generated at low error correction, you have to regenerate it.

6. Glare, reflections, or curved surfaces

Glossy paper, laminated cards, and shiny packaging can reflect overhead light right back into the camera, washing out the contrast that scanners depend on. The same applies to curved surfaces — bottles, mugs, anything cylindrical — where the code distorts as it wraps around the curve.

For shiny surfaces, the fix is usually a matte or satin finish for any printed material that will include a QR code. If you're stuck with gloss, position the code where it's less likely to catch overhead lighting.

For curved surfaces, keep the code small relative to the curve. A QR code on a soda can works because it's small enough that the curvature across its width is minimal. The same code blown up to wrap around a barrel won't scan because the modules become geometrically distorted from the camera's perspective.

7. Print resolution too low

A QR code printed from a low-resolution source file will have soft, blurry edges that confuse the scanner. The fix is to print from a vector source (SVG) for anything larger than a thumbnail, or from a high-resolution PNG (at least 300 DPI at the final printed size) for fixed-size digital print.

You can spot this failure mode by looking at the printed code closely. If the squares look fuzzy, blurred, or have soft edges instead of crisp boundaries, the source file resolution was the problem.

8. The destination URL is broken

This sounds obvious but happens more than people realize. The QR code scans correctly, the phone opens the link, and then the browser shows a 404 or a connection timeout. From the user's perspective, the QR code "didn't work" — even though it actually worked perfectly. The failure was downstream.

Before printing anything, scan your QR code with at least two different phones and confirm the destination loads correctly. Then check the destination periodically over the lifetime of the printed material, especially if you're using a static code (which can never be redirected if the destination changes). Many printed QR codes in the wild have been pointing to dead URLs for years.

9. Encoded content is too long

QR codes have a finite data capacity that depends on the version (size) and error correction level. Cramming in a very long URL or a large block of text forces the generator to use a high-version code with very small, dense modules — which then need to be printed larger to remain scannable.

If you're encoding a long URL, run it through a URL shortener first. The shortened version takes far fewer characters to encode, which produces a simpler, more reliable QR code. The trade-off is that the shortener becomes a dependency — if the shortening service shuts down, the redirect breaks. For long-term print materials, point the QR code at a short URL on your own domain instead of a third-party shortener.

10. Bad printing — smudged, faded, or low-ink

Sometimes the file is fine but the printer let you down. Inkjet prints on uncoated paper can bleed slightly, blurring the edges of modules. Low-ink laser prints can produce gray modules instead of solid black. Old printers can produce streaky output that breaks up the code's pattern.

If the QR code looks crisp on screen and broken in print, the printer is probably the cause. Try a different printer, a higher-quality paper, or a professional print shop for any high-stakes job. For business cards, signage, or anything that has to last, professional printing pays for itself in scan reliability alone.

11. Phone camera quality or scanner app issues

Older phones with low-megapixel cameras struggle with QR codes that newer phones handle effortlessly. Some third-party scanner apps are flat-out worse than the iOS or Android built-in camera app, which both have native QR support and don't require a separate app at all.

If your code scans on a recent phone but fails on someone else's older device, the right move is usually to make the code physically larger or to bump the error correction up — both of which make the code easier for less-capable cameras to read. You can't control which phone scans your code, so design for the lowest common denominator.

12. The destination requires conditions the user can't meet

This is the sneakiest failure mode. The code scans, the URL loads, and then the user hits a paywall, a login screen, an app install prompt, or a region-restricted page. Technically not a QR code failure, but functionally indistinguishable to the person trying to use it.

The fix is to make sure the destination is something a stranger with no context can actually use. If the link requires an account or app, say so on the printed material near the code so people know what to expect before they scan.

The diagnostic shortcut

If you're debugging a specific failed code, work through this short checklist:

  1. Is the code physically large enough for the scan distance?
  2. Is there clear contrast between the modules and the background?
  3. Is the code dark-on-light (not inverted)?
  4. Is there proper whitespace around the code?
  5. If there's a logo, is it small and centered with high error correction?
  6. Is the print itself crisp and undamaged?
  7. Does the destination URL actually work?

One of those seven catches the vast majority of QR code failures. Run the list, fix what you find, and you're back in business.

Generate a code that actually scans

Set error correction to High, download the SVG, and you've eliminated most of the failure modes before you start.

Open the Generator →