10 min readFeatures

Dynamic QR Code vs Static: How to Choose Between Them

Dynamic QR code or static? A decision framework with real trade-offs: editing, scan analytics, redirect speed, cost over time, and what happens if you leave.

Marius Voß
DevRel · edge infra

Use a dynamic QR code when the destination might change or you want to count scans; use a static one when the URL is permanent, you need no tracking, and you want no outside service on the scan path. The printed pattern looks the same either way. A static code encodes the destination URL itself. A dynamic code encodes a short link, a pointer to the destination that you can edit later.

That one difference decides editing, analytics, cost over time, and what happens on the day a vendor disappears. It is mostly a risk question: how bad is it if this printed code points at the wrong place, or at nothing? The sections below work through it, including the cases where static is the better engineering choice.

Static vs Dynamic QR Code at a Glance

Six properties differ. The rest of the post explains each row.

PropertyStatic QR codeDynamic QR code
What the pattern encodesThe destination URL itselfA short link that redirects to the destination
Change destination after printNo, reprintYes, edit the link
Scan analyticsNone from the codeCount, country, device, browser, time
Dependency on a serviceNoneThe short-link host must stay up and stay yours
Cost over the code's lifeFree once generatedWhatever the host charges while the code lives
Grid size for a long URLLarger (version 6 or more)Smaller (version 3 or 4)

The short version: dynamic buys control after printing and costs you a dependency. Static has no dependency and no control.

How Each Code Stores Its Data

A QR code is not a picture of a URL. It is a matrix of dark and light modules holding data in one of four modes: numeric, alphanumeric, byte, and kanji. A normal HTTPS link has lowercase letters and symbols, so it uses byte mode.

The grid size is the version. The QR standard (ISO/IEC 18004) defines versions 1 to 40; the side length is 17 + 4 x version modules, so version 1 is 21 x 21 and version 40 is 177 x 177. Denso Wave, the format's inventor, publishes the capacity table. In byte mode, version 1 holds 17 bytes at the lowest error correction level and version 40 holds 2,953.

Take a static code carrying this 101-character tagged URL: https://example.com/products/spring-collection-2026?utm_source=flyer&utm_medium=print&utm_campaign=march. At error correction level M (about 15% recoverable) it needs version 6, a 41 x 41 grid. At level H (about 30%) it needs version 10, 57 x 57. The URL is now in the pattern for good; a typo, a moved page or a finished campaign means reprinting.

A dynamic code encodes something like https://b.elido.me/spring26 instead. That is 27 characters: version 3 (29 x 29) at level Q, version 4 (33 x 33) at H. The real destination sits at the shortener and is looked up at scan time.

Elido link analytics page showing a 30-day click chart, top destinations, top countries, device split and browser split for a demo link

Link analytics in a demo workspace. The numbers are synthetic example data, not customer results.

Editing and Scan Analytics After Printing

The extra hop buys editing, counting, routing and expiry.

Editable destination. Change the target in the dashboard or through the API and the flyers already in the field follow it. The redirect is a 302 (temporary, see RFC 9110), the right status for a target you plan to change; the 301 vs 302 explainer covers why. You cannot change the short link itself, because that string is the pattern on the paper. Hotels feel this most, with one printed card in hundreds of rooms (QR codes for hotels); a survey handout is the everyday case, since a QR code for a Google Form can be repointed at next term's form with no reprint.

Routing and expiry. Smart links can send visitors to different destinations by country, device or browser. A link can also carry an expiry date or click cap; past it, the edge answers with an "expired" page and a 410 status. It does not redirect to a custom "campaign ended" URL, so repoint the link yourself if you want one.

Scan analytics. Every scan is a request to a server you control, so it can be counted. Elido's link analytics show the click time series, top destinations, countries, devices and browsers, as in the screenshot above. Three honest limits:

  1. You see the audience, not the person. Nothing identifies who scanned.
  2. A scan is a click on the link. If the same link is on a poster and in an email, those land in one bucket. Give each placement its own short link and you can compare them. That is a habit, not a built-in feature.
  3. Scans are not conversions. Following a visitor to a signup needs tagged URLs or the conversion tracking postback; how to track QR code scans covers the full stack.

My own rule: if a code is going on paper, I default to dynamic and make static the exception I have to justify. A static code gives you none of this. If someone asks "did the poster work?", the honest answer is "no idea".

Redirect Latency and Scannability

The redirect adds a few milliseconds in-region on a cache hit; Elido's budget for that path is a p95 under 15 ms, and how the redirect path gets there is its own post. Against that, camera focus and capture take roughly 100 to 300 ms, DNS and TLS for the destination take tens to hundreds on mobile, and the destination page is usually slowest of all. The redirect is a rounding error. What does hurt is a vendor with no nearby edge, so scan one of their codes on mobile data before committing.

The shorter payload works in dynamic's favor. At 3 cm wide, a version 3 grid has modules about 1 mm across; a version 20 grid (97 x 97) has about 0.3 mm. A common rule of thumb is to print at about one tenth of the scanning distance, so a code scanned from 1 m should be around 10 cm wide. A small grid also leaves room under error correction for a logo, which QR code error correction levels works through. Elido's designer sets module style (square, rounded, dot), eye style, colours, an uploaded logo with padding, and a framed label, and exports PNG or SVG. Its own hint says to keep level H when a logo covers more than about 20% of the code, and to test with two phones before printing.

Cost, Limits, and What Happens If You Stop Paying

A static code costs nothing after you generate it. A dynamic code costs whatever the host charges for as long as the code is in the world, which for a menu or product box can be years.

A hypothetical to show the shape. If a host charged 10 EUR a month and your packaging stays on shelves 3 years, keeping the redirect alive costs 360 EUR. Your numbers will differ. The cost is time-based, not scan-based, and it runs on after the campaign stops being interesting.

What happens at the end depends on the vendor, so find out before the print run:

  • Link kept, paid features frozen. Best case. Scans still redirect; editing or analytics lock.
  • Link disabled or paused. Scans hit an error page. In Elido a disabled link returns a 410 page, and a paused workspace shows a paused page instead of redirecting.
  • Link and domain gone. Worst case. The pattern holds a short URL that no longer resolves, and no edit can fix it, because the pattern is the short link, not the destination.

Limits of dynamic codes

Four limits are worth knowing before you choose, and none of them is a reason to avoid dynamic codes on paper.

  • Network needed. The phone must reach the redirect and then the page. In a basement, a lift or a field with no signal, a dynamic code fails, and so does a static code that points to a web page. Only text, Wi-Fi and contact-card payloads scan fully offline.
  • A provider in the path. Uptime, retention and termination terms of the host now apply to your printed material. Ask for them in writing before a long print run.
  • Privacy. Each scan is a request to a server, so it produces a click record. Check what that record holds and how long it is kept; QR codes and GDPR walks through it.
  • Fixed pattern. You can change where the code goes, never the code itself. A wrong slug on the paper stays wrong.

Switching comes down to whose domain is in the pattern.

  • Vendor's shared domain (like b.elido.me/spring26): printed codes stay tied to that vendor. You can recreate destinations elsewhere, but old patterns keep pointing at the old host.
  • Your own domain (like go.acme.example/spring26): move the DNS to a new provider, recreate the same slugs, and printed codes keep working.

So for anything printed that will stay in the field more than a few months, use dynamic on a domain you own. Custom domains for short links covers DNS and certificates, the QR codes feature page lists what ships, and the pricing page shows which plans include custom domains. Retail packaging adds a standards angle: GS1 Digital Link keeps a product URL resolvable across tooling changes, and Elido's QR section has a GS1 builder tab for it.

When Static Is Right and When Dynamic Wins

Static is not the inferior option. It is the right call when:

  • The destination is truly permanent: a DOI, a statute, a public record run by an authority that does not move pages.
  • The code must outlive any vendor, like an archived PDF, a book or a plaque. A static code to a stable URL scans in ten years with nothing running on your side.
  • You work offline or in a closed system with no account.
  • Zero tracking is a requirement. A static code sends nothing through a third party.
  • The payload is not a URL: Wi-Fi credentials, a contact card, plain text.

A middle path: print a static code pointing at a URL on your own site and do the redirecting on your own server. You get editing without a third party, at the price of building it.

Choose dynamic when the destination might change or is not final at print time, the code has an end date, you need scan counts, one asset ships to several countries, or reprinting is expensive (packaging, signage, large runs). It also shrinks the cost of a bad URL: fix the link, not the packaging. For a run of codes, see bulk QR code generation, and read Are QR codes safe? Quishing and how to stay protected before putting one on a public surface.

Checklist Before You Print

  1. Will the destination or the end date change? Then dynamic.
  2. Do you need scan counts? Then dynamic, with one short link per placement.
  3. Will the code live over a year? Use a domain you own and record the renewal date.
  4. Archive links, never delete them. A deleted link returns a not-found page, and no edit revives the old pattern.
  5. Test a printed proof on two phones, in the lighting where it will hang.
  6. Keep a list of every placement and its link.
Elido QR designer showing foreground and background colours, module and eye style options, and a live preview with PNG and SVG export buttons

The QR designer in a demo workspace; the content shown is placeholder data.

Ready to try it? Open the QR designer and make a dynamic code, one link per placement. If you are still choosing, how to create a QR code goes from the decision to the download, and what is a QR code explains how scanning works. For the campaign workflow, see Elido for marketers.

  • Marius

Frequently asked questions

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

A static QR code encodes the destination itself in the pattern, so it never changes and nothing sits between the scan and the page. A dynamic QR code encodes a short link that redirects to the destination, so you can change where it points and count scans after printing. The pattern looks the same either way; the difference is what the pattern contains.

Do dynamic QR codes expire?

The pattern never expires, but the redirect behind it can stop working. If the short link is deleted, disabled, or the account that hosts it lapses, scans land on an error or paused page instead of your destination. Whether that happens when you stop paying depends on the vendor, so read the terms before you print. A short link on a domain you own is the safest setup.

Are dynamic QR codes slower to scan?

Not in any way a person can feel. The redirect adds one HTTP hop, typically a few milliseconds to a few tens of milliseconds, against camera focus, decoding, DNS and TLS that take hundreds. A dynamic code also encodes fewer characters, so the grid is smaller, which often makes it easier to scan, not harder.

Can I convert a static QR code to a dynamic one?

Not the printed pattern. A static code has the destination baked in, so there is nothing to redirect. You can create a dynamic code that points to the same destination and replace the old one at the next print run. Until then, every static code already in the field keeps going straight to the old URL.

Do dynamic QR codes need an internet connection?

Yes, on the scanning phone. The camera decodes the pattern offline, but the redirect and the destination page both load over the network, so a scan with no data and no Wi-Fi goes nowhere. A static code to a web page has the same limit for the page itself; only non-URL payloads such as Wi-Fi credentials or contact cards work fully offline.

What happens to my dynamic QR code if I switch vendors?

If the short link lives on the vendor's shared domain, the printed codes stay tied to that vendor and cannot be moved. If it lives on a custom domain you own, you can point that domain at a new provider and recreate the same slugs, and the printed codes keep working. This is the main reason to use your own domain for anything printed.

Try Elido

Paste a URL, get a working short link

No signup. Link lives for 30 days. Sign up to keep it forever.

No signup needed. Sign up free for 50 links a month.

Try Elido

EU-hosted URL shortener with custom domains, deep analytics, and an open API. Free tier - no credit card.

Tags
dynamic qr code
static qr code
editable qr code
qr code redirect
trackable qr code
url shortener

Continue reading