Guide
Static vs Dynamic QR Codes: Which One Do You Need?
One is a link with no memory. The other is a link with a middleman. The choice is about what happens after you print it.
By Buğra SözeriPublished
Every QR code generator produces the same kind of square — black modules on a light background, readable by any phone camera. What differs is what’s actually encoded inside it, and that split falls into two categories that get marketed very differently: static and dynamic. The terms aren’t part of the ISO/IEC 18004 standard that defines the symbol itself — they describe a business decision about the payload, and mixing them up is how people end up with a box of flyers pointing at a dead link.
What a static QR code actually is
A static code encodes the final destination directly into the symbol’s data bits — a full URL, a plain-text note, a WIFI: string, a BEGIN:VCARD block. There is no server standing between the scan and the result: the phone’s camera decodes the modules, reads the string, and acts on it immediately. That also means a static code is free to generate and free forever — nobody has to keep a lookup table running to make it work, which is exactly how our QR code generator operates: entirely client-side, nothing stored, nothing to expire.
The trade-off is permanence. Whatever you encode is what the code does, forever. Change the destination page’s URL, retire a product, or move to a new Wi-Fi password, and every already-printed static code is now wrong. There’s no way to push a fix to a code that’s already on ten thousand product boxes.
What a dynamic QR code actually is
A dynamic code doesn’t encode your real destination at all. It encodes a short redirect URL — something like https://qr.example.com/a1b2c3— that belongs to a third-party platform. When a phone scans it, it hits that platform’s server first, which looks up a1b2c3in a database, logs the scan (time, rough location, device type), and then issues an HTTP redirect to wherever you’ve currently pointed that short code. Change the destination in the platform’s dashboard, and every already-printed copy of the same code instantly starts sending people somewhere new — because the printed square never held the real URL to begin with.
| Property | Static | Dynamic |
|---|---|---|
| Destination editable after printing | No | Yes |
| Scan analytics (count, time, device) | No | Yes |
| Depends on a third-party server staying up | No | Yes |
| Typical cost | Free, indefinitely | Free tier, then subscription |
| Extra redirect hop at scan time | None | ~100-400ms |
When a static code is the right call
Anything permanent, one-off, or where you control the destination URL’s stability: a Wi-Fi password on a café table tent, a vCard on a physical business card, a product-page link where the URL structure is launch-and-forget, or an internal document link inside a company that isn’t going to reorganize its site overnight. If you don’t need to know how many times the code was scanned and you’re confident the destination won’t move, a static code is strictly simpler — one less moving part, one less vendor dependency, and nothing that can lapse if a subscription payment fails.
When a dynamic code earns its cost
Two situations justify paying for the redirect layer. First, campaigns where the destination is genuinely likely to change — a limited-time promotion landing page that gets swapped after launch week, a menu that’s revised seasonally, signage that’s expensive to reprint (vinyl banners, etched materials, vehicle wraps). Second, anywhere you need to measurethe code’s performance — how many scans a flyer generated, which of three billboard placements actually got used, what time of day traffic peaks. A static code can’t report any of that back to you; it has no server to report to.
The risk worth naming: if the redirect platform shuts down, changes its short-domain, or you stop paying, every printed copy of that code goes dead simultaneously — not a gradual problem, an instant one, and one you often can’t detect until someone tells you the code stopped working. For anything printed on a long-lived physical object (packaging, signage meant to last years), that risk deserves real weight against the convenience of editability.
The practical rule
Default to static. It’s free, has no dependency, and never expires. Reach for dynamic only when you specifically need post-print editability or scan analytics, understand which vendor you’re now depending on, and have a plan for what happens if that vendor’s service changes. Either way, the symbol itself follows the same ISO/IEC 18004 encoding rules — the standard doesn’t know or care which kind of link you fed it.
Frequently asked questions
- What is the difference between a static and dynamic QR code?
- A static QR code encodes the final destination directly — a URL, a Wi-Fi string, a vCard — with nothing in between. A dynamic QR code encodes a short redirect URL controlled by a third-party service; that service looks up the real destination and forwards the scanner there, which means the operator can change the destination or log the scan without reprinting the code.
- Can I edit a static QR code after printing it?
- No. The code is the data — there's no server in the loop to update. If the destination changes, the old codes point to a dead or wrong page forever, and the only fix is to generate a new code and replace every printed copy.
- Do dynamic QR codes cost money?
- Usually, yes, past a free tier. The redirect service has to host and pay for the lookup indefinitely, so most vendors charge a monthly or annual fee once you exceed a handful of free codes, and some retire codes if a subscription lapses — which silently breaks a code that's already printed on thousands of flyers.
- Do dynamic QR codes scan slower?
- Marginally. A static code resolves the instant the phone decodes it. A dynamic code adds one network round-trip to the redirect service before the browser opens the real page — typically 100-400ms, not perceptible to a scanning user, but a real dependency: if the redirect service is down, the code doesn't work at all, even though the destination page is fine.
Sources & references
Authoritative references cited by this piece. Verified by Buğra Sözeri on the dates shown and re-checked at every deploy.
- ISO/IEC 18004:2024 — QR Code bar code symbology specification — Defines the symbol itself; the standard has no concept of "static" or "dynamic" — that distinction lives entirely in what the encoded payload points to(as of )
- Federal Trade Commission — Digital Advertising Alliance guidance on redirect tracking — General FTC guidance on disclosure obligations for tracked links and redirects, relevant to dynamic QR analytics(as of )
- MDN Web Docs — HTTP redirections (3xx) — Technical reference for how the 301/302 redirect that powers every dynamic QR code actually works(as of )
Related
More guides on this topic
- Sending file uploads as Base64 in a JSON API payloadWhy Base64 is the go-to way to fit binary files into a JSON body, the size and request-limit tradeoffs, and when multipart form data is the better call.
- Converting IPv4 subnet masks between binary and decimal255.255.255.0 is four binary octets in disguise. How dotted-decimal notation maps to binary, why masks are always contiguous 1s, and a full CIDR table.
- How to convert binary to decimal by hand, step by stepBinary to decimal is a sum of powers of two. The positional-value method with a worked example, a reference table for one byte, and where it breaks down.
- Why Base64 encoding makes files about 33% biggerBase64 turns every 3 bytes into 4 characters — a fixed 4/3 overhead, plus padding. The math behind the 33% inflation, and when it's still worth it.
Published September 25, 2026