Static
Phone → your website
The scanner reads your URL straight from the code and opens it. Nobody sits in between.
The one decision that determines whether your printed code still works in five years.
A static QR code stores your data — a link, WiFi login or contact card — directly in the pattern. It never expires and needs no account, but you can't change it after printing. A dynamic QR code stores a short link to the provider's server, which forwards to your destination. You can change the destination and see scan counts, but the code only works while that provider keeps the redirect running — usually tied to a subscription.
Phone → your website
The scanner reads your URL straight from the code and opens it. Nobody sits in between.
Phone → provider's redirect → your website
The code holds the provider's short link. Each scan is logged and forwarded — as long as the redirect is active.
| Static | Dynamic | |
|---|---|---|
| What the code contains | Your actual data (link, WiFi login, contact card) | A short link owned by the QR provider |
| Can it expire? | No — nothing to expire. A link code needs the target page to stay online | Can stop working if the plan lapses or the provider closes |
| Change destination after printing | No — print a new code | Yes, from the provider's dashboard |
| Scan statistics | Not built in (use your own analytics or a short link) | Usually included |
| Works offline (WiFi, vCard, text) | Yes — data is read straight from the code | No — always needs the redirect server |
| Privacy | No third party sees the scan | Every scan passes through the provider |
| Typical cost | Free tools, or a one-time fee for design/export | Usually a monthly or yearly subscription |
Full disclosure: qrcodeonce only makes static codes. We think they're the right default for most printed uses — but if you need the dynamic features above, a dynamic service is the better tool.
No. A static QR code is just a pattern that encodes data. There is no account, server or timer behind it, so the code itself cannot expire. If it encodes a web link, it works as long as that web page exists.
Most often it was a dynamic code: it pointed to a provider's redirect, and the redirect was switched off — typically after a free trial ended or a subscription was cancelled. The other common causes are a deleted target page, too little contrast, or printing it too small.
Scan it and look at the link before opening it. If it shows your own domain or the final destination, it's static. If it shows a short link on the QR provider's domain, it's dynamic and depends on that provider.
When you must change where a printed code points without reprinting, or when you need built-in scan analytics. That's a real advantage — you pay for it with an ongoing subscription and a dependency on the provider.
Not the code itself. But if it points to a page you control, you can change that page's content any time — the printed code keeps working. That gives you most of the flexibility of a dynamic code without the subscription.
Not by themselves. You can point the static code at a URL with UTM parameters (e.g. ?utm_source=poster) and read the visits in your own analytics tool.
Design it free with your logo and colors. Pay once from $5 for clean PNG, SVG, PDF and a print sheet.