Make a QR Code That Doesn't Expire (Free)
Free QR generators that stop working after a trial are dynamic ones. Here's the difference, and how to make a static code that works forever.
A QR code that "expires" is always a dynamic one: instead of your link, it encodes a short redirect through the generator's own domain, so when the trial ends, the plan lapses or the company shuts down, every printed code stops working. A static QR code encodes your URL directly into the pattern — there is no server in the middle, no account attached, and nothing that can be switched off. It cannot expire because there is nothing to expire.
On Android, Convertlix's QR Generator takes a link and produces a QR code on the handset, so there is no service behind the code to lapse. The scope, up front: Android 8.0 or later, sign-in required (there is no guest mode), a server-set monthly allowance of conversions shown in the app, and output as PNG, JPG or WEBP into Downloads. One honest note on the free tier: custom styles, colours and a centre logo are Premium features, so a free code is a plain black-and-white one. The rest of this page is about static versus dynamic, which is the decision that actually matters.
Static versus dynamic, and what you're really choosing
| Static QR | Dynamic QR | |
|---|---|---|
| What's in the pattern | Your URL, directly | A short link on the provider's domain |
| Can it expire | No — nothing to switch off | Yes: trial ends, plan lapses, provider closes |
| Change the destination later | No — you reprint | Yes, without reprinting |
| Scan analytics | None | Scan counts, times, rough location, device |
| Needs an account | No | Yes, ongoing |
| Pattern density | Denser for long URLs | Always small and sparse |
| Third party sees your scans | No | Yes — every scan passes through them |
Dynamic codes are not a scam; the redirect is what buys you editability and analytics, and for a campaign where the landing page will change, that is genuinely worth paying for. The problem is that this is frequently sold as simply "a free QR generator", and the reader finds out it was a 14-day trial when the code is already on 500 printed menus. As of September 2026 that pattern is common enough across the free-generator market that "will this still work next year?" is the first question to ask any of them.
Choose static when: the destination is permanent and you control it — your own domain, a stable product page, a Wi-Fi password, a phone number, a vCard. Also whenever the code is going onto something you cannot cheaply reprint: signage, packaging, business cards, a plaque, a vehicle.
Choose dynamic when: you need to repoint the code later, or you need scan counts to justify the spend. Accept that you now depend on that provider indefinitely.
The hybrid that gets you both: make a static code pointing at a short URL on
your own domain — yoursite.com/menu — and redirect that yourself. You keep the
ability to change the destination, you keep your analytics in your own logs, and no
third party can turn it off. This is what most people asking for a non-expiring editable
code actually want, and it needs nothing but a redirect rule on a site you already own.
What decides whether a code scans
QR codes are more robust than people expect and fail in specific, predictable ways.
The quiet zone. The pattern needs a clear margin around it of at least four modules — four of the small squares — with nothing in it. Designers crop this off constantly, and a code with no margin fails on cheap scanners while working fine on your phone, which is the worst kind of bug.
Error correction. The standard defines four levels, L, M, Q and H, recovering roughly 7%, 15%, 25% and 30% of the data respectively. Higher correction means a denser pattern for the same URL, and it is what lets a code survive a scuff, a fold or a logo placed in the centre. That is worth knowing about a centre logo generally: it works because error correction is covering for the data it obscures, so the logo has to stay small — a large one pushes past what correction can recover and the code silently stops scanning.
Contrast and polarity. Dark pattern on a light background. Scanners look for that polarity, and inverted codes fail on a meaningful share of readers. Keep genuine contrast: mid-grey on white is where problems start, and light-on-dark is a coin flip.
Physical size. The working rule of thumb is that a code needs to be about 1/10th of the scanning distance across. Scanned from 30 cm, 3 cm is fine. On a poster read from 3 metres, it needs to be around 30 cm. This is the most common failure on printed material — a code sized to look tidy in the layout rather than sized for where the reader will be standing.
URL length. A longer URL means more modules and a denser pattern, which needs more size or better print quality to scan. A short URL is materially easier to scan, which is the practical argument for the hybrid approach above.
Print quality. Dot gain on uncoated or absorbent stock blurs module edges. Print from a vector or high-resolution source, never from a screenshot of a code, and never resize a raster code up.
How to make a QR code that keeps working
- Fix the destination first. Decide the exact URL, including
https://and any trailing slash, and load it on a phone. A code encoding a broken link is a perfect code and a wasted print run. - Prefer a short URL on a domain you control.
yoursite.com/menuwith your own redirect behind it gives you editability without depending on anyone else's service, and it produces a sparser, easier-to-scan pattern than a long tracking URL. - Generate a static code. In Convertlix, open QR Generator, paste the link and save the code as PNG, JPG or WEBP. Nothing is registered with a service, so there is nothing to renew.
- Keep the quiet zone and the contrast. At least four modules of clear margin, dark on light. If a designer needs to place it in a layout, give them the code with the margin already in the file so it doesn't get cropped.
- Size it for the scanning distance. Roughly a tenth of the distance the reader will stand at. Measure the distance; don't guess from the layout.
- Test it before it goes to print. Two or three different phones, both camera apps and a dedicated scanner, at the actual final size and on the actual final material. A code that scans on a screen and not on matte card is a common and expensive surprise.
When this doesn't work
- You need to change the destination after printing. A static code cannot be repointed. Either use your own redirect, or accept a dynamic provider and the dependency that comes with it.
- You need scan analytics. Static codes report nothing. Server logs on your own redirect are the way to get this without a third party, and they are less detailed than a commercial dashboard.
- You want a styled or branded code on the free tier. Custom styles, colours and a centre logo are Premium in Convertlix — the free output is a plain code. Stated as the limit it is.
- Very long URLs on small print. A 200-character tracking URL produces a dense pattern that needs size and print quality to scan. Shorten it rather than fighting it.
- Codes for payments or ticketing. Those are generated by the payment or ticketing system with their own signed payloads. Never hand-make one.
- Anything encoding something private. A QR code is not encryption. The URL is plainly readable by anyone who scans or decodes the image, including from a photograph of your printed code.
FAQ
Do QR codes expire?
The code itself never does — the pattern is just an encoding of some text, and it will decode the same way in twenty years. What expires is a dynamic code's redirect: it encodes a short link on the generator's domain, so when the trial ends, the subscription lapses, or the provider shuts down, the redirect stops resolving and every printed code fails. A static code encodes your URL directly and has no service behind it to fail.
What's the difference between a static and a dynamic QR code?
A static code contains your destination URL inside the pattern, so it needs no account, cannot be switched off, and cannot be changed without generating a new code. A dynamic code contains a short link on the provider's server, which redirects to your destination — that lets you change where it points and collect scan statistics, at the cost of an ongoing dependency on that provider and the fact that every scan passes through them.
Can I change where a QR code points after printing it?
Not with a static code — the destination is part of the pattern, so changing it means a new code and a reprint. The way to get editability without depending on a QR service is to encode a short URL on your own domain and control the redirect yourself; then you can repoint it whenever you like, and nobody else can turn it off. Dynamic codes from a provider also allow it, with the expiry risk described above.
Why won't my printed QR code scan?
The four usual causes, in order of frequency: the code is too small for the distance people are standing at (it needs to be roughly a tenth of the scanning distance across), the quiet-zone margin was cropped off in the layout, contrast is too low or the code was printed light-on-dark, or a centre logo is large enough to obscure more data than error correction can recover. Printing from a screenshot or an upscaled raster image causes the rest.
Does Convertlix upload my link?
No. The QR code is generated on the phone from the text you paste, and nothing is sent anywhere — no code is registered with a service, which is exactly why there is nothing that can expire. The app's network calls carry identity, licence, quota, configuration and payment data, never your content. Sign in once, switch on airplane mode, and the generator still works.
Is there a free way to make a QR code without an app?
Yes, plenty, and some are excellent — the thing to check is whether they are static.
qrencode is free, open source and offline (qrencode -o code.png -s 8 -l H 'https://example.com'), and Python's qrcode library does the same in two lines. Both
give you full control over error correction level and module size. Several browser-based
generators produce genuinely static codes for free too; the ones to be careful with are
those that require an account, offer a dashboard, or mention editing the destination
later, because those are dynamic by definition and the code depends on them continuing to
exist.
If the code is going on something you can't cheaply reprint, encode your own URL directly, size it for where the reader will be standing, and test it on the final material before the print run.