Every QR code holds a piece of text. The difference between static and dynamic is only what that text is. A static QR code holds the real destination, such as https://example.org/menu. A dynamic QR code holds a short link to a redirect service, and the service holds the real destination. Everything else, the pros and the cons, follows from that one fact.
What the phone actually reads
Scan a static code and the phone reads the final address straight off the squares. It opens that page and nothing else is involved. No server, no account, no company in the middle. If the printed code survives, it works.
Scan a dynamic code and the phone reads something like https://getqrstudio.app/scan?c=dyn. It opens that address. The redirect service looks up dyn in its records, notes that a scan happened, and tells the phone to go on to the real page. The whole detour takes a fraction of a second and the person scanning rarely notices it.
How a redirect works
- The phone opens the short link written in the code.
- The service finds the record for that code and reads the current destination.
- It stores one scan record: the time, the country, and the device family.
- It answers with an HTTP 302 response, which means “go here instead”.
- The phone follows the answer and loads the real page.
Because step 2 reads the destination from a database rather than from the code, the owner can change it at any time. The printed squares never change. Only the record behind them does.
In practice
The short domain is the part a scanner sees in the preview banner before tapping. A code that redirects through a recognisable domain gets tapped. One that goes through a random six-letter domain looks like spam, whatever it does next.
Why a dynamic code is smaller
A QR code grows with its text. The version is the size grade, and a longer address needs a higher version with more, smaller squares. A short redirect link is nearly always shorter than the real address, so the dynamic code is smaller or, at the same print size, has bigger squares that scan more easily.
Both codes above are the same width. The left one has 29 modules a side, the right one 53. Printed at 2 cm, the left code’s modules are about 0.5 mm and the right code’s about 0.3 mm. The versions article explains why 0.3 mm is at the limit for a phone camera at arm’s length.
What only a dynamic code can do
Change the destination. A menu code printed on 40 table stickers can point at the spring menu today and the summer menu in June. The stickers stay.
Count scans. The service records each visit, so you learn how many people scanned, roughly where, and on which kind of phone. The analytics article covers what can and cannot be recorded.
Set limits. Because a server answers each scan, it can refuse after a date, before a launch time, or after a set number of scans, and it can ask for a password or send iPhone and Android users to different pages. A static code cannot do any of this, because nothing sits between the phone and the page.
Fix mistakes. A typo in a static code on 5,000 flyers is 5,000 flyers in the bin. The same typo behind a dynamic code is a two-minute edit.
The risk: the service goes away
Here is the buying criterion that vendors are quiet about. A dynamic code works only while its redirect service answers. If the service shuts down, or your subscription lapses and the vendor switches the code off, every printed copy points at a dead page. The squares are fine. The record behind them is gone.
Vendors handle this differently. Some keep codes redirecting after a plan ends. Some show an “expired” page. Some sell the short domain to a new owner, which is worse than a dead page. Before you print a dynamic code onto anything you cannot replace, find out which your vendor does.
What QR Studio does:
- Every dynamic code shows its current destination in the app, so you always know the real address. You can make a free static code for that address at any moment, without an account.
- When you edit a code you can switch dynamic off. The code is then a static code for the destination itself. The pattern changes, so this is for a reprint, not for stickers already on the wall.
- The redirect checks the code’s own settings when someone scans, such as whether it is switched on or has passed its expiry date. It does not look at the owner’s subscription, so a code you made while subscribed keeps resolving after the plan ends.
Common mistake
Using a dynamic code where a static one would do. A Wi-Fi code, a phone number or a business card gains nothing from a redirect and takes on the risk for free.
Side by side
| Feature | Static | Dynamic |
|---|---|---|
| Works with no server or account | ✓ | ✕ |
| Change the destination after printing | ✕ | ✓ |
| Scan counts and analytics | ✕ | ✓ |
| Expiry dates, schedules, passwords | ✕ | ✓ |
| Code size for a long address | Grows with the address | Small and fixed |
| Scanner can preview the real destination | ✓ | ✕ |
| Depends on the vendor staying in business | ✕ | ✓ |
| Cost | Free | Usually a subscription |
Which should you pick
Three cases from everyday use:
- A café’s table stickers. The menu changes with the season and the owner wants to know which tables scan most. Dynamic, on a domain customers recognise.
- A plumber’s van. The code will be on the van for eight years and points at a home page that is not going anywhere. Static. No subscription, nothing to lapse.
- A wedding invitation. The code links to a photo album for one day. Static, because the guests scan it once and it must still work when the couple finds the card in a drawer years later.
The rule of thumb: if you will ever need to change where it goes, or need to know how often it is scanned, go dynamic. Otherwise go static, and enjoy having nothing to maintain.
▸302 versus 301, and why the phone does not cache the answer
A redirect service answers with status 302 (found) or 307, not 301 (moved permanently). A 301 tells the browser to remember the new address and skip the service next time, which would stop scan counting and, worse, would keep sending a returning visitor to an old destination after the owner changed it. Services also send headers that stop caching for the same reason. The cost is one extra round trip to the redirect server on every scan, typically under 200 ms. A static code has no round trip at all, which is why it works in a basement with one bar of signal where a dynamic code may stall on the redirect.
Try it yourself
Paste your real destination address and see which version it needs. Then paste a 35-character short link and compare. The difference is the size saving a dynamic code buys you.