Published September 2, 2026
Static and dynamic QR codes
A static code carries the destination itself and freezes it at printing. A dynamic code carries a short link, which is what makes the destination editable afterwards and the scans countable at all.
The two kinds of code look identical on the page. The difference is entirely in what the modules encode, and it decides everything that can happen after the code is printed.
A static code encodes the destination address directly. Scanning it takes the phone straight there, with nothing in between.
A dynamic code encodes a short link. Scanning it takes the phone to the shortener, which answers with a redirect to the destination.
Destination changed after printing
No scan data. The code carries the destination itself, so no link sits in between.
Destination fixed at printing
What a printed static code costs
A printed code is fixed at the moment of printing, whatever it encodes. What varies is whether the address inside it is fixed too.
With a static code it is. When the campaign page moves, the menu is reorganised, the event gets a new schedule or the site changes its URL structure, the code is stranded and the only remedy is a reprint. Anything already shipped on packaging, mounted on a wall or handed out at a counter cannot be reached.
There is also no report. A static code produces no data of its own, not zero scans but nothing at all, because nothing passes through anything that could count. Scans reach the destination server as ordinary visits and are indistinguishable from someone typing the address.
What a dynamic code makes possible
Two things, and they are the same mechanism seen twice.
The destination stays editable. The code carries the short link, the short link carries the destination, and the second half can be changed at any time. On this service the redirect is a 302 with Cache-Control: no-store, which is what makes an edit actually reach people: a permanent redirect would sit in the browser's own cache and keep sending earlier visitors to the old destination no matter what the dashboard says.
The scans are countable and, more usefully, separable. A scan reaches the short link through a distinct path, uhm.co/q/ followed by the short name, and is recorded as a scan rather than as an ordinary click. Print and digital traffic to the same destination therefore do not dissolve into one total.
The marker sits in the path rather than in the query string on purpose. The redirect forwards the visitor's query string to the destination, which is how UTM tags and parameters like a checkout session id arrive intact. A marker placed in the query string would ride along with them and appear in the customer's own analytics on every scan. A path segment does not.
What the dynamic code depends on
Honesty about the trade: a dynamic code works only while the short link resolves. A static code has no such dependency, and that is its one real advantage.
Which is why the two things worth checking before printing are the two this product's design is built around. Existing links keep redirecting through every billing state, so a lapsed subscription or a smaller plan cannot strand a printed code. And a code on a domain the reader owns is independent of what happens to the provider, because the name in front of the slug belongs to them.
A code's address is fixed at printing, so the domain has to be decided before anything is exported for print. A link's domain is set when the link is created and cannot be changed afterwards.
The practical version
Use a static code when the destination genuinely cannot change and no report is needed: a wifi credential, a plain text string, a phone number.
Use a dynamic code for anything printed with a marketing destination behind it. Codes on packaging, posters, menus, signage and printed inserts all outlive the pages they point at, and the difference between reprinting a run and editing a field is the whole argument.
QR codes are included on every plan here, including the free one. The styling options, the colours and the logo mark, are included from Pro. Which plan carries what is on the pricing page.