How a static QR code works
A static code stores your content directly in the pattern. If it is a link, the full web address is in the code. If it is a WiFi code, the network name and password are in the code. When a phone scans it, the phone reads that content and acts on it. Nothing else is involved.
That has a few consequences:
- It never expires. There is no service to switch off and no subscription to lapse. The code works as long as the print is readable (and, for a link, as long as the page is online).
- It cannot be edited. Once it is printed, it always contains the same content.
- Its scans cannot be counted by the code maker. Nobody sits between the scan and your content.
- It is private. The person scanning goes straight to your content without passing through a third-party server.
How a dynamic QR code works
A dynamic code contains a short link that belongs to the QR service, something like qr-service.example/x7Kp2. When someone scans it, their phone visits the service first, the service logs the scan, and then it forwards them to your real destination.
- You can change the destination after printing, because only the forwarding rule changes.
- You get scan statistics: counts, rough locations, device types.
- It depends on the service. If the subscription ends, the company changes its terms or shuts down, every printed code stops working or shows a page you did not choose.
Many "free" generators create dynamic codes by default and then ask for payment after a trial. If the code stops working after two weeks, that is usually why.
Side by side
| Static | Dynamic | |
|---|---|---|
| Content stored | In the code itself | On the provider's server |
| Expires | Never | When the plan or service ends |
| Edit after printing | No | Yes |
| Scan statistics | Not from the code | Yes |
| Account needed | No | Usually |
| Typical cost | Free | Monthly or yearly subscription |
| Works offline (WiFi, text, contact) | Yes | No, the redirect needs internet |
Which one should you use?
Use a static code for anything that should just keep working: WiFi logins, contact cards, product labels, equipment tags, menus that live at a fixed address, and anything printed in large numbers or on things that last years.
A dynamic code can make sense for a short campaign where you truly need to swap the destination after printing, and where you are happy to keep paying for as long as the print is out there.
Getting the benefits of both, for free
Most of what people want from dynamic codes can be done with a static code and a page you control:
- To change the destination later, point the code at a page on your own website, for example
yoursite.com/menu. When the menu changes, update the page. The code stays the same. - To count scans, add a UTM tag to the link, such as
?utm_source=qr&utm_medium=print&utm_campaign=spring-flyer. Your website analytics (Google Analytics, Plausible, Matomo and others) will show visits from that tag. - To compare placements, make one code per location, each with a different
utm_campaignvalue.
Keep the link short, though. Every extra character makes the code denser, and dense codes need to be printed larger. See QR code size for printing.