← Blog

What is a dynamic QR code? Static vs dynamic, explained properly

August 13, 2026

A dynamic QR code is one where you can change the destination after the code has been printed.

That sounds like it should be impossible. The pattern is fixed once it is on paper, so how can what it points to change?

The answer is indirection, and it is the same trick every URL shortener uses.

How it works

A static QR code has the destination encoded directly in the pattern. Encode yoursite.com/summer-sale and those characters are physically present in the arrangement of black and white squares. The code will point there forever. Nothing can change it, because changing it would mean changing the printed pattern.

A dynamic QR code encodes a short redirect URL instead -- something like klick.ing/a7f2. That address does not host your content. It is a pointer. When someone scans it, the request reaches the service, the service looks up where that code currently points, records the scan, and forwards the phone to the real destination.

The printed pattern never changes. The row in the database does.

So a dynamic QR code is really a static QR code containing a short link. The dynamism lives in the redirect, not the code.

The two real differences

You can change the destination. Print a code on packaging pointing at a product page. Move to a new platform, or run a different campaign, and repoint it. Every code already in circulation follows.

You can count scans. Because every scan passes through the redirect, it can be counted -- how many, when, roughly where, on which kind of device. A static code offers none of this. It hands the visitor straight to the destination and you never know the scan happened, unless the destination page has its own analytics and you gave that code a unique landing page.

Side by side

Static Dynamic
Destination after printing Fixed forever Editable
Scan tracking None Yes
Works without a service Yes No
Pattern density Denser with long URLs Always simple
Ongoing cost None Usually a subscription
Fails if provider closes No Yes

The dependency, stated plainly

A dynamic QR code works only for as long as the redirect behind it works.

If the service disappears, changes its domain, or you stop paying for it, every code you have ever printed stops working simultaneously. Not gradually. All at once. The pattern is still perfectly readable; it just points at nothing.

This is the trade you are making, and it is worth being clear-eyed about it, because the marketing around dynamic codes rarely mentions it. You are exchanging permanence for flexibility.

Ways to reduce the exposure:

When static is the better answer

Dynamic is not automatically the upgrade. Choose static when:

Static codes have one underrated property: nobody can turn them off. For some uses that is exactly what you want.

When dynamic earns its place

What the analytics will and will not tell you

Worth calibrating expectations. A dynamic QR code can reasonably tell you:

It cannot tell you who scanned it, whether they bought anything, or whether the same person scanned twice. Treat scan counts as a comparative measure -- this poster versus that one -- rather than an exact headcount.

That comparative use is genuinely valuable. Distinct codes per location, per print run, or per campaign will answer questions that are otherwise pure guesswork.

Practical notes

The summary

Static codes are permanent and free and cannot be changed or measured. Dynamic codes are editable and measurable and depend on a service staying alive.

For most marketing -- anything with a campaign, a print run, or a question about what is working -- dynamic is the right call, and the dependency is a reasonable price. For anything that must simply keep working on its own, unattended, for years, static is the safer engineering choice.

The mistake is not picking one. It is not knowing which one you picked.


Klick.ing's short links are dynamic by default: every one is editable after the fact and every scan is counted. See the QR code tools, or create a free account to try it.

← Back to all posts