Why QR Codes Stop Working
A QR code that has stopped working has either changed, or its destination has, or the conditions it is being scanned in have. Almost every case is one of twelve things, and most of them are fixable without reprinting.
The code is fine, the destination is not
A static QR code cannot change. If the squares have not been damaged, the code still decodes to exactly the string it always did. So the first question is always whether the code is failing to scan, or scanning fine and arriving somewhere broken.
- The page moved or was deleted. The most common cause of all. A site redesign renames
/menu.htmlto/our-menu, and every printed code now lands on a 404. Fix: add a redirect from the old path. Costs nothing, works immediately, no reprinting. - The domain expired or changed. A rebrand, a lapsed renewal, a move to a new domain without redirects. Fix: renew or redirect. If the domain is genuinely gone, the codes are gone.
- The certificate expired. The page loads but the browser shows a full-screen security warning, and most people back out. Fix: renew the certificate and set up automatic renewal.
- The link goes to a file that moved. Codes pointing at a PDF are especially fragile, because files get reorganised more casually than pages. Fix: point codes at a page you control, and let the page link the file.
The code was rented, not owned
If the code was made with a dynamic QR service, it contains that provider's short link rather than your destination. It works for exactly as long as the provider keeps resolving it.
- The free trial ended, and the provider now shows an upgrade page instead of your content.
- The subscription lapsed or a card expired.
- A scan limit was reached — many plans cap monthly scans.
- The provider shut down or discontinued the product.
There is no fix for printed material in this case, only a decision about whether to pay or reprint. Static versus dynamic QR codes covers how to get the ability to change a destination without the dependency.
Something happened to the printed code
- It faded. Thermal receipt paper is the worst offender — a code on a receipt can be unreadable within months, faster in a car or a sunny window. Inkjet on uncoated paper fades outdoors in a season. Fix: laminate, or reprint on a stable medium.
- It got scuffed, scratched or stained. Our damage testing found that a level M code tolerates a single blot covering about 9% of the symbol, but the same area as scattered specks stops it at 2%. So a code that looks lightly worn all over is in worse shape than one with a distinct mark.
- Something covers a corner. A price sticker, a fold, a trimmed edge. Obscuring even one module of a finder pattern made every code in our tests unreadable at every error-correction level. Corners are not negotiable.
- The quiet zone got eaten. A reprint with tighter margins, a new label placed too close, a die-cut moved. Four empty modules on every side; see the anatomy guide.
- It was reprinted smaller — a poster reissued as a flyer, a label redesigned. Every module shrank with it.
It never really worked
Sometimes the code was marginal from the start and something small tipped it over — a different phone, worse light, a slightly older camera.
- Too dense for its size. A long URL or a full vCard at 20 mm. Our testing puts the floor at about five camera pixels per module, which works out near 0.5 mm per module at arm's length. The size guide has the arithmetic.
- Printed as a JPEG, or as a PNG enlarged after the fact. Soft edges are the enemy.
- Inverted, light on dark. Zero reads in our tests, though some scanners cope — which is why it seems to work for some people and not others.
How to tell which one you have
Four steps, in order. Each one eliminates a whole category.
- Scan it with a reader that shows the raw text before opening anything. If you get a URL, the code is physically fine and the problem is at the destination. If you get nothing, the problem is the code or the conditions.
- Open that URL by typing it. If it fails typed, it is a server problem, not a QR problem, and you can stop thinking about codes entirely.
- Compare against the original file. Generate the same payload again and hold the two side by side. Differences in size, margin or contrast usually explain themselves at a glance.
- Change one condition at a time. Better light, then closer, then a different phone. Whichever one fixes it tells you what the real constraint is: light means contrast or reflection, closer means the code is too small, a different phone means it was marginal all along.
Before the next print run, the pre-print checklist catches most of this in ten minutes.
Written by Manuel Llovet, who builds and maintains QR Code Free Forever. Published 2026-08-31, last checked 2026-09-08. Figures and measurements on this page were produced for this site; the method is described in each caption.