Static vs Dynamic QR Codes
What the redirect actually buys you, measured on real encoded codes, and which payloads are worse off for it.
16 min readA vanity QR code is an ordinary symbol carrying a link you own: brand.co/spring rather than a rented slug or 110 characters of campaign tracking. The case made for it everywhere else is that people trust a link they can read, which may well be true and which nobody has published a number for. Here is the half that can be measured: a shorter link is a physically smaller code.
Type the slug you are considering. This prices it in modules and in millimetres of print, before you buy anything.
| Link | Chars | Mode | Version | Modules | Min print |
|---|---|---|---|---|---|
As you typed ithttps://qr.brand.com/spring | 27 | Byte | 3 | 37 | 14.8 mm |
In capitalsHTTPS://QR.BRAND.COM/SPRING | 27 | Alphanumeric | 2 | 33 | 13.2 mm |
Capitals save 4 modules here, which is 1.6mm off the smallest width this code can print at.
The scheme and domain are case-insensitive by spec, so HTTPS://EXAMPLE.COM always resolves. The path after the domain is not: most servers treat /SPRING and /spring as different pages. Make the redirect case-insensitive, or keep the slug to digits and characters that have no case, before printing an uppercase code.



QR encoding is not one character, one cost. ISO/IEC 18004 defines several modes, and two of them matter here. Byte mode spends 8 bits per character and takes anything. Alphanumeric mode packs two characters into 11 bits, roughly 5.5 bits each, but its alphabet is fixed at 45 characters: digits, capital letters, space, and $ % * + - . / :. No lowercase. Not one letter.
So https://qr.brand.com/spring encodes in byte mode, and HTTPS://QR.BRAND.COM/SPRING encodes in alphanumeric mode. Same link, same destination, and on the measurements above it is a whole symbol version smaller. Fewer modules means each module is physically larger at the same print size, which is the thing that decides whether a code on a business card reads at arm’s length.
There is a catch, and it is the reason this trick is not on every generator. RFC 3986 makes the scheme and the host case-insensitive, so HTTPS:// and the domain are safe to shout. The path is a different thing: it goes to your server as typed, and any server mapping URLs onto a case-sensitive filesystem, which is the default for Apache and nginx on Linux, treats /SPRING and /spring as two pages. So the redirect has to accept both spellings before the uppercase code is printed. Set it up, scan it, then take the smaller symbol.
This is the question the vanity pages skip, and it decides whether you spend money. Five shapes of the same campaign link, measured.
| Link shape | Chars | Modules, M | Min print, M | Min print, H |
|---|---|---|---|---|
Short vanity domainYou own itcapitals availablehttps://qr.brand.co/springA second domain bought for links. The shortest realistic option, and the one people mean by vanity. | 26 | 33 | 13.2 mm | 16.4 mm |
Provider slugYou rent itcapitals availablehttps://exmpl.co/7Kd2QaWhat a link shortener hands you. Same length class as a vanity domain, and you are renting the slug. | 23 | 33 | 13.2 mm | 14.8 mm |
Subpath on your main domainYou own itcapitals availablehttps://www.brandname.com/springNo second domain, no subscription, and the redirect is yours. Costs a few modules for the www and the longer name. | 32 | 37 | 14.8 mm | 16.4 mm |
The real destinationYou own itcapitals availablehttps://www.brandname.com/collections/spring-sale-2026The page the vanity link redirects to. This is the code you print if you skip vanity links entirely. | 54 | 41 | 16.4 mm | 19.6 mm |
The tracked destinationYou own ithttps://www.brandname.com/collections/spring-sale-2026?utm_source=poster&utm_medium=qr&utm_campaign=springThe same page with the tags an analytics team asks for. This is what a vanity link is really saving you from. | 106 | 49 | 19.6 mm | 26 mm |
The second domain buys you 4 modules against a path on the domain you already own, which is 0mm of print width at high error correction. Against the tracked URL it replaces, the same vanity link saves 16 modules and 9.6mm. That second number is the one worth acting on. The first is a rounding error you can spend on a shorter slug instead of a domain registration.
My read: buy the short domain when humans have to type or say the link, and skip it when the only reader is a camera. The modules you save against a path on your existing domain are a rounding error. The modules you save against a fully tagged campaign URL are not, and you get those from any redirect you control, including one on the domain you already pay for.
Five decisions, all made before the code exists, all cheap now and annoying later.
Once the slug is settled and the redirect is live, the code itself is the easy part. Paste the vanity link here and the symbol is generated in your browser, decode-tested, and yours as an SVG.
✓ Scan-tested: this code reads back correctly.
Contrast 21:1, Strong
Version 2 · 33 modules · print at least 13.2 mm wide
The vanity half is yours to host, and it is worth being exact about where the line falls.
If the destination might change later, static vs dynamic QR codes works through the redirect question properly, including the version where you own both ends.
A normal QR code carrying a short, readable link you control, like brand.co/spring, instead of a provider slug or a long tracked URL. Nothing about the symbol is different: the vanity part is the text inside it. That matters for two reasons, and only one of them gets written about. The readable part is the marketing argument. The measurable part is that a shorter link means fewer modules, so the code prints smaller and scans from further away.
For a code that only a camera reads, your main domain is fine. The table on this page measures the exact gap: a subpath like brandname.com/spring costs a handful of modules against a dedicated qr.brand.co, and it needs no second registration and no second renewal. The short domain earns its money when a human has to type the link off a poster or say it out loud.
Yes, if you own the redirect. That is the real reason to encode your own link: the printed symbol stays the same and you repoint the URL server-side whenever you like. It has to be your redirect though. The dynamic codes on this site run on this site's address, not on your domain, so a custom vanity domain is something you host yourself today.
Every one of them stops working, at once, with no way to fix the copies already printed. A vanity QR code moves the point of failure from a shortener you rent to a domain you own, which is better but not free: the renewal now matters as much as the print run did. Put the domain on auto-renew, and on a card that does not expire before the codes do.
Yes for the scheme and the domain, because both are case-insensitive by spec, and the planner on this page decodes both versions before it shows you the numbers. The path is the catch. Most servers treat /SPRING and /spring as different pages, so an uppercase code only works if your redirect accepts either. Set that up first, then take the smaller symbol.
Colour, a logo in the middle, artwork behind it, each one measured against what still scans.
What the redirect actually buys you, measured on real encoded codes, and which payloads are worse off for it.
16 min readThe usable square inside a round sticker is 70% of its diameter. Measured minimum sizes for real links, against every common sticker size.
8 min readWhat each platform already ships, the measured cost of each payload type, and how to check an offline claim yourself.
26 min read