Static and dynamic QR codes look identical to a phone. The difference is invisible but decisive: what the pattern contains — a full destination, or a short link that redirects. This article is the technical comparison: encoding, capacity, error correction, and the operational consequences of the redirect layer.
What the code actually contains
A QR code is a two-dimensional barcode encoding a byte string. Two encodings are in play:
STATIC: "https://example.com/very/long/path?utm_source=x&utm_medium=y&utm_campaign=z" (in the pattern)
DYNAMIC: "https://yas.sh/launch" (in the pattern)
The static code is the destination — change the destination and the code is wrong forever. The dynamic code encodes a short link; the redirect decides the destination. That one indirection changes everything operational.
Capacity and density
| Version | Modules | Max bytes | Max URL-ish chars |
|---|---|---|---|
| 10 | 57×57 | 271 | ~180 |
| 20 | 97×97 | 858 | ~570 |
| 30 | 137×137 | 1,723 | ~1,150 |
| 40 | 177×177 | 2,953 | ~2,000+ |
Long URLs in static codes push the version up: the code gets denser, the minimum print size grows, and scanning distance shrinks. A 2,000-character static URL needs a code that struggles on anything smaller than a poster. A dynamic code with a 15-character slug stays a small, high-version-tolerant pattern no matter how long the real destination is.
Error correction: the print insurance
Error correction levels trade density for resilience:
| Level | Recovery | Use case |
|---|---|---|
| L | 7% | Clean digital screens |
| M | 15% | Standard print — the default |
| Q | 25% | Textured or folded surfaces |
| H | 30% | Logos embedded, heavy damage expected |
Higher correction makes the pattern denser — which is why "add a logo AND use level H" needs a size test, not a hope. The logo overlay guide covers the sizing math.
The operational table
| Static | Dynamic | |
|---|---|---|
| Destination change | Reprint or redo | Edit in a dashboard (or PATCH via API) |
| Analytics | None | Scans, devices, referrers, series |
| Expiry | Not possible | Possible (410 after a date) |
| Per-code identity | No | Yes — each code is a unique link |
| Capacity pressure | Long URLs = dense codes | Short slug always |
| Cost | Same | Same (free tier includes QR) |
| Offline | Works (no network needed to read) | Works to read; needs network to redirect |
When static genuinely wins
- Ultra-permanent surfaces: etched serial plates, product engravings — where the encoded data is an identifier, not a URL.
- Pure data payloads: Wi-Fi credentials, contact cards (vCard), plain text — not URLs at all.
- Fully offline contexts: the reader will never have connectivity; the code must carry everything.
- One-shot internal codes: temporary labels where reprint cost is zero.
When dynamic wins (most real-world marketing)
- Any printed material with a URL — menus, packaging, posters, business cards. Destinations change; print doesn't.
- Anything you want to measure — scans are clicks in the analytics pipeline (guide).
- Anything with a lifecycle — campaign windows, event agendas, seasonal offers (expiry).
- Multi-format print — one short link renders at 128–1024px PNG or SVG via the QR API.
The decision rule
Ask one question: will this code outlive its destination? If yes — dynamic. If the encoded data isn't a URL at all — static. Everything else is a variant of those two.
Conclusion
The picture is the same; the redirect layer is the product. Dynamic QR codes trade a tiny indirection for re-targeting, analytics, expiry, and print-friendly density — which is why printed marketing has almost entirely moved to them. Generate both from the QR endpoint and compare the patterns yourself; the business guide has the print specs that make either one scan.
