The one that is not worth printing
A QR code that opens your home page. It gets scanned once, by the person who opened the box, who was already on your website ten minutes ago when they bought the thing. It teaches everybody who tries it that your codes are not worth scanning, which is a lesson they will remember when you print a code that is.
If the destination is the same for every unit you ship, ask what it is doing that the URL printed as text would not. Sometimes there is an answer. Often there is not, and the honest move is to print the address and skip the code.
Everything below assumes you want the code to do something a printed address cannot.
Destinations worth the scan
In rough order of how often they justify themselves.
This specific object's record. A different destination per unit. The scanner learns something about the thing in their hand: what it is, when it was made, which of the edition. This is the only destination that is genuinely impossible to print as text, and it is the one this site is about.
Care and repair for this exact product. Not a general care page. The finishing on this leather, the wash temperature for this fabric, the spare part number for this model. Useful for years, which is longer than most packaging lasts.
Registration or warranty start. A short form. Works, and note that it turns a scan into a personal data collection, so it needs a privacy notice and it needs somebody to actually read what comes in.
A reorder link for a consumable. Coffee, refills, filters. The code goes on the thing that runs out, and it is scanned at the exact moment somebody wants more.
Provenance and sourcing detail. Where the beans came from, which kiln, which hide. Worth doing only if you actually hold the detail per batch. A generic "our values" page behind a code that promised origin information is worse than no code, and if the claims are regulated where you sell, a vague page is a liability rather than a marketing asset.
Anything that changes after printing. The general principle: a code earns its place when the destination can be updated and the packaging cannot.
Getting the URL right
The part that is invisible until it is a problem.
Use your own domain
Not a shortener, not the QR generator's tracking domain, not a third-party verification service's. Three reasons, and the first two are enough on their own.
- A shortener is a company that can go out of business, and then every card you have printed points at nothing.
- A shortener that survives can change its terms, start showing an interstitial, or get blocked by a corporate network.
- Your own domain means the scan lands on your brand rather than on somebody else's, and the person holding a resold item meets you rather than a service.
Put the identifier after a #, not a ?
This one is easy to get wrong and hard to undo.
Good: https://yourstore.com/apps/provenance#MC-3QGV-R1YR-DG7A
Bad: https://yourstore.com/verify?id=MC-3QGV-R1YR-DG7A
A URL fragment, the part after the #, is never sent to a server. A query string is sent to every server involved, and it then lands in web server logs, in analytics, and in the Referer header of every outbound link clicked from that page.
With a query string, every scan deposits a valid identifier somewhere. Those identifiers are printed on cards travelling with resold goods, so a leaked list of them is a list of codes that all resolve. Collecting them in bulk should not be as easy as reading your own logs.
Keep it short
Every character is more modules in the code, and more modules means a denser code that needs a bigger print area or a steadier hand. A short domain and a short identifier is the difference between a code that scans from a swing tag and one that needs 25mm of card.
Decide the domain before you print
The domain is baked into every code. Not into the identifier, which is just a string, but into the URL the code encodes. A brand whose real domain is not live yet, and whose store still reports its .myshopify.com fallback, is one careless export away from five hundred cards pointing at an address they will abandon.
Changing your mind is survivable right up until the print run and catastrophic afterwards.
Getting the print right
- Vector, not raster. SVG or EPS, so the code stays crisp at whatever size the card ends up. A PNG scaled up produces soft edges and a scanner that hesitates.
- Quiet zone. Leave clear space around the code of at least four modules. Designers reliably crop this to make the layout balance, and it is the single most common reason a printed code will not scan.
- Contrast and orientation. Dark on light. Not light on dark, which many scanners still refuse, and not printed over a photograph.
- Test the actual print. Not the PDF on screen. Print it at final size, on the final stock, and scan it with a cheap phone in bad light. Matte stock and a slightly heavy ink can close the gaps between modules enough to kill it.
- Print the identifier as text underneath. Always. It is the fallback for a dead battery, no signal, a damaged card, or somebody who does not know what a QR code is. It costs three millimetres.
- Higher error correction than you think. Level Q tolerates roughly a quarter of the code being damaged. On something that will live in a pocket or a dust bag, that is worth the extra density.
What the landing page has to do
You have got a scan. It is worth more than a click, because the person is holding the object.
- Load fast on a bad connection. They are in a shop, or a warehouse, or a postal depot.
- Answer immediately. The thing they scanned for should be visible without scrolling. Not a hero image, not a newsletter prompt, not a cookie wall.
- Work when the code is unknown. Say plainly that it is not in the register. A blank page or a generic error reads as "this brand's system is broken", which is a worse outcome than "this code is not one of ours".
- Look like you. If the page is served inside your own theme, the scanner arrives somewhere recognisable rather than on a third party's white page with your logo at the top.
Read next
- How to give every item its own number on Shopify, which is what goes in the code.
- Certificates of authenticity, and what they are actually worth, for the paper the code is usually printed on.
- How Provenance works, which produces the vector codes, the merge CSV and the page they land on.