The short answer
A QR code is just a web address printed as squares. Ink can't expire, so the code you printed still scans exactly like it did on day one. What died is the address behind it. Four causes account for nearly every case, in order of how often we see them: the free trial at your QR code generator ran out, the QR service changed its plans or shut down, the link ran through a link shortener that dropped it, or the page the code points to was moved or deleted.
The first three share one root cause: the address in your printed code belongs to someone else's website, not yours. Keep that in mind - it's the whole fix.
1. The "free" QR generator's trial ran out - the most common one
Most online QR generators make "dynamic" codes: the code points at their domain, and their server forwards each scan to your page. That forwarding is the product. When the free trial ends, they switch it off - and every code you printed starts landing on an error page or, worse, their upgrade ad, shown to your customers.
That is the business model working as designed: let you print and distribute the code for free, then charge a monthly fee once reprinting everything would cost more than the subscription.
2. The QR service changed its plans - or disappeared
Paying doesn't fully protect you either. QR services get bought, fold, retire old domains, or move "dynamic codes" to a pricier tier. Whatever the reason, the result on your end is identical: printed material you can't update pointing at a redirect you don't control.
3. It went through a link shortener
Some codes encode a shortened link - bit.ly and friends. Shorteners disable links they flag as spam (sometimes wrongly), purge old or free-tier links, and occasionally shut down whole domains. Same story: the middleman between your customer and your page went away.
4. The page it pointed to moved
If your code was a "static" one that encoded your page's address directly, nothing expired - but a site redesign, a new menu PDF, or a deleted page breaks it just as surely. This is the only one of the four that's your own site's fault, and also the only one you can fix without reprinting: add a redirect from the old address to the new one, and every printed code comes back to life.
How to tell which one hit you
Scan the code with your phone and look at the address it tries to open - your camera shows it before you tap, and the browser shows it after.
If the address is someone else's domain - a QR service, a shortener - you're in cases 1 to 3. There is no fix on your side; the company that owns that domain owns your code. You'll be reprinting once. If the address is your own domain, you're in case 4, and a simple redirect fixes every printed copy at no cost.
The permanent fix: put the address on your own domain
When you do reprint, make it the last time. Point the new code at an address on your own website - something like yoursite.com/menu - and forward that address wherever you like. Nobody can expire it, paywall it, or shut it down, because nobody but you owns it. To be clear: any redirect on your own site does this. You don't strictly need a plugin, and you don't need us.
What a plugin adds is convenience: our free Dynamic QR Redirects plugin for WordPress creates the redirect page, generates the print-ready QR image in your browser, counts scans without cookies or personal data, and lets you change the destination any time from your dashboard. There's no account, no trial and no expiry, because the redirect lives on your own domain - nobody can turn it off but you.
If you'd rather not touch your site yourself
Setting this up means installing a plugin or adding redirects on your live site, and plenty of owners reasonably don't want to do either. It's a small job - under an hour for any competent WordPress developer, so be wary of anyone quoting it big. If you don't have a developer you trust, this is exactly the kind of small, fixed-scope job we take on, and a low-risk way to find out what working with us is like.
Common questions
Do QR codes expire?
The printed image never expires - it's just an address in squares. What expires is the redirect service many "free" generators put between your code and your page. A code pointing straight at your own domain has nothing to expire.
Can I fix a printed QR code without reprinting it?
Only if the code points at your own domain - then one redirect revives every copy. If it points at a QR service or shortener you don't control, no. You'll reprint once; make the new code point at your own site so it's the last time.
Are dynamic QR codes still worth it, then?
Yes - the ability to change the destination after printing is the whole appeal. The risk was never "dynamic," it was renting the redirect from someone else's domain. Host the redirect on your own site and you keep the flexibility without the hostage risk.