Home / Guides / Permanent QR codes
GDE.06Guide

How to make a QR code that never expires (free, no subscription)

For anyone who has printed a QR code on a menu, flyer, sign or business card and does not want it to stop working in six months. You will learn what makes a code expire, how to check the ones you already have, and how to build a permanent one for free.

A QR code is just a picture of some text. The picture itself can never expire, any more than a printed word can. So when a code that worked last month suddenly opens a "this link is inactive" page, something else has happened: the code did not contain your link at all. It contained a link to somebody else's server, and that server stopped forwarding. Understanding this one fact makes it easy to avoid the problem.

Why QR codes expire

Many "free QR code generator" sites make money by turning your code into a dynamic code. Instead of encoding your real address, they encode a short link on their own domain, something like their-site.example/a7Kd2. When someone scans it, the phone goes to the vendor's server, which looks up where you wanted to go and forwards the visitor. That extra hop is how the vendor can show you scan statistics and let you edit the destination later. It is also how they can switch the code off. Free trials end, subscriptions lapse and cards expire, and when that happens the vendor stops forwarding. Your printed code is now a picture pointing to a page that no longer works, and you cannot fix it without reprinting.

Nothing about that is illegal or even unusual, and for large campaigns the analytics can be worth paying for. It becomes a problem when the person who printed 500 table tents never realised their code depended on a monthly payment.

Static vs dynamic codes

 Static codeDynamic code
What is encodedYour actual URL, Wi-Fi details or textA short link on the vendor's domain
Can it expire?No, not on its ownYes, when the vendor stops forwarding
Edit the destination later?Not in the code (but see the redirect trick below)Yes, through the vendor's dashboard
Scan statisticsNo, unless your own site measures visitsUsually built in
PrivacyDirect to your pageEvery scan passes through a third party
Ongoing costNoneOften a subscription

Static codes are also the right choice for things that cannot be forwarded at all. A Wi-Fi code or a contact card contains the data itself, so there is nothing to redirect.

QR Code StudioStatic codes for links, Wi-Fi, vCards, email, SMS and phone numbers, with your colors and logo. Download PNG or SVG. No account, no expiry.
Open the tool

Check a code you already have

You do not need any special tool to find out what a code contains. Point your phone camera at it and, before you tap anything, read the address that appears in the preview banner. If it shows your own website, it is static and will keep working. If it shows a domain you do not recognise, with a short random-looking path, it is dynamic and depends on that vendor. A second check is to look at the code itself: dynamic codes encode a short link, so they tend to look sparse with large squares, while a code holding a long URL looks dense and busy. This is not reliable on its own, so trust the preview address.

If you are not sure whose link it is, paste the address into the Redirect and Headers Checker. It shows every hop and where the link finally lands, so you can see whether a middleman is involved.

Make a permanent code

  1. Decide what the code should hold. A URL, Wi-Fi network, contact card, email, text message or phone number. Each has its own format, and the generator builds the right one.
  2. Use a final address. If it is a link, paste the exact page you want, with https:// and no tracking parameters you do not need. Shorter addresses make a simpler code that scans more easily.
  3. Choose contrast and error correction. Dark code on a light background, medium or higher error correction (M or Q), and a center logo only if you really need one.
  4. Download SVG for print. SVG stays sharp at any size, from a business card to a banner. Use PNG at 1024 pixels or more if SVG is not accepted.
  5. Test with two different phones before you send the file to a printer.

For Wi-Fi networks, the dedicated Wi-Fi QR Code Generator also makes a printable card.

Keep the option to change the link

The one thing a static code cannot do is change where it points. You can still get that flexibility without a vendor, by encoding an address on your own domain that you control. For example, encode https://example.com/menu rather than the long link to a specific PDF. Today /menu can serve the current menu page, and next year you can point it at a new page without touching the printed code. On an Apache host you can do that with one line in .htaccess:

Redirect 302 /menu https://example.com/menus/autumn-2026/

Use a 302 (temporary) redirect for a link you expect to change, and a 301 only when the move is permanent. The .htaccess Generator writes these rules for you. The same idea works on any platform that lets you create a page or redirect at a stable address. The code stays permanent because the address inside it is yours and never changes. You keep full control, and no one can switch it off except you, by letting your own domain lapse.

Tip: choose the path carefully before you print. Something short and meaningful, like /menu, /book or /wifi, is easy to keep stable for years. Avoid dates or campaign names in the address you encode.

Print and test checklist

  • Size: at least 2 cm (0.8 inch) wide for close scanning, larger for anything read from a distance. A rough rule is that the code should be about a tenth of the scanning distance.
  • Quiet zone: keep a blank border around the code at least four modules wide. Do not crop it or let text run into it.
  • Contrast: dark on light works best. Avoid light-on-dark or low-contrast brand colors unless you have tested them on several phones.
  • Surface: glossy lamination and curved bottles can cause glare. Matte stock is safer.
  • Destination: make sure the page it opens is fast and works on a phone. Check it with the SSL Certificate Checker so a lapsed certificate does not greet your visitors with a security warning.
  • Add a short text link under the code for people who cannot scan it.

If a code has already expired

Unfortunately a dynamic code cannot be revived from the outside. If the vendor's account is still yours, renewing it usually restores the forwarding. If it is not, the realistic options are to reprint with a static code, or to cover the old code with a sticker bearing a new one. If the old code encoded a short link that you can still read in the phone preview, check whether the vendor will forward it for a fee. Either way, switch to static codes for anything that will live longer than a campaign.

Frequently asked questions

Do QR codes expire?

A QR code itself never expires because it is just a picture of text. Codes stop working when they point to a vendor short link and the vendor switches the forwarding off, usually because a trial or subscription ended. A static code that holds your real address keeps working.

What is the difference between a static and a dynamic QR code?

A static code stores your actual data, such as a URL or Wi-Fi details, directly in the pattern. A dynamic code stores a short link on the vendor domain and forwards visitors to your page, which allows scan statistics and edits but depends on the vendor staying active.

How can I tell if my QR code is dynamic?

Scan it with your phone camera and read the address in the preview before opening it. If it shows your own site it is static. If it shows another company domain with a short random path it is dynamic.

Can I change where a static QR code points?

You cannot edit the code itself, but you can encode a short address on your own domain, such as example.com/menu, and change what that address redirects to whenever you like. The printed code stays the same.

Is a free QR code generator really free?

Static generators like this one are free because there is nothing to host. Many other sites give you a free dynamic trial and then charge to keep the code working, so check the preview address of any code before you print it.