Do QR codes expire? Static vs dynamic codes explained
A static QR code never expires: your link is written into the pattern itself, so it works for as long as the print exists and the link does. A dynamic QR code points at a short link run by the company that made it, so it keeps working only while that company keeps redirecting it.
By Daniel Zaremba, founder of BetterQR · Updated
Can a QR code expire?
The QR code pattern itself can't expire. It is just a picture of some text, usually a web address, and any phone camera will read that text for as long as the print is legible. What can stop working is the place the code sends people. If that place is a short link owned by someone else, they can switch it off.
That is the whole difference between static and dynamic QR codes, and it explains almost every case of "my QR code stopped working".
What is the difference between static and dynamic QR codes?
A static QR code contains your final destination, for example https://yourcafe.co.uk/menu. A dynamic QR code contains a short link on the generator's domain, which then redirects to your destination. The redirect is what lets you change the destination after printing and count scans, and it is also what can be turned off.
| Static QR code | Dynamic QR code | |
|---|---|---|
| What the code contains | Your destination URL or text | A short link on the provider's domain |
| Change destination after printing | No, you reprint | Yes |
| Scan counts and analytics | No (only your own website analytics) | Yes, per code |
| Depends on a provider staying up | No | Yes |
| Can stop working if you stop paying | No | Depends on the provider's terms |
| Pattern density | Denser for long URLs | Simpler, because the short link is short |
| Best for | Wi-Fi details, permanent pages, personal use | Print campaigns you want to measure or update |
Why do some "free" QR codes stop working?
A common pattern goes like this. A generator's free tier or trial quietly creates dynamic codes, because dynamic codes need the generator's servers and that gives the generator a reason for you to pay. You download the code, print it on menus, packaging or signs, and forget about it. When the trial ends, the short link is paused. Scans now land on a page saying the code is inactive, or one asking the owner to upgrade, until you subscribe.
Nothing in the printed code tells you this will happen, which is why it catches people out. The fix is not to avoid dynamic codes, which are useful, but to know which kind you have and what the terms say before you print thousands of them.
Two other things can break a code even when no trial is involved:
- The destination disappears. A static code pointing at a page you later delete will lead to a "page not found" error. Point codes at pages you intend to keep, or redirect old addresses on your own site.
- The provider closes. Dynamic codes rely on the provider's short-link domain existing. If the company shuts down and the domain lapses, the codes stop resolving.
How can you tell if a QR code is static or dynamic?
Decode it and read the address it contains. You don't need to open the page.
- Point your phone camera at the code and look at the address in the preview before tapping it. Or upload an image of the code to the QR code tester, which shows the encoded content in your browser.
- If the address is your own website or the exact page you chose, the code is static. It will keep working as long as that page exists.
- If the address is a short link on someone else's domain, often a random-looking path, the code is dynamic. It will keep working as long as that provider keeps redirecting it.
- If it is dynamic, find the provider's terms or help pages and look for what happens to codes when a trial ends, when you downgrade and when you cancel.
Do this before you send anything to print. Reprinting a sign or a packaging run costs far more than a minute of checking.
Do BetterQR's free QR codes expire?
No. The free generator at betterqr.app/individual makes static QR codes with no sign-up. The destination is written into the code itself, so it never passes through BetterQR's servers and keeps working for as long as the printed code and your destination exist. There is no account behind it and no trial to end.
The Free plan includes unlimited static codes, custom colours and patterns, and PNG, SVG and JPG downloads. Because static codes don't pass through BetterQR, they don't count toward any scan limit and BetterQR has no scan analytics for them. If you need scan counts, add UTM tags to the destination and read them in your own analytics, or use a dynamic code.
What happens to BetterQR dynamic codes if you downgrade or cancel?
Dynamic codes are part of the paid plans: Pro includes 15 for £11 a month, Business 75 for £99 a month and Enterprise is unlimited. A BetterQR dynamic code contains a short link on betterqr.app, which redirects to the destination you set.
If you downgrade or cancel, the change takes effect at the end of your billing period, and a cancelled account reverts to the Free plan. Your dynamic codes keep redirecting: BetterQR does not switch off printed codes when a subscription ends. What you lose is access to their scan analytics, which are part of the paid plans. If you have more codes than the new plan allows, you can't create new ones until you are back within the limit or upgrade again.
A dynamic code stops redirecting if you switch it off yourself in the dashboard or delete it. Scans of a code you have switched off land on a page saying the code is inactive.
Which kind should you use?
| Situation | Use | Why |
|---|---|---|
| Wi-Fi sign, business card, permanent web page | Static | Nothing to change, nothing to measure, no dependency |
| Packaging or signage that will be around for years | Static, or dynamic from a provider whose terms you've read | Long print life makes the dependency matter most |
| Posters, flyers and billboards you want to measure | Dynamic | Scan counts per placement show what worked |
| Menus, offers or events that change | Dynamic | Change the destination without reprinting |
| Testing two versions of a poster or page | Dynamic | Re-point the losing version after the test |
If you're measuring print, a code per placement is what makes the data useful. The billboard scan tracking guide shows how to set that up.
Can a static QR code stop scanning?
Yes, but for physical reasons rather than a switch being flipped. Outdoor prints fade in sunlight, laminates scratch, and stickers peel at the corners. Codes printed too small for the scanning distance, in low contrast colours or without a clear margin around them can also fail on some phones from day one. None of this is fixed by choosing dynamic over static. Print outdoor codes on UV-resistant material, keep dark modules on a light background with a quiet zone around the code, and check signs that have been up for a year or more.
How do you make a QR code that never expires?
- Choose a destination you control and intend to keep, ideally on your own domain.
- Generate a static code, for example with the free BetterQR generator. No account is needed.
- Download SVG for print so the code stays sharp at any size.
- Decode the downloaded file with the QR code tester and confirm the address is your own URL, not a short link.
- Test-scan a printed proof with two or three different phones before the full run.
If you later move the page, set up a redirect from the old address on your website, and the printed code will carry on working.
Related
- QR code testerUpload a QR code image to check it scans, see where it points and catch problems before printing. Runs in your browser. Free.
- Track billboard QR code scansTrack scans from each billboard separately: one dynamic QR code per site, clear naming, and a scan report you can compare week by week.
- QR Code Generator PRO alternativeBetterQR vs QR Code Generator PRO: 15 dynamic codes from £11/month, billed monthly, and codes that keep redirecting if you cancel. Checked and dated.
- Poster A/B testing with QR codesTest two poster designs or offers in the real world: split placements, give each version its own QR code and read the result without guesswork.