Why did my QR code stop working
A QR code that scanned last month and fails today is almost never a printing problem. Something behind the code stopped answering, and what you can do about it depends entirely on what kind of code it is. Two minutes of diagnosis before any fix.
First: does it still scan at all?
Point a camera at it. If the phone reacts · shows a link, opens a page, even a broken one · the pattern is intact and the problem is downstream. Skip to the next section.
If the camera never reacts, the pattern itself is unreadable, which for a previously working code means physical change: sun-faded ink, a laminate glare, a scratched or curved surface, or a re-crop that trimmed the quiet zone around the squares. Paste a photo of it into our free decoder, which runs every recovery option a phone camera gives up on. If the decoder reads it, the content is recoverable even when the print is not.
The diagnosis that decides everything
Decode the code and look at the address inside it. There are only two possibilities, and they have opposite fixes:
- The address is your actual destination · the code is static. The pattern has no service behind it and nothing that could expire; the phone decodes it offline. What died is the destination itself: the page moved, the site was rebuilt, or the domain lapsed. The code did not stop working. The thing it points at did.
- The address is a short link on a domain you do not recognise · the code is dynamic. A redirect service sits between every scan and your destination, and that service answers according to the state of an account: a trial that ended, a subscription that lapsed, a scan allowance that ran out, a campaign someone paused, or a provider that shut down. This is written policy, not speculation: QR TIGER's help centre says that when a subscription ends, "all dynamic QR codes will become invalid", and Uniqode's says dynamic codes are deactivated when a trial expires. Your destination may be perfectly healthy; the hop in front of it went dark.
- The account is live and the edit is refused · a third case, and the one people misread as a bug. Some platforms meter the destination change itself rather than the code: Bitly publishes a monthly "Redirects" allowance, five changes on its Core plan, and an exhausted allowance means a code you are still paying for cannot be repointed until the month rolls over. Nothing is broken and nothing has expired. If that is your situation, the fix is not a reprint · see how an unmetered edit works.
This is the step the usual checklists skip. Contrast and sizing advice cannot help a code whose pattern still reads fine, and regenerating the code · the standard closing advice · means a reprint, which is exactly what you are trying to avoid.
What can actually be fixed, case by case
- Dynamic, and you can still sign in to the service · fix it there. The destination is a setting in that account: renew, unpause, or repoint it and every printed copy follows instantly. This is also the migration path if you are leaving that vendor · point their short link at a redirect you control and the printed run comes with you, no reprint.
- Dynamic, and the account is gone · the short domain belongs to the vendor, so nobody else can answer for it. If the vendor still exists, support may recover the account. If the vendor is gone, so is the hop, and the printed run needs a reprint.
- Static, pointing at a domain you control · repairable, and better than before. The scan is an ordinary web request to your machine, so one redirect rule at the origin hands every future scan to a destination you can edit forever. Our free rescue check reads your code and tells you which mechanism applies · a server rule, a builder's redirect setting, or a DNS record.
- Static, pointing at a domain you do not control · not fixable, by anyone. Everything after the scan happens on somebody else's machine. If the domain belonged to an agency or a former colleague, chasing that access is the only path that avoids a reprint.
- Not a web address at all · WiFi credentials, contact cards and plain text carry their content directly, with no server anywhere in the loop. They cannot stop working remotely, and they cannot be changed remotely either. A new password means a new code.
What happens when a taproute code runs dry
Since this page is about codes going dark, here is our own failure mode, in public. taproute codes run on prepaid credits (1 credit to create a code, once, and 1 credit per scan) with no subscription, so there is no renewal date to miss. At a zero balance, scans keep resolving for 14 days or 5% of your last top-up, whichever runs out first. Past that, a scanner sees a paused page that says whose code it is · never a 404, never an ad. The code is not deleted or recycled, and topping up resumes it instantly: same URL, same printed code.
Questions
Can a printed QR code be edited?
No. A static code carries its content in the pattern itself, so a new destination means a reprint. What can change is the machine the printed address points at: if you control that domain, one redirect hands every future scan to a destination you edit. Our free rescue check answers this in one screen.
My code scans, but the page says the link expired. Is the code broken?
The code is fine. The camera read it, which is everything a QR code does. What stopped answering is the service behind the address inside it · usually a dynamic short link whose account lapsed. If you can still sign in to that account, the fix is there, not in the printed code.
How do I tell whether my code is static or dynamic?
Decode it and look at the address inside. If it is the page you wanted people to reach, the code is static and the destination itself moved or died. If it is a short address on a domain you do not recognise, the code is dynamic: a redirect service sits in front of your destination.
Do taproute codes stop working?
They pause, and we publish exactly when. At a zero balance, scans keep resolving for 14 days or 5% of your last top-up, whichever runs out first; after that a scanner sees a paused page, never a 404 and never an ad. Top up and the same printed code resumes instantly.