QR Codes on Product Packaging: From Shelf to Screen
Packaging is the hardest surface a QR code has to survive: curves, creases, scuffs, and press conditions that thicken every module. Here is what to change.
A QR code on a poster only has to survive being printed and hung on a wall. A QR code on a pack has to survive a press with dot gain, a die-cutter, a folder-gluer, a shrink tunnel, a pallet, a delivery van, and three weeks of being pushed around a shelf by other people's hands. It also has to work while wrapped around a bottle. Packaging is the most hostile surface you will ever put a code on, and the settings that are fine for print stationery are not enough here.
Curves, creases, and other surfaces that fight the scanner
A phone decodes a QR code by finding the three finder patterns, working out the grid they imply, and then reading modules at the intersections of that grid. Wrap the code around a curve and the grid stops being square: modules near the edges compress, the spacing between them shortens, and the decoder's model of where each module should sit drifts away from where it actually is. Enough drift and the read fails, no matter how sharp the print is.
Two practical rules cover almost every pack. First, put the code on the flattest panel available: the lid or base of a tin rather than the wall, a flat facet or shoulder label on a bottle, the middle of a panel on a folding carton. Choosing the flattest surface costs nothing at artwork stage and removes the problem entirely.
Second, if the code genuinely has to sit on a curve, keep its width under roughly a third of the circumference. On a 250 ml can of about 21 cm circumference, that is a ceiling of around 7 cm, which is far more than you need. On a slim 15 mm lip balm tube, the circumference is under 5 cm and a third of it is 1.6 cm, which is already below a comfortable minimum width. That is the real signal: when the third-of-circumference limit lands under your minimum size, the curve has told you the code does not belong there. Move it to the cap, the base, or an outer carton.
Keep a wrapped code narrower than about one third of the circumference. If that limit works out smaller than the code needs to be for its scanning distance, the surface is too tight, so move the code to a flat panel instead of shrinking it.
Error correction: higher here than anywhere else
Error correction is redundancy built into the pattern, so a decoder can rebuild data from a code that has lost part of itself. The four levels recover roughly 7% (L), 15% (M), 25% (Q), and 30% (H) of the codewords. For flat print that stays flat, M is a sensible default. For packaging it is not enough.
Think about what actually happens to a pack between the press and the customer's hand. It gets creased at the fold. It rubs against its neighbours in a case. A corner scuffs where the shrink wrap gripped it. Condensation sits on it in a chiller. Someone's thumb leaves a smear of moisturiser across it in the aisle. Each of those removes modules, and the code either has the redundancy to absorb the loss or it does not. Level Q (about 25%) is the right default for packaging, and level H (about 30%) for anything that will be handled hard, chilled, foiled, or printed on corrugate.
The cost is real and worth stating plainly. Higher error correction means more codewords for the same payload, which means a larger symbol version, which means more modules across the same width. If you hold the physical size constant and raise the level from M to H, every module gets smaller and you have made the code harder to read, not easier. The correct move is to raise the level and grow the code by a few millimetres at the same time. Keeping the payload short helps too: a redirect on your own domain encodes in a fraction of the space that a full URL with campaign parameters needs, which buys back most of what the higher level costs.
Substrate and press decide the minimum size
The same artwork behaves differently depending on how it is put onto the pack. Flexographic printing on corrugate is the worst case in common use: the plate presses ink into a coarse, absorbent surface and the ink spreads, so dark modules thicken and the light gaps between them narrow or close entirely. A code that reproduces cleanly on a litho-printed folding carton can arrive on a shipper case as a slightly muddy block. The fix is size. Give a flexo code more physical width so the same amount of dot gain eats a smaller proportion of each module.
Contrast is the other variable. Foil, metallised film, and clear substrates all reduce the difference between module and background that the scanner depends on, either by reflecting light or by letting the product behind the code show through. Print a solid light panel behind the code on any of these, rather than trusting the substrate. And prefer matte over gloss wherever the finish is your choice: retail lighting is overhead, harsh, and directional, and a gloss varnish returns it straight into the camera as a bright band across the pattern.
| Substrate or process | Main risk | Minimum code width | Error correction |
|---|---|---|---|
| Litho carton, matte coated | Baseline, few surprises | 2 cm | Q (about 25%) |
| Matte paper label on a bottle | Mild curvature | 2 cm | Q (about 25%) |
| Gloss varnish or laminate | Glare under shelf lighting | 2.5 cm | Q (about 25%) |
| Flexible pouch or sachet | Creasing in transit | 2.5 cm | H (about 30%) |
| Flexo on corrugate | Dot gain closes module gaps | 3 cm | H (about 30%) |
| Foil or metallised film | Reflection, low contrast | 3 cm | H (about 30%) |
| Clear film on a filled pack | Contents visible through the code | 3 cm | H (about 30%) |
| Shrink sleeve | Distortion across the whole wrap | 3 cm | H (about 30%) |
These widths assume a pack picked up and scanned from 20 to 30 cm, in line with the general rule that a code should be about a tenth as wide as its scanning distance. A code meant to be read from a shelf without being lifted, or from a pallet label across a warehouse aisle, needs to be scaled to that longer distance instead.
What to put behind the code, in order of value
A pack has one code, or at most two, so the destination has to earn the space. Ranked by what they return:
- Authenticity and batch verification. The highest value use, especially in categories with a counterfeit problem. A unique or batch-level code that confirms the item is genuine and shows where and when it was made gives the customer a reason to scan that no other destination matches.
- Instructions or an assembly video. This one pays for itself directly. A code linking to a video and a multi-language instruction page removes the printed insert, its translation cost, and the paper. Assembly, dosage, installation, and care instructions are all better on a screen than folded into eight panels of 6 pt type.
- Ingredients, sourcing, and provenance. The story behind the product, the farm, the mill, the full ingredient breakdown. Genuinely wanted by a slice of your buyers and impossible to fit on the pack.
- Reorder. Straight to a cart with the item in it. Low effort to build, and it converts on consumables.
- Warranty registration. Better on the pack than in the box, because the pack is what the buyer is holding at the moment they decide to bother.
- Recycling and disposal guidance. Often required, but rarely a reason to scan on its own, so fold it into a page carrying something the customer wants.
One structural point sits above all of these. Regulated categories, food, cosmetics, and electronics in particular, are moving toward digital product passports, where the pack is expected to carry a persistent link to a maintained record of the product. A static code freezes that record at the moment of printing. If your category is heading that way, a dynamic code whose destination you can repoint after the run is close to mandatory, because the alternative is scrapping stock every time the underlying data changes.
Die-line safety
Everything above assumes the code survives conversion, and the die-line is where that gets decided. Never place a code across a scoreline: the fold cracks the ink along the crease and takes a line of modules with it, and the two halves of the pattern end up on planes at ninety degrees to each other. Never place one on a glue flap, where it will be either covered or smeared with adhesive. On a shrink sleeve, find out where the seam lands and keep the code well clear, because the seam is a doubled, distorted band that no amount of error correction will read through.
Windows, perforations, tear strips, and the zone under a hang tab deserve the same thought. Then check the code against the die-line at layout stage with its quiet zone included: four modules of clear space on all sides, none of it falling on a crease or a trim.
A code across a scoreline, a glue flap, or a shrink seam is lost before it reaches a customer. Overlay the code on the die-line, quiet zone included, before the artwork goes to the printer.
Test on the real pack, in a real aisle
The last step is the one that catches what the artwork cannot show you. Get a production sample, not a proof: the same board, the same press, the same varnish, the same sleeve. Take it to the environment the pack will live in, stand where a shopper stands, and scan it under the store's own overhead lighting with two phones, one current and one a few years old. Then scan it at an angle, because nobody picks a pack up square to their camera.
Scuff it before you sign off, too. Rub the code with a thumb, crease the pack once, and scan again. If it still reads after that, your error correction level is doing its job. If it does not, raise the level, grow the code, or move it to a better panel, then repeat. A code that scans off a flat proof under an office lamp has proved almost nothing about how it will behave in an aisle.
When you are ready to build the file, set the error correction level explicitly rather than accepting the default, keep the encoded URL short, and export vector so the module edges stay sharp at whatever size the pack ends up needing. Our generator exposes the level directly and exports SVG, and if you save the code first you get a link you can repoint later without touching the artwork.
Ready to make a SVG QR code?
Put these tips into practice in seconds, no sign-up required.
SVG QR Code GeneratorRead next
More from Use Cases.
QR Codes on Business Cards: Small Codes That Still Scan
A business card is the smallest surface a QR code ever gets. Here is the size floor, the payload limit, and the finish that quietly ruins both.
QR Codes on Brochures: What to Link and Where to Put It
A brochure is already the long read, so its QR code has to offer something paper cannot. Here is what to link, where to place it, and how to print it.
QR Codes for Restaurants: Menus That Do Not Annoy Guests
The QR menu earned a bad reputation for good reasons. Most of them are fixable with better implementation.