The short answer
If a QR code worked and then stopped, and the printed code itself is undamaged, it is almost certainly a dynamic QR code whose redirect has been switched off. The code doesn't contain your link. It contains a short URL belonging to whichever generator you used, and that company has stopped forwarding visitors — usually because a free trial ended, a subscription lapsed, a free plan changed, or the service shut down.
The awkward part: this is not a bug. It's the business model. Free dynamic codes are the hook, and the printed signage you've already paid for is the leverage.
Static vs dynamic, in plain terms
Every QR code is a picture of some text. The difference is entirely in what text got encoded.
Static — the link is in the code
- Encodes
yoursite.com/menudirectly. - The phone reads it and goes straight there.
- No server in the middle, so nothing can be switched off.
- Works offline, forever, with no account.
- Can't be edited after printing, and gives you no scan stats.
Dynamic — the link is a redirect
- Encodes something like
qr-co.xyz/a7Bx2. - The phone visits their server, which forwards to you.
- You can change the destination later, and you get analytics.
- Depends on that company staying alive and staying paid.
- When the redirect dies, every printed copy dies with it.
Dynamic codes are genuinely useful — a restaurant chain rotating seasonal menus across 200 table cards has a real reason to want an editable destination. The problem is that most people generating a code for a business card, a wedding invitation or a shop window don't need editing at all, and were never told they'd signed up for a dependency.
How to tell which kind you have
Scan your own code and look at the address
Point your phone camera at it, but don't tap through — read the URL your phone previews. If it shows your own domain, it's static and it'll be fine. If it shows a short domain you don't recognise, that's a redirect, and someone else controls it.
Names to watch for include any short branded domain that isn't yours — the generator's own link shortener. A very short random-looking path like /a7Bx2 after an unfamiliar domain is the giveaway.
The other tell: if you had to create an account to download the code, it was almost certainly dynamic. Static codes need no account, because there's nothing to keep track of.
Other reasons a code stops scanning
Redirects are the common culprit, but rule these out too:
- The destination moved. The code is fine and still points where it always did — that page just 404s now. A static code can't fix this for you; you have to restore the URL or redirect it on your own domain.
- It was printed too small or too tight. Codes need a quiet zone of about four modules of blank space around them. Designers trim it constantly. Below roughly 2 cm square at typical scanning distance, phones start to struggle.
- Low contrast or inverted colours. A brand-coloured code on a brand-coloured background may have scanned on a new phone in a bright showroom and fail everywhere else. Light-on-dark codes are refused outright by many scanning apps.
- Damage beyond its error correction. A code set to level L tolerates about 7% damage; a scuffed sticker or a crease through a corner marker can exceed that. Higher levels survive more.
- Laminate glare or a curved surface. Shiny menus and bottles distort the pattern. This is intermittent rather than total, which is a useful clue.
A quick test that separates these: if the code fails on every phone, in every light, instantly — that's a dead redirect or a dead destination. If it works sometimes, it's a physical or optical problem.
How to make one that can't expire
Use a static code, and encode a URL you control. Those two things together are the whole trick.
Static means there is no middleman to fail. Encoding your own domain means that if the destination ever needs to change, you can change it yourself with a redirect on your own server — you keep the flexibility that dynamic codes sell, without handing anyone a switch. Point the code at yoursite.com/menu rather than at the current PDF's exact filename, and you can move that PDF forever.
For anything going to print, a few practical notes: download SVG rather than PNG so the printer can scale it without softening the edges, keep the quiet zone at four modules or more, use dark-on-light with strong contrast, and step error correction up to Q or H for stickers, outdoor signage and curved surfaces. Then test the actual printed piece — not the screen mockup — with more than one phone before you order a thousand of them.
Make a permanent QR code, free Static codes only, generated entirely in your browser. No signup, no redirect, no tracking, nothing stored — so there's nothing anyone could ever switch off. URL, WiFi, contact card, email and SMS, with PNG and SVG download. Open the QR code generator →Frequently asked questions
Can a QR code expire on its own?
No. The pattern is just encoded text and it never changes or degrades. What expires is the service a dynamic code redirects through. A static code has no expiry because there's nothing to expire — it keeps working as long as the thing it points to exists.
My generator wants a subscription to "reactivate" my code. Do I have to pay?
Only if you need those already-printed codes to keep working, which is exactly the position the free tier was designed to put you in. The alternative is to generate a new static code pointing at your own URL and reprint. Paying keeps you in the same trap next renewal, so if you do pay, treat it as buying time to reprint.
Can I convert a dynamic QR code into a static one?
Not the printed one — its pattern permanently contains the short link. You can make a new static code for the same destination, but it will be a different pattern and will need reprinting. If you still have access to the dynamic account, point its redirect at your real URL first so the old codes keep working while you swap them out.
Are static QR codes less capable?
They hold the same content types — URLs, WiFi credentials, contact cards, email, SMS. The only things you give up are editing the destination after printing and scan analytics. Both require a server in the middle, which is precisely what makes a code able to fail.
Do static codes work without an internet connection?
The scan itself does — the phone decodes the text locally with no network at all. Whether the result then needs the internet depends on the content: a WiFi code or a contact card works entirely offline, while a URL obviously still needs a connection to load the page.
TidyTools