Skip to content

Static vs dynamic QR codes

One of these encodes your content. The other encodes a link to a company that redirects to your content. That single difference explains everything else — including why so many people find their codes have stopped working.

What each one actually contains

A static QR code holds your content directly. Encode example.com/menu and the pattern literally contains those characters. A scanner reads them out and opens the address. Nothing else is involved.

A dynamic QR code holds a short address belonging to the provider — something like qrs.example/a7Bx9. Scanning it sends the phone to that address first, and their server responds with a redirect to your real destination. Every scan passes through them.

That indirection is not a trick. It is what makes the useful features possible: because they control the redirect, they can point it somewhere new after your code is printed, and they can count every scan on the way through. It is also, unavoidably, a permanent dependency on that company.

Side by side

StaticDynamic
ContainsYour contentA link to the provider
Change destination after printingNo — reprintYes
Scan trackingNoneCounts, times, rough location, device
Ongoing costNoneUsually a subscription
Works if the provider disappearsYesNo
Visual densityGrows with content lengthAlways small — the short link is short
Who sees the scanNobodyThe provider, on every scan
Account requiredNoYes

Where dynamic is genuinely the right answer

This site makes static codes, so treat the following with appropriate skepticism — but there are real cases where a redirect service is the correct engineering choice, and pretending otherwise would be useless to you.

  • The destination will definitely change. A seasonal menu, a rotating promotion, a conference agenda that shifts. If you know at print time that the target will move, indirection is the answer.
  • You need per-code scan analytics. Comparing response rates between two poster sites, or knowing when scans happen. Landing page analytics can tell you a page was visited, but not which physical code sent someone there — unless you give each code its own URL, which is a static approach to the same problem.
  • The code is expensive or impossible to replace. Etched into machinery, embedded in a moulded product, printed on 100,000 units already in a warehouse. Here the ability to redirect is worth real money.
  • The URL is very long and the code must be small. A long link makes a dense code. A short redirect keeps it simple. Though a short link on your own domain solves this without the dependency.

Where static is the right answer

  • The destination is stable. Your homepage, your booking page, your menu at a fixed address. Nothing to change.
  • There is no destination at all. Wi-Fi credentials, contact cards, plain text. There is nothing to redirect to — a dynamic Wi-Fi code makes no sense.
  • It has to outlive its supplier. Equipment plates, building signage, published books, archival labeling. A static code works in twenty years because it does not need anything to still be running.
  • Scans shouldn’t be logged. Anywhere the fact that someone scanned is itself sensitive — a support helpline, a health resource, a legal notice.
  • You don’t want a recurring bill. The honest common case. Most codes point at something that will not move, and paying monthly to keep a redirect alive for them is money for nothing.

Getting both: static codes on your own domain

There is a middle path that most comparisons skip. Encode a static code pointing at a URL you control — yoursite.com/menu — and then redirect that yourself.

You keep the ability to change the destination, because you own the redirect. You get analytics, because it is your server. And the code has no dependency on any third party, because the only company that has to keep existing is yours. The cost is that you need somewhere to host the redirect, which a static host or your existing site handles for free.

For anyone printing codes at scale who wants flexibility, this is usually a better arrangement than renting the redirect from someone else.

“My QR code expired”

This is the phrase that brings most people to a page like this one, and it is worth being precise about, because three different things get the same name.

  • The redirect was switched off. A dynamic code whose trial ended or subscription lapsed. The code still scans; the address now returns an error page. This is what “expired” almost always means.
  • The destination went away. Any code, static or dynamic, pointing at a page that was deleted or moved. The code is fine and is doing its job perfectly.
  • The code is damaged or too small. Not expiry at all — a printing or sizing problem. See the size guide.

A QR code itself has no expiry mechanism. There is no date in the specification and nothing to count down. It is a way of writing characters as a picture, and pictures do not lapse.

Common questions

What is the difference between a static and dynamic QR code?

A static QR code contains your content directly — the link is encoded in the pattern itself. A dynamic QR code contains a short link belonging to a QR service, which redirects to your real destination. That indirection is what allows the destination to be changed later and scans to be counted, and it is also what makes the code depend on that service permanently.

Can you tell a static and dynamic code apart by looking?

Not reliably by eye, but you can decode one and read it. A dynamic code decodes to a short address on a provider's domain rather than your own. Any QR scanner will show you this — decoding a code before you commit to printing it is a good habit either way.

Do dynamic QR codes expire?

The code doesn't, but the redirect can be switched off — which has the same effect and is what people mean when they say their code expired. It usually happens when a free trial ends or a subscription lapses. Most providers keep the redirect working while you pay and disable it when you stop.

Which should I use?

If the destination is fixed and the code is going somewhere permanent — packaging, signage, an engraved plate — use static, because nothing can be taken away from you. If you genuinely need to change the destination after printing, or you need scan analytics for a campaign, a dynamic code is the right tool and the subscription is the honest price of it.