Published on 8/6/2026
The Code Worked for a Year, Then Stopped: A Field Diagnosis
There is plenty written about codes that never worked. This is about the other case, which is more common and less understood: it scanned fine for months, and now customers say nothing happens.
Before touching the code, look at the scan history — it tells you where to look.
Read the graph first
Scan counts have a shape, and the shape names the suspect:
- A cliff — scans normal, then zero from one day. Something switched off. That is the destination, a certificate, a domain, a redirect service — not the print. Paper does not fail on a Tuesday.
- A slow decline over months. The object is decaying: sun, abrasion, dirt, a laminate lifting. Physics is gradual.
- A drop that coincides with a refit, a season or a rearrangement. The environment changed: a lamp moved, a shelf went in front of it, a glass cover was added, the clocks changed and the corner is now dark at closing time.
- Scans still arriving, complaints still arriving. The code is fine and the page is broken. This is the case people misdiagnose most, because "it doesn't work" sounds like the code.
That last one is worth stressing: a scan is recorded when the code is read, so if the count is healthy, the square is doing its job. The failure is downstream.
Cliff: the destination died
In order of how often it actually happens:
- The page moved or was deleted. A site rebuild, a CMS migration, a campaign page taken down at the end of the campaign — the classic one, because the person who removed it never knew a printed code pointed at it.
- The certificate expired. The code decodes, the browser refuses with a security warning, and to a customer that is indistinguishable from a broken code. Worse, it looks like a scam, so they will not try again.
- The domain lapsed — a sub-brand, an agency-registered campaign domain, a name nobody renewed because nobody remembered it was load-bearing.
- A URL shortener shut down. If a static code was printed with a third-party short link, that service is now a dependency you do not control. Several have closed over the years and taken every printed link with them.
- An app deep link stopped resolving after an app update or a store change, so the code opens nothing on half the phones.
If the code is dynamic, all five are a two-minute edit. If it is static, they are a reprint — which is the entire practical argument for dynamic codes, stated as a repair bill rather than a feature.
Slow decline: the object aged
- Sun. UV takes cyan and magenta first, so a coloured or gradient code fades toward its background months before a black one would. Outdoor codes should be dark on white and laminated; a branded gradient outdoors has a season in it.
- Abrasion. Anything handled — a tin, a menu, a machine plate — loses its surface. Laminate, or mark deeper.
- Grease and dust. Restaurant table tents acquire a film that scatters light. Nobody schedules cleaning a QR code; it is worth adding to a closing checklist.
- Moisture. Condensation under a laminate, or a label lifting at the edge, distorts the grid. Fridges, outdoor equipment and bathrooms are where this shows up.
- Thermal paper. A code printed on a till receipt fades in weeks, faster in a warm car or a wallet. Anything expected to be scanned later does not belong on thermal paper at all.
- Photocopies. Each generation eats the module edges. If a sheet is being re-copied by staff rather than reprinted from the file, the code degrades a little every time.
Environment: nothing changed except everything around it
- Light. A new spotlight, a repositioned lamp, a shop window at a different hour — glare on a glossy surface throws the light straight back into the camera.
- Glass. A code that gets a protective cover, or moves inside a display case, is now read through a reflective layer at an angle.
- Distance. A counter code that used to be at the till is now behind a screen or a queue barrier, and the size that worked at 30 cm does not work at a metre.
- Focus. A small code forces the phone very close, and below a camera's minimum focus distance the image blurs. Codes that "only work on some phones" are usually too small rather than badly printed.
- Occlusion. A menu holder, a price tag, a promotional sticker, a plant. The quiet margin around the code is part of the code, and shops fill empty space by instinct.
The one that is not an accident
Codes in public places get stickers put over them. A code on a parking meter, a poster or a table is trivial to cover with a fraudulent one, and the victim believes they scanned yours.
Two habits, neither technical: print your own address under the code so a person can see where it should go before scanning, and look at your own placements — a sticker over a sticker is obvious to anyone who glances, and nobody glances unless it is someone's job.
A ten-minute diagnosis
- Look at the scan history. Cliff, decline, or healthy? That alone eliminates two thirds of the list.
- Scan it yourself, from the real object, in the real place, at the real hour. Not from the design file, not in the office.
- If it decodes, open the address in a browser. A certificate warning or a 404 ends the investigation right there.
- If it does not decode, try a fresh print of the same code. Reads on paper but not on the object → the object. Fails on both → the design or the data.
- Try a second, older phone. Works on a new phone only means the code is too small or the contrast is marginal.
- Fix the destination first. It is free, instant on a dynamic code, and it is the most common cause.
Making the next one outlive the print
- Dynamic, so a dead destination is an edit and not a reprint.
- A short link, because fewer modules means bigger modules at the same physical size — more margin against dirt and fade.
- Dark on white outdoors, laminated, with brand colour in the frame around the code rather than in the modules.
- The address printed underneath, which survives everything the square does not.
- A calendar reminder to check printed codes twice a year. It sounds fussy until the first time a campaign runs for a month against a dead page.
Quick answers
- Why did my QR code stop working? Most often the destination moved or its certificate expired — not the code.
- How do I tell the difference? By the scan graph. A sudden zero is the destination; a slow decline is the physical code.
- Scans are recorded but customers complain — what does that mean? The code is fine and the page behind it is broken.
- Why does it work on new phones only? Usually too small or too low in contrast, so only a better camera copes.
- Do codes fade? Yes. Cyan and magenta go first, which is why outdoor codes should be dark on white.
- Can I fix a printed code without reprinting? If it is dynamic, yes — repoint it. If it is static, no.