
Short answer
A static code contains your content directly and works forever with no account. A dynamic code contains a redirect owned by a service, which lets you change the destination and see scan stats — for as long as you keep paying. Choose static when the destination is stable, dynamic when it genuinely will change.
The actual difference is where the content lives
A static QR code contains your content directly. The URL, the phone number, the whole vCard — all of it is encoded in the pattern itself. When somebody scans it, their phone reads the content straight off the paper. Nothing sits in between.
A dynamic QR code contains a short redirect URL belonging to a service. Scanning it sends the person to that service, which looks up where you currently point the code and forwards them on. That extra hop is the entire product. It is what makes editing and analytics possible, and it is also the thing that can fail.
Everything else people say about the two types follows from that one structural difference.

What dynamic codes genuinely give you
Two things, and both are real. It would be dishonest to pretend otherwise just because we happen to make static codes.
- You can change the destination after printing. If the campaign page moves, you update the redirect instead of reprinting ten thousand flyers.
- You get scan data: counts, rough locations, device types, times of day.
- The encoded string stays short no matter how long the real destination is, which keeps the code visually simple and easier to scan.
What you give up
A dynamic code stops working the day the redirect service disappears, changes its pricing beyond what you will pay, or suspends your account. And it does not fail gracefully or one at a time — every printed copy dies at the same moment.
That risk is entirely acceptable for a six-week campaign poster. It is not acceptable for a plaque screwed to a building, a label on a product with a ten-year shelf life, or a sticker on equipment in the field. We have seen people discover this the expensive way.
You are also routing every one of your users through a third party who now knows who scanned what, where and when. Depending on your jurisdiction and your audience, that may be something you have to disclose.
A decision rule that holds up
You can usually settle this with one question: if this code stopped working in two years, how bad would that be?
- 1
Is the destination genuinely going to change?
Not 'might one day' — actually change, on a timescale shorter than the life of the printed item. If not, static.
- 2
Will you act on the scan data?
Analytics you look at once and never use are not worth a dependency. If no decision hangs on the numbers, static.
- 3
How long will the printed item exist?
Longer than you will reliably keep paying a subscription? Static.
- 4
Still want both?
Point a static code at a short URL on a domain you control, and do the redirecting yourself. You keep the editability and you own the failure mode.
The middle path most people miss
That last step deserves more attention than it usually gets, because it is the option that quietly beats both.
Encode a static code pointing at something like your-domain.com/menu. Set up a redirect on your own server or DNS host. You can change where /menu goes whenever you like, forever, with no subscription and no third party in the middle. You lose the built-in analytics dashboard, but your own server logs already tell you how many people hit that path.
The only real cost is that you need somewhere to host the redirect. If you already have a website, you already have it.
Where we land
Use a static code when the destination is stable and the code will outlive any subscription: contact details, Wi-Fi access, product manuals on your own domain, museum labels, equipment tags.
Use a dynamic code when the destination will genuinely change on a short timescale, or when the analytics drive a decision you will actually make. Short campaigns and A/B tests are the honest use cases.
And if you are printing something that needs to last, own the redirect yourself.
Frequently asked questions
- Can I convert a static QR code into a dynamic one later?
- No. The destination is baked into the pattern, so changing it means generating and reprinting a new code. This is the main practical argument for pointing static codes at a URL you control, since that gives you the flexibility without the dependency.
- Do static QR codes expire?
- Never. There is nothing to expire — the content is in the pattern. A static code printed today will still decode to the same text in twenty years. Whether the website it points at still exists is a separate question.
- Are dynamic QR codes worse for privacy?
- For your users, yes, because every scan passes through a third party that can log it. A static code goes straight from the phone to your destination, so no intermediary sees the scan at all.
Sources
Specifications and primary documentation referenced above.