The short answer
A static QR code has its destination — a URL, some text, WiFi credentials, whatever — encoded permanently into the pattern itself. There's no middleman. Once it's generated, it works forever, with no ongoing dependency on any server or company.
A dynamic QR code doesn't encode your actual destination. It encodes a short redirect URL that points to a third-party server, which then forwards the scanner to wherever you've currently configured it to go. That extra step is what lets you change the destination after the code is already printed — but it also means the code stops working the moment that server does.
How a static code actually works
Every QR code is a grid of black-and-white squares that encodes data directly, the same way a barcode encodes a product number. When you generate a static code for a URL, that full URL — character by character — is converted into the pattern. A scanner reading the code doesn't contact any server to "look up" what the code means; it decodes the pattern locally and gets your destination immediately.
This is also why static codes have a practical length limit: cram in a very long URL and the pattern gets dense enough that it becomes harder to scan reliably, especially once printed small. Most tools, including the ones on this site, warn you or auto-adjust error correction if you push a code close to that ceiling.
How a dynamic code actually works
A dynamic code encodes something like https://short.ly/a1b2c3 instead of your real destination. When scanned, the phone's browser opens that short link, which hits the provider's server, looks up what a1b2c3 currently points to in their database, and redirects the browser there. You can log into that provider's dashboard later and change where a1b2c3 redirects — without reprinting the code.
That redirect step is also how dynamic-code providers offer scan analytics: every scan passes through their server first, so they can log the time, location, and device before forwarding you on.
| Static | Dynamic |
|---|---|
| Destination baked into the pattern — no server involved | Pattern encodes a redirect link; a server resolves it on every scan |
| Never expires, never goes down | Stops working if the provider shuts down, you stop paying, or the link expires |
| Destination can't be changed after printing | Destination can be edited anytime from a dashboard |
| No built-in scan tracking | Scan count, location, and device data available |
| Usually free, no account needed | Often requires a paid plan or account for editing/analytics |
When a static code is the right call
- Anything printed long-term: signage, packaging, product labels, business cards — anywhere you can't easily swap out the printed material.
- WiFi credentials: the network name and password don't need "editing" after the fact; they just need to work.
- You don't want a middleman: no dependency on a third-party company staying in business, keeping their pricing the same, or keeping your account active.
- You don't need scan analytics: if you just need the code to work, not to report back how many times it was scanned.
When a dynamic code actually makes sense
- Marketing campaigns you're actively tracking: if knowing scan counts and locations genuinely changes what you do next.
- A destination that will definitely change: a landing page for an event series where next year's code needs to point somewhere new, but you want to reuse the same printed materials.
- Large print runs where reprinting is expensive: if the cost of a wrong or outdated link is high and you want the option to redirect it later.
The tradeoff in one line: dynamic codes trade permanence for editability. If you don't specifically need to edit the destination after printing, that tradeoff isn't buying you anything — it's just adding a point of failure.
The myth: "QR codes expire"
This comes up constantly, and it's really a dynamic-code problem being blamed on QR codes in general. A static code — like every code generated on this site — has no expiration mechanism built in. It can't "expire" any more than a printed phone number can expire; it's just data. What people usually mean is that a dynamic code they used stopped working because the free trial on the redirect service ended, or the company shut down. That's a dynamic-code-provider problem, not a property of QR codes themselves.
Frequently asked questions
Can I tell just by looking whether a code is static or dynamic?
Not reliably by eye — both look like a standard grid of squares. The only sure way is to scan it and look at the resulting link: if it's a short redirect-style domain you don't recognize (a link shortener or the generator's own domain), it's almost certainly dynamic. If it's the actual destination URL, it's static.
Are dynamic codes "better" because they're more advanced?
No — they're a different tool for a different job, not an upgrade. Dynamic codes add a server dependency and ongoing cost in exchange for editability and analytics. For most everyday uses, that trade isn't worth it.
Does a static code have any downsides at all?
The main one is length sensitivity: very long encoded data makes a visually denser, harder-to-scan pattern. And once printed, the destination is permanent — if you need to redirect it later, you'd need to print a new code.
Do the tools on this site generate static or dynamic codes?
Static, always. Every code generated here — standard, logo-branded, WiFi, or bulk — has the data baked directly into the pattern, generated entirely in your browser with no server involved and no account required.