QR Code Not Scanning? Troubleshooting Guide by Symptom

Bhargav Dhameliya
Bhargav Dhameliya
October 22, 2026
5 min read
qr code not scanning featured

Your QR code is not scanning, and the poster is already on the wall. What now?

I run linkutm, and a lot of the QR support questions that reach me start with “it just doesn’t work.” That sentence hides three very different problems. Sometimes the camera never finds the code. Sometimes it finds the code, but nothing useful opens. Sometimes the right link opens, and the page behind it is broken.

Each version of a QR code not scanning has a different fix. So this guide starts with the symptom, not with a list of 25 random causes. I also ran a fresh decode test on two things most guides get wrong: colored codes and inverted (white-on-black) codes.

Here’s the quick version.

What you see Where the chain breaks First thing to check
Camera shows nothing The code or the scan Size, light, contrast, quiet zone
Camera shows text, not a link The payload Missing https://, typo, wrong code type
Link opens an error page The destination Expired code, deleted page, blocked site
Right page opens, no campaign data The redirect UTM parameters dropped on the way
Works on one phone only The decoder Inverted colors, low contrast, app-only codes

Why Is My QR Code Not Scanning? Start With the Symptom

A QR code not scanning is almost always one broken link in a five-step chain. The printed or on-screen code has to be found by the camera. Then a decoder (the software that turns the black-and-white pattern back into text) reads the payload (the text stored in the code). The phone decides what to do with that payload. If it is a web link, a redirect and a landing page come last.

QR code not scanning: the five-step scan chain and which symptom points to each broken link

Look, you don’t need to check all five links. Three questions narrow it down in under a minute:

  1. Does the camera show any link or prompt at all? If not, the problem is the code itself or the scanning conditions.
  2. Does the prompt show a web link? If it shows plain text or nothing clickable, the payload is wrong.
  3. Does the right page load, with your UTM tags intact? If not, the destination or the redirect is the problem.
Three-question triage for a QR code not scanning: camera, payload, then destination

Real talk: question 3 catches people most. A code that “works” but lands on a 404 page still looks like a scanning failure to the person holding the phone. They don’t care which link in the chain broke. They just leave.

The honest limitation here: this triage assumes you can scan the code yourself. If the complaint came from a customer, ask which phone they used and what they saw. “Nothing happened” and “it opened a weird page” point to opposite ends of the chain.

QR Code Not Scanning at All: The Camera Can’t Lock On

If the camera shows nothing, the QR code not scanning is a decode failure: the phone never read the pattern. Start with the scanning conditions, then check the code.

Rule out the phone first. Google’s Pixel Phone Help lists the basics: keep your hand steady, scan in a well-lit area, avoid shadows or glare, wipe a smudged lens, and move closer while keeping the whole square on screen. On Pixel phones, the camera only suggests scanning when Camera scan suggestions is turned on in the camera’s settings. Apple’s iPhone guide adds one useful tip: tap the flashlight for more light when you scan from Control Center.

If the QR code is not scanning on a second phone either, the code is the problem. These are the usual suspects, each with its own deep-dive:

  • Too small for the distance. Every QR code has a maximum scan range set by its printed size and its module count. A module is one black or white square in the grid. My QR code smallest size guide has the size chart, and the QR code scanning distance entry has the formula.
  • Blurry file or print. Blur smears modules into each other. The blurry QR code fix guide shows how much blur a code survives.
  • No margin. The quiet zone is the empty border a scanner needs to find the code’s edges. Text, frames, or a busy photo pushed against the code will break it. See QR code quiet zone.
  • Over-styled design. Tiny dots and circular corner “eyes” can break some decoders. My dot QR code test shows which styles are safe.
  • Damage or a logo that’s too big. Error correction rebuilds missing parts of a code, up to a limit set by the level you chose.
  • Glare on glossy surfaces. A light reflection wipes out modules completely. Matte stock and laminate fix this better than any setting.

I already tested tilt, rotation, hand shake, gray-level contrast, quiet zone width and cropping in my guide on how to scan a QR code. I won’t repeat those numbers here. The short version: framing and steadiness matter far more than angle.

The limitation: none of these fixes helps once a code is printed with a size or margin problem. You can rescan in better light, but you cannot add a quiet zone to 5,000 flyers. That’s why the pre-print test at the end of this guide matters more than any fix.

Color and Inverted QR Codes: What My Test Found

Scanners read brightness, not color, so a colored QR code not scanning is almost always a brightness problem. A colored QR code scans when its dark modules are clearly darker than its background, and it fails when the two colors are similar shades of gray, however different they look to you.

Color is behind a surprising share of “QR code not working” complaints. I wanted numbers for the two cases I see most in support threads: brand colors on colored backgrounds, and white-on-black codes. So on 22 October 2026 I ran a decode test.

Here’s how it worked. One short-link QR code (Version 3, error correction level M) was rendered in each color pair and passed through a simulated camera capture 40 times, with random scale, rotation, lens blur and sensor noise. Two decoders read every capture: zxing-cpp, the C++ port of the ZXing library that many scanner apps build on, and OpenCV’s QR detector. A plain black-on-white code read 40 out of 40 on both before I changed anything.

Colored QR code test: red on green and blue on red failed 0 of 40, orange on white passed 40 of 40
Color pair Contrast ratio zxing-cpp OpenCV
Black on white 21:1 40/40 40/40
Orange on white 2.33:1 40/40 40/40
Yellow on white 1.41:1 29/40 40/40
Navy on black 1.59:1 4/40 0/40
Red on green 1.28:1 0/40 0/40
Blue on red 1.15:1 0/40 0/40

The contrast ratio is the W3C’s WCAG contrast measure: 1:1 means identical brightness and 21:1 is black on white.

Three things surprised me:

  • Red on green failed every single time. To a person it looks loud and obvious. To a camera’s brightness channel, the two colors are only about 5% apart.
  • The two decoders disagreed on yellow. zxing-cpp read yellow on white 29 times out of 40, and OpenCV read it 40 times. That’s exactly how you get a code that “works on my phone” but not on a customer’s.
  • Orange on white passed at 2.33:1. So the floor is lower than most design guides suggest, in a clean digital image.

If you want the full table of single brand colors on white, my branded QR code entry has it. This test adds what that one didn’t cover: colored backgrounds.

Inverted codes depend on the scanner, mirrored codes don’t

An inverted QR code has light modules on a dark background. The QR standard allows it. ISO/IEC 18004, the QR code specification, added “reflectance reversal (light symbols on dark backgrounds)” and mirror-image symbols in its 2005 version, as Cognex’s documentation of the standard quotes. But allowing it and supporting it are different things.

Inverted QR code read 40 of 40 with the invert pass on and 0 of 40 without; mirrored codes always read

zxing-cpp read the inverted code 40 out of 40. Then I switched off one option, tryInvert, which the library documents as trying “inverted (‘reversed reflectance’) codes” and turns on by default. With it off, the same decoder read the same code 0 out of 40. OpenCV also read it 0 out of 40.

So an inverted code isn’t a broken code. It’s a code that only works on scanners that make an extra inverted pass. Here’s the thing: you can’t see which scanners do that from the outside. Neither Apple nor Google documents whether its camera app reads inverted codes, so I won’t claim either way.

Mirrored codes (flipped left to right, like a code printed on the inside of a shop window) were a non-issue. Every decoder read them 40 out of 40.

My rule after this test: dark modules on a light background, and aim for at least 4.5:1, the WCAG threshold for normal text. Orange passed at 2.33:1, but print, ink and bad lighting eat into that margin fast.

The honest limitation: these are clean digital images. Real print, curved surfaces and dim lighting will lower every result in the table. Phone scanners also use their own decoders, so treat this as a direction, not a phone benchmark.

QR Code Scans but Doesn’t Open: Check the Payload

Sometimes a QR code not scanning isn’t a camera problem at all. If the camera finds the code but shows text, or nothing you can tap, the problem is the payload. The decoder did its job. The phone just doesn’t recognize what it read as something it can open.

Three payload mistakes cause most of these cases.

1. The URL has no scheme. A payload of go.example.com/sale is just text. A payload of https://go.example.com/sale is a link. The ZXing project’s Barcode Contents guide, the closest thing QR codes have to a payload reference, says to “include the protocol (https:// here) to ensure it is recognized as a URL.” Some scanners guess, and many don’t. 2. A typo in a static code. A static QR code stores the destination directly in the pattern. One wrong character and the code points somewhere else forever. You can’t edit it. You can only reprint it. 3. A wrong or broken format. Wi-Fi, contact cards and payment codes use strict text formats. A Wi-Fi password containing a semicolon is a classic trap. The ZXing guide says the characters \ ; , " : must be escaped with a backslash.
Broken:  WIFI:T:WPA;S:CafeGuest;P:latte;2026;;
Fixed:   WIFI:T:WPA;S:CafeGuest;P:latte\;2026;;

In the broken version, the phone reads the password as latte and stops at the semicolon. My Wi-Fi QR code entry covers the full format.

How do you see the payload? Scan the code with an app that shows what it decoded before opening anything. Many scanner apps display the raw text first. If you see the decoded text, you’ve already ruled out the camera, and you’re looking at the cause.

The limitation: some codes are meant to open an app, not a website. WhatsApp’s device-linking codes, for example, only work when you scan them inside WhatsApp. A phone camera that “does nothing” with those is behaving correctly.

QR Code Opens an Error or the Wrong Page

This is the QR code not scanning case that isn’t really a scanning problem. If a QR code scans and opens a link, but the page is an error, a parked domain or the wrong offer, the code is fine. The destination broke.

These are the common causes, in the order I check them:

  • The dynamic code was deactivated. A dynamic QR code stores a short redirect link instead of the final URL, so you can change the destination later. That’s powerful, but it means the code only works while the redirect service keeps working. Many free plans and trials switch codes off when you stop paying. I tested what scanners see in that case in my QR code generator comparison, and I covered every way a code can “expire” in do QR codes expire.
  • The landing page moved or was deleted. A site redesign, a renamed campaign page, or an ended promotion gives you a 404 behind a perfectly good code.
  • The domain lapsed. A static code pointing at a domain nobody renewed is the worst case, because somebody else can register it.
  • A security filter blocked the site. Corporate networks and browser safety filters sometimes block new or rarely visited domains.
  • The redirect dropped your UTM tags. The page loads, so nobody complains. But your QR code tracking shows the visits as direct traffic, and your print campaign looks like it failed.

To check any of these, look at what the link actually does. My free redirect checker shows every hop and its status code, so you can see where a link breaks and whether your parameters survive.

For codes that are already printed, don’t wait for complaints. Link health monitoring means checking every live destination on a schedule, so you find a broken page before your customers do.

The limitation: a redirect check only proves the link works from where you are. A page can load fine for you and still be blocked on a hotel network or in another country.

QR Code Not Scanning on Some Phones? Why Phones Disagree

A QR code not scanning on one phone but working on another is usually a borderline code. Different phones use different decoders, and a code near the edge of readable will split them.

My color test showed this directly. The same yellow-on-white code read 40 out of 40 on one decoder and 29 out of 40 on the other. The inverted code read 40 out of 40 or 0 out of 40, depending only on a single setting. Same image, opposite results.

Here are the usual reasons the split happens:

  • Different decoders. iPhones, Android phones and third-party apps each use their own scanning engine, with different tolerances for contrast, blur and inverted colors.
  • Different cameras. An older or cheaper camera captures fewer pixels per module, so small or dense codes fail on it first.
  • App-only codes. Some codes, like messaging-app login codes, only work inside one app.
  • Camera settings. On Pixel phones, scanning from the camera depends on Camera scan suggestions being turned on.

When a QR code is not scanning for some customers only, the fix is never “tell them to download a better app.” Make the code less borderline instead. Give it more contrast, more size, a clean quiet zone and a short payload. I keep a three-scanner rule for every printed code, and I explain why in my guide to QR code scanner apps.

The limitation: you can’t test every phone. Three different scanners catch most borderline codes, but not all of them. A healthy safety margin is the only real protection.

How to Test a QR Code Before Printing

The cheapest fix for a QR code not scanning happens before printing. Once the code is on 5,000 flyers, a size or contrast mistake is permanent.

Here are the steps I follow before anything goes to print:

  1. Read the raw payload with a scanner that shows text, and confirm it starts with https:// and has no typos.
  2. Open the link and run it through a redirect checker to confirm the final page loads and your UTM parameters arrive intact.
  3. Check the color contrast ratio of your dark modules against the background, and keep it at 4.5:1 or higher with dark modules on a light background.
  4. Print a proof at the final size, on the final paper or material, with the full quiet zone around it.
  5. Scan the proof on three different scanners (an iPhone, an Android phone and one scanner app) from the real viewing distance and in the real lighting.
  6. Use a dynamic code for anything you can’t reprint cheaply, and set up monitoring on its destination.

Step 6 is the one I’d never skip. A dynamic code doesn’t make a code easier to scan. But it turns a broken destination from a reprint into a two-minute edit.

The limitation: a proof test can’t predict damage, weather or someone putting a sticker over your code. For outdoor and long-life print, add higher error correction and plan to check the code in person every few months.

Frequently Asked Questions

Why does my QR code scan but not open the link?

The payload probably isn’t a recognized web link. The most common cause is a URL saved without https://, which many phones treat as plain text. Other causes are a typo in the URL, or a code type meant for an app, like a messaging login code. Scan it with an app that shows the raw text to see exactly what’s stored.

Why does my QR code work on one phone but not another?

The code is borderline readable, and the two phones use different decoders. In my test, one yellow-on-white code read 40 out of 40 on one decoder and 29 out of 40 on another. Increase the contrast, size and quiet zone until the code works on three different scanners.

Can a QR code be white on black?

Yes, the QR standard allows light-on-dark codes, but not every scanner reads them. In my test, zxing-cpp read an inverted code 40 out of 40 with its inverted pass on and 0 out of 40 with it off, and OpenCV read it 0 out of 40. If the code has to work everywhere, use dark modules on a light background.

Do colored QR codes scan?

Yes, if the dark modules are clearly darker than the background. Scanners compare brightness, not hue, so red on green failed every time in my test while orange on white passed. Check the contrast ratio and aim for at least 4.5:1.

Can I fix a QR code that is already printed?

Only if it’s a dynamic code, or if the problem is the destination. A dynamic code lets you change where it points without reprinting. A static code’s link is fixed in the pattern, so a wrong URL or bad print quality means reprinting. If the destination page broke, you can fix or redirect the page itself.

Does dark mode stop a QR code from scanning?

It can, if dark mode makes the code display light on dark. That turns it into an inverted code, which only some scanners read. If a code sits on a web page or in an email, keep it on a fixed white background so dark mode can’t flip it.

Fixing a QR Code That’s Not Scanning, Fast

A QR code not scanning is a chain problem, and the symptom tells you which link to check.

  • Camera shows nothing: fix size, light, contrast, glare or the quiet zone.
  • Text instead of a link: fix the payload. Add https://, correct typos, escape special characters.
  • Error page: fix the destination. Check for expired dynamic codes, deleted pages and lapsed domains.
  • Works on some phones only: make the code less borderline. Use dark on light, at 4.5:1 or more.

Then test before you print, every time. The next time someone reports a QR code not scanning, run the three questions before you touch the design.

If you want codes you can fix after printing, linkutm’s dynamic QR codes let you change the destination without reprinting, and each code points at a UTM-tagged link so every scan is attributed in your reports. Create your first trackable QR code and test it on three phones before it ever reaches a printer.

Bhargav Dhameliya

About Bhargav Dhameliya

Share this article

Ready to track your campaigns better?

Join thousands of marketers who use linkutm to build, track, and manage their marketing campaigns with ease.

Get Started for Free