
Short answer
Packaging codes face curved surfaces, gloss varnish and absorbent substrates, and they often outlive the campaign that created them. Point them at a stable path on your own domain, size generously, and ask for a matte finish over the code area.
Packaging outlives the campaign
This is the constraint people underestimate. A print run of packaging can sit in a warehouse for months and on a shelf for a year after that. Products with long shelf lives can carry the same artwork for years.
That timescale is completely incompatible with a code whose destination depends on a subscription. A dynamic code that stops resolving takes every unit in the field with it, simultaneously, long after anyone remembers setting it up.
The reliable pattern is a static code pointing at a short, stable path on a domain you own. You can change what lives at that path whenever you like, and it keeps working as long as your domain does.

The material problems
Packaging rarely offers flat, matte, white card, which is what a QR code likes best.
- Gloss varnish and lamination reflect light into the camera, which is the single most common packaging failure.
- Curved containers distort the grid — keep the code narrow relative to the diameter and use the flattest panel.
- Bare corrugated card and kraft absorb ink and blur module edges, so print larger and keep the payload short.
- Seams, folds and the join under a shrink wrap break the grid entirely.
- Metallic and foil substrates combine glare with uneven reflection and are best avoided under a code.
What to put behind the code
Packaging codes work best when the destination is genuinely useful rather than promotional, because the person scanning already owns the product.
Ingredients and allergen detail, assembly or care instructions, sizing guides, authenticity information, recycling detail, and how to get spare parts all justify a scan. A link to a homepage or a social feed does not.
Whatever you choose, make sure the page works on a phone in a shop or a kitchen, because that is where it will be opened.
Regulatory and multilingual content
Packaging codes are increasingly used to carry information that would not fit on the pack — extended ingredient lists, multilingual instructions, disposal guidance.
If the code carries information that is legally required to be available, treat its reliability as a compliance matter rather than a marketing one. That argues strongly for a static code on your own domain, and against anything that depends on a third-party service continuing to operate.
It also argues for testing the printed result carefully, since a code that fails on a production run is then a labelling problem rather than a lost click.
- 1
Pick a flat, matte panel
Placement solves more than settings do.
- 2
Encode a short path on your own domain
No campaign parameters, no third-party shortener.
- 3
Size for the substrate, not the minimum
Absorbent and textured materials need larger modules.
- 4
Request spot matte over the code
And confirm it is on the printer's spec sheet, not just in an email.
- 5
Scan a production sample, not a proof
Proofs are usually printed differently to the real run.
Frequently asked questions
- Should packaging QR codes be static or dynamic?
- Static, pointing at a path on a domain you control. Packaging can stay in circulation for years, which is far longer than most people keep paying for a redirect service — and when that service stops, every unit in the field fails at once.
- Why do QR codes on glossy packaging fail?
- The gloss reflects the phone's own light and overhead lighting back into the camera, washing out part of the pattern. It is intermittent and angle-dependent, which makes it look like a code fault. A spot matte finish over the code fixes it.
- Can a QR code go on a curved bottle or jar?
- Yes, if it is narrow relative to the diameter and placed on the flattest panel available. On very small diameters, use a flat tag or a flag-fold label rather than wrapping the code around the curve.
Sources
Specifications and primary documentation referenced above.