Every QR code falls into one of two categories: static or dynamic. The difference isn't cosmetic. It determines whether you can edit your code after printing, whether you get scan analytics, how much you'll pay, and what happens if a third-party service goes offline.
A static QR code stores the destination data directly inside the code pattern. When someone scans it, their phone reads the URL (or text, or Wi-Fi credentials) straight from the modules. No middleman, no redirect, no server involved.
Think of it like carving an address into stone. The information is right there in the physical pattern. A static QR code pointing to https://yoursite.com/menu will always point to that exact URL. Twenty years from now, if that URL still works, the code still works.
A dynamic QR code encodes a short redirect URL — something like https://qr-service.io/abc123 — that forwards the scanner to your actual destination. The redirect is controlled by a dashboard where you can change the target URL, view scan statistics, and set up A/B tests.
When someone scans a dynamic code, the phone hits the redirect server, the server logs the scan (timestamp, device, location), then responds with a redirect to your actual page. That extra hop is what enables analytics and editability — and it's also the source of every downside.
| Feature | Static | Dynamic |
|---|---|---|
| Data storage | Encoded in pattern | Short redirect URL in pattern |
| Edit after printing | No — permanent | Yes — change destination anytime |
| Scan analytics | No (use UTM params) | Yes — scans, devices, locations |
| Works offline | Yes (for non-URL data) | No — requires internet for redirect |
| Third-party dependency | None | Redirect server must stay online |
| Code density | Higher (full URL) | Lower (short URL = simpler) |
| Typical cost | Free | $5-$50/month |
| Lifespan | Unlimited | Tied to subscription |
Most QR code use cases don't actually need dynamic features:
yourdomain.com/go/menu — and handle the redirect server-side with a simple nginx rule. You get editability without the subscription or vendor dependency.
Dynamic codes make sense when the cost of reprinting exceeds the cost of the subscription, or when you need analytics that UTM parameters can't provide. For everyone else, static is the pragmatic choice.
A mid-tier dynamic QR service charges about $15/month — $180/year. For that price, you could print 1,800 business cards, 360 flyers, or run a self-hosted redirect on a $5/month VPS handling unlimited codes.
For small businesses and solo operators, the answer is almost always static. A coffee shop doesn't need to pay $15/month so their menu QR code can be "editable" — they can just update the menu page on their website.
There's a third option most guides skip: self-managed redirects. Encode a short URL on your own domain — like yourdomain.com/go/spring — then configure a redirect rule on your server. In nginx, that's a two-line location block.
When you want to change the destination, edit the redirect rule. The QR code doesn't change. No subscription. No vendor dependency. You own the whole chain. For tracking, add UTM parameters to the redirect target.
For most people, static QR codes are the right answer. They're free, permanent, don't depend on anyone else's server, and handle the vast majority of real-world needs.
Generate free static QR codes — no signup, no watermarks, unlimited use.
Generate a QR Code