A QR code fails in one of two ways, and the fix depends entirely on which. Either it won’t scan — the camera never reacts — which is a problem with the printed pattern: too small, too faint, too crowded or damaged. Or it scans but leads nowhere — an error, an “inactive” or “expired” page, the wrong site — which is a problem with where the code points, and usually means the link behind it has broken or the service running it has stopped.
First: does it scan at all?
Point two different phones at the code — ideally an iPhone and an Android, using the built-in camera. If neither shows a link, the phones can’t read the pattern, and you’re in the next section. If they show a link but it opens the wrong thing, skip to the one after. (If only one phone struggles, the phone is the problem — how to scan a QR code covers camera settings and scanner apps.)
If it won’t scan: problems with the print
- Too small for the distance. A code should be roughly a tenth as wide as the distance people scan from, and never under about 2 cm. A code on a poster across a room needs to be large.
- Too little contrast. Scanners need a dark code on a light background. Pale colours, inverted (light-on-dark) codes and busy photos behind the code are common failures.
- No blank margin. The empty border around the code — the quiet zone — is part of the standard. Text or a frame pressed against the edge stops phones from finding it.
- Damage, glare or curves. Scratches, laminate glare, a crease or a tightly curved bottle can hide too much of the pattern.
- Too dense. A long web address produces tiny squares that need a crisp, large print. Shorten the address, or use a short redirect link, and the pattern gets simpler.
- A logo that’s too big. A logo covers part of the data, which only works if the code has enough error correction to rebuild it — how to put a logo in a QR code explains the limits.
- A blurry file. A small PNG stretched for print gets fuzzy edges. Export a vector SVG for anything printed.
Every one of these is a fix to the print, not the code — the full list of numbers is in QR code best practices. For a static code, a reprint is the only repair; test the proof on real phones before the full run.
If it scans but leads nowhere: problems with the destination
When the camera shows a link but it opens an error or the wrong page, the pattern is fine. What’s broken is what it points at — and what you can do depends on whether the code is static (the address is written into the pattern) or dynamic (it points to a redirect that forwards people on).
- The page moved or was deleted. The most common cause for a static code. If the address is on your own website, set up a redirect from the old address to the new page — every printed copy is fixed without reprinting.
- The sharing settings changed. A Google Doc, Drive file or form link that was made private shows scanners a sign-in or request-access screen.
- The link was typed wrong. One wrong character in the address makes a code that works perfectly and goes nowhere. Scan every code before printing.
- The subscription behind it lapsed. The usual cause for a dynamic code. When a plan or free trial ends, many services stop forwarding scans and show an “inactive”, “expired” or upgrade page instead. The code itself is fine; the redirect has been switched off.
- The service shut down or deleted it. If the company running the redirect closes, or deletes old codes, nothing forwards the scan any more.
- It was given an end date. Some services let the owner schedule a code to expire — useful for a promotion, confusing if forgotten.
- A browser flags the destination. If the page is reported as unsafe, phones show a warning instead of opening it. Check the site isn’t compromised.
How to reactivate an inactive or expired QR code
A dynamic code that shows an “inactive” page can only be switched back on by the service that made it, because only that service can redirect its short address. Log in to the account that created it and renew or upgrade the plan; on most services the code resumes forwarding straight away. If the account is gone or the service has closed, there’s no way to revive it — the printed code has to be replaced. Why this happens in the first place is explained in what happens when a QR code expires, and what your options are if you’d rather leave than pay again is in how to switch QR code providers without reprinting.
Not every service behaves the same way. Bitly, for example, keeps its codes working after you stop paying but freezes their destinations — the details are in do Bitly QR codes expire.
How to stop it happening again
- Use a static code wherever the destination will never change — there’s no service to lapse.
- Point codes at pages on your own website, so a moved page is fixed with a redirect instead of a reprint.
- For anything that must stay editable, choose a dynamic code that doesn’t depend on a recurring payment — such as a pay-once dynamic QR code — and keep an export of where every code points.
- Test every proof on two phones before it goes to print.