Skip to main content

QR code not scanning or stopped working? Why, and how to fix it

A QR code is only a picture of some data, so it cannot expire or switch itself off. When one will not scan or stops working, it is nearly always one of four things. This guide shows you how to tell which in two minutes, and how to make a code that never stops.By QRCraftly · Published · Updated · 6 min read

The short answer

A QR code holds a few hundred characters of text, usually a web address, drawn as a pattern of squares. Nothing in the pattern can run out. If a code that used to work no longer does, one of these happened:

  1. It was a “dynamic” code, and the service that made it switched it off. The code held an address on that service, and the service decides where it leads, or whether it leads anywhere.
  2. The page it points to has moved, been renamed or been deleted, or the domain it lives on has lapsed.
  3. The printed code is hard for a camera to read: too small, too faint, damaged, or crowded by a logo.

The first is the one people find most upsetting, because the code looks fine and the only fix is to pay or to print again. It is also the only one you can rule out before you ever print: make a static code, and there is nothing for anyone to switch off.

Find out which one in two minutes

  1. Scan the code with your phone’s camera, or drop a photo of it on the QR code scanner. It shows the real address behind the code before opening anything.
  2. If nothing is read at all, the problem is the print or the camera. Go to the printing section.
  3. If an address appears and it belongs to someone other than you, such as a short link on a QR service’s own domain, you have a dynamic code. Go to the dynamic code section.
  4. If the address is yours, or is the page you meant, open it. If the browser shows an error or the wrong page, the destination is the problem. Go to the dead page section.

Have a photo of the code but no phone handy? The QR code checker reads a picture of any code, shows what it holds, and tells you whether it would survive a poor print.

Cause 1: a dynamic code that was switched off

A dynamic code does not contain your address. It contains a short address on the provider’s own domain, and the provider’s server forwards each scan to your real page. That is how a provider can show you scan counts and let you change the destination after printing. It is also why the code depends on them: if the account lapses, the free trial ends or the provider closes, the forwarding stops and the code goes dead or lands on the provider’s own page.

The lasting fix is to stop depending on a middleman. A static code holds your address, so it works for as long as that address does. If you still want to change the destination later, point the code at a short address on a domain you own, then change where that address leads. Static vs dynamic QR codes covers the trade-offs.

Cause 2: the page it points to is gone

Links break, and a printed code cannot be edited. The usual ways a destination disappears are:

  • A website redesign that changes page addresses without redirecting the old ones.
  • A PDF, menu or form that was renamed, replaced under a new name, or taken down.
  • A domain that expired and was not renewed.
  • A link shortener or file host that closed or changed its terms.
  • A social profile whose username changed.

If you control the destination, the repair is cheap: put a redirect from the old address to the new one, and every printed code works again. If you do not control it, the code is only as durable as someone else’s page. Point codes at an address you own whenever you can, and keep that address alive. Renew the domain, and add a redirect whenever you move a page.

Cause 3: the print is hard to read

Phones are good at reading QR codes, but they have limits. These are the usual culprits, and what to do about each.

Common reading problems and their fixes
What you seeLikely causeFix
Phone cannot find a code at allPrinted too small for the distance it is scanned fromA common rule of thumb is a code about one tenth as wide as the scanning distance. For close-up use, print at least 2 cm (0.8 in) wide.
Reads on a screen, fails on paperLow contrast, faint ink, or a glossy surface that reflects lightUse dark modules on a light background, a matte finish, and check the print under the light where it will hang.
Works only if you hold it just rightNo blank border (the quiet zone), or the code is cropped or on a curved surfaceLeave a blank margin of at least four modules on every side, which is the width the standard specifies, and keep the code flat.
Fails after it was folded, scratched or sun-fadedDamage beyond what error correction can repairPrint on a durable material. Higher error correction tolerates more damage, up to about 30% at level H.
Worked until a logo was addedThe logo covers too much of the codeMake the logo smaller, or raise the error correction to H, and test again.
The code looks dense and busyToo much data in it, so each square is tinyEncode a shorter address. A short address gives fewer, larger squares that are easier to read.
Light squares on a dark background fail on some phonesInverted codes are not supported by every scannerUse dark on light, unless you have tested the inverted version on the phones you care about.

Error correction is what lets a damaged code still scan. Level L repairs about 7% of the code, M about 15%, Q about 25% and H about 30%, according to the standard’s authors. Higher levels make the code denser, so they trade readability at small sizes for tolerance of damage.

To see how your code copes, run it through the QR code checker, which simulates a blurry print, or damage it on purpose in the QR Arcade.

Cause 4: it is the phone, not the code

  • The camera app has no permission for the camera, or a scanner setting is turned off.
  • A smudged or cracked lens, or a screen protector over the camera.
  • Scanning a code shown on another screen: glare, a low brightness setting or a refresh-rate pattern can all spoil it. Raise the brightness or save the image and open it from the gallery.
  • An old phone or browser that cannot read codes natively. Photo-based scanners such as the one on this site work around that.

If one phone fails and another reads the code instantly, the code is probably borderline. Fix the print rather than trusting the better phone.

How to make a code that never stops working

  1. Make a static code, so the code holds your address itself and no service sits between the scan and your page.
  2. Point it at an address you control, and keep that address alive. Renew the domain, redirect old paths, and do not rename the page.
  3. Keep the address short. Shorter means larger squares and an easier scan.
  4. Use error correction M or Q for most print, and H when there is a logo or the code may be scuffed.
  5. Use dark modules on a light background, keep the blank border, and print at a size that suits the distance.
  6. Test the printed copy with two different phones, in the place where it will hang, before you print a batch.
  7. Keep the original file, and note what the code points to and when you made it. Check it again once a year.

QRCraftly makes static codes only. There is no account, nothing is stored on a server, and the code contains exactly what you typed, so there is nothing for us to switch off. It also means we cannot offer scan counts or change a destination after printing. Static vs dynamic QR codes is honest about what that costs. You can make a code now and check it before you print.

Sources