← Blog

August 19, 2026 · 6 min read

Static vs. dynamic QR codes: which one do you actually need?

Every QR code looks the same: a black-and-white grid a phone camera can read in about a second. But two codes that look identical can behave completely differently once they’re printed — and the difference only shows up after you’ve already paid for signage, packaging, or a print run. It’s worth five minutes to understand before you generate anything.

What a static QR code is

A static QR code has its destination encoded directly into the matrix pattern itself. When you generate one for https://example.com, that URL — character for character — is what gets turned into black and white squares. There’s no intermediary, no lookup, no server involved when someone scans it. The phone’s camera decodes the pattern and opens that exact link.

That also means a static code can never be redirected. If the destination page moves, or the sale ends, or you rebrand, the printed code still points at the old URL — permanently, because the URL is the code. The only fix is printing a new one.

What a dynamic QR code is

A dynamic QR code doesn’t encode your real destination at all. It encodes a short redirect link you control — something like /r/a1b2c3 — and that redirect looks up where to send the visitor at the moment they scan, not at the moment you printed it. Change the destination in a dashboard, and every code already printed, mailed, or bolted to a wall starts sending people somewhere new, instantly, with nothing reprinted.

The trade-off: a dynamic code depends on that redirect staying online. If the service goes away, the code stops working — even though the physical pattern never changed. A static code has no such dependency; it’ll still work in ten years as long as the destination URL does.

The difference that actually matters

  • Editability. Static: fixed forever once printed. Dynamic: change the destination any time, no reprinting.
  • Analytics. Static: you’ll never know if anyone scanned it — the phone talks straight to the destination, nothing passes through you. Dynamic: every scan passes through your redirect first, so it can be counted, timestamped, and roughly located.
  • Longevity. Static: works forever, no ongoing dependency. Dynamic: works only as long as the redirect service does, and only while it’s active on your account.
  • Cost. Static: free, because it’s just an encoding — there’s nothing to host. Dynamic: it’s a service, not just a graphic, so it’s usually billed monthly.

Which one do you need?

Match the code to how permanent — and how correctable — the thing you’re printing it on actually is.

Reach for a static code when:

  • The destination will never need to change — a personal portfolio, a Wi-Fi password, a vCard for a business card you’re not planning to redesign.
  • You don’t need to know if it got scanned; the print piece itself (a flyer, a one-off event poster) is disposable enough that tracking wouldn’t change any decision.
  • You want zero ongoing cost or dependency — the code should outlive any subscription.

Reach for a dynamic code when:

  • The thing it’s printed on is expensive or slow to replace — product packaging, a storefront window decal, a vehicle wrap, a menu laminated for years of use.
  • You expect the destination to change — a seasonal promotion, a menu that gets updated, a landing page still being built when the print deadline hits.
  • You want to know whether the code is actually being used — scan counts and rough device/location data turn a print campaign into something you can measure instead of guess at.

A quick self-test

Ask one question: “If I made a mistake in this URL, or the destination changes next month, how bad is that?” If the answer is “I’d just edit the file and not care,” it’s static. If the answer involves a reprint budget, a delivery truck, or a client relationship, it’s dynamic — the ability to fix it after printing is worth more than the code itself.

Trying both

Static codes here are free with no account and no limit — generate as many as you want at /app, entirely in your browser; the URL you type never reaches a server. Dynamic codes come with a 7-day free trial, no card required, then $5/month per user once the trial ends — and if a trial lapses without upgrading, existing dynamic codes pause rather than delete, so nothing you’ve printed becomes permanently broken while you decide.

Not sure which one fits what you’re making? Start with a static code — it costs nothing to try, and you can always print a fresh dynamic one later if you find yourself wanting to change the destination after the fact.