Troubleshooting Guide · 12 min read

Why QR Codes Stop Working — and What It Costs When They're Already Printed

A dead QR code on a screen is an inconvenience. A dead QR code on 10,000 printed boxes is a reprint bill. This guide separates the four real causes, tells you which ones you can still fix after printing, and what to check before the next run.

Almost nobody's QR code fails because the ink faded. The printed symbol is an open standard — ISO/IEC 18004 — and it has no expiry date, no timer, and no remote off switch baked into the pattern. If you print a code today on decent stock, the optics will still decode in twenty years.

So when someone says their QR code "expired," something in the chain behind the symbol changed. There are exactly four places that chain breaks. Knowing which one you're looking at determines whether you're facing a five-minute dashboard fix or a reprint.

The symbol is permanent. The service pointing it somewhere is what has a billing date.

Cause 1: The redirect service turned your code off

This is the most common and the most expensive, because it usually surfaces after distribution. A dynamic QR code doesn't contain your destination — it contains a short URL owned by whoever generated it. Scanning hits their server, and their server forwards the visitor to you. That forwarding step is the product you're paying for, and when payment stops, so does the forwarding.

Free tiers are where this bites hardest, because the deactivation is often scheduled from the moment you generate the code. A trial ends, a scan cap is reached, or a card expires — and every printed copy simultaneously goes to a billing page. Our friends at Lifetime QR Codes cover this failure mode in detail in why your free QR code stopped working, and the wider pattern in why QR codes stop working.

If you want to know where a specific vendor stands before you commit, these break it down per provider: do Bitly QR codes expire, Canva, Google, and Linktree.

Can you fix it after printing?

Sometimes. If you can reactivate the account, the printed codes come back to life immediately — nothing physical needs to change. If the provider has released the short URL to someone else, or the account is unrecoverable, the printed run is dead and you're reprinting. That asymmetry is the whole argument for checking cancellation terms before a print run rather than after.

Cause 2: The destination moved, and nothing was left behind

The redirect works perfectly and delivers the visitor to a 404. A site migration renames URLs, a campaign landing page gets cleaned up, a product page is retired at end-of-season, a domain lapses. The QR code did its job — there was just nothing at the other end.

This is the most recoverable failure on the list and the most frequently self-inflicted. QRTRAC's guide to QR code broken links walks through diagnosing which link in the chain actually failed.

Can you fix it after printing?

Almost always, and often in minutes. With a dynamic code, repoint it in the dashboard. With a static code, you can't change the symbol — but you control the destination server, so add a 301 redirect from the old path to the new one. Every printed copy starts working again without anyone touching the artwork. Keep that redirect permanently: it costs nothing and it's the difference between a live code and a reprint.

Cause 3: It was never reliably scannable in the first place

This one hides, because it usually doesn't fail completely — it fails for some people, in some lighting, at some angles, which reads as low engagement rather than a broken code. The usual culprits:

  • ·Too small for the scan distance. A rough rule: the code needs roughly 1/10th of the distance it's scanned from. A billboard read at 10 metres needs about a metre of code.
  • ·No quiet zone. The 4-module clear margin around the symbol isn't decoration — scanners use it to find the code's edges. Designers crop it constantly.
  • ·Inverted or low contrast. Light modules on a dark background break many scanners. So does a mid-tone brand colour against another mid-tone.
  • ·Excessive data density. Long URLs with full UTM strings create fine-grained patterns that blur at small sizes or on absorbent stock. This is the single best argument for a short link inside the code.
  • ·Substrate and finish. Gloss varnish causes glare; textured or uncoated stock bleeds ink; curved surfaces distort the grid.

Two references worth having open when you're setting up artwork: QRTRAC's scannability design guide for contrast, sizing, and quiet-zone rules, and their explainer on QR code error correction — which is what determines how much printing damage, smudging, or wear a code can absorb and still decode. For print-resolution specifics, Lifetime QR Codes has a high-resolution QR print guide.

Can you fix it after printing?

No. This is the one category that is genuinely unrecoverable — the artwork is the problem, and the artwork is already printed. It's also entirely preventable with a ten-minute proof test, which makes it the most painful way to lose a print run.

Cause 4: The scan is blocked before it reaches you

Less common, but genuinely confusing when it happens: the code scans, the destination is alive, and the visitor still doesn't arrive. Corporate and guest Wi-Fi filters block unfamiliar shortener domains fairly aggressively, and a shortener domain that's been abused by someone else can end up on a blocklist you had nothing to do with. Some mobile browsers also warn on redirect chains that pass through several hops.

QRTRAC covers this specific scenario in why printed QR codes get blocked on Wi-Fi. The practical mitigation is to redirect through a domain you own — a branded short domain both looks more trustworthy to the scanner and keeps your reputation independent of a shared shortener's.

Diagnose it in five minutes

Work through these in order — the first failure tells you which cause you have.

  1. Scan the printed piece with two different phones. If one works and one doesn't, you're in Cause 3 (scannability), not a dead link.
  2. Read the URL the scan resolves to. A billing, upgrade, or "code inactive" page is Cause 1. A 404 is Cause 2.
  3. Paste that URL into a desktop browser. Works on desktop but not on phone data or venue Wi-Fi? That's Cause 4.
  4. Decode the symbol itself with a scanner that shows the raw contents — a free QR scanner tool works. If it decodes to your final URL directly, it's static: no service can have switched it off, so look at Cause 2 or 3.
  5. Check the account behind the code for lapsed billing, an ended trial, or a hit scan cap. QRTRAC's troubleshooting walkthrough covers the less obvious cases.

What a dead code actually costs

The reprint invoice is the visible number, and usually the smaller one. What tends to cost more is everything attached to it: the scans lost between the code dying and someone noticing, the campaign window that doesn't come back, the staff hours spent diagnosing, and — on packaging or signage — the physical replacement of items that were otherwise fine.

The uncomfortable part is the detection gap. Nobody reports a QR code that doesn't work; they just don't scan it. Codes have sat dead for months on live packaging before anyone noticed, which means the loss is usually much older than the day it's discovered.

Preventing it on the next run

  • ·Use a dynamic code for anything printed. Even if the destination is final today. The one thing you cannot buy back later is the ability to repoint.
  • ·Get the lapse policy in writing. Ask directly: what happens to codes already printed if I stop paying? Vague answers are answers.
  • ·Prefer a domain you control for the redirect, so filters and blocklists track your reputation rather than a shared shortener's.
  • ·Test the actual proof, at actual size, on the actual substrate — not the PDF on a monitor. Multiple phones, poor lighting, realistic distance.
  • ·Keep old URLs redirecting forever. A 301 you never delete is the cheapest insurance for print that's already in the field.
  • ·Re-scan periodically. Put a calendar reminder on anything printed at volume. Quarterly is enough to close the detection gap.

For a structured pre-press pass, Lifetime QR Codes maintains a QR printing checklist, plus a packaging-specific guide for long-life product runs. If you've decided to move existing codes off a subscription, their migration guide covers doing it without breaking what's already in market.

The short version

Printed QR codes fail for four reasons: the redirect service switched them off, the destination moved, they were never reliably scannable, or something between the phone and your server blocked them. Three of those four are fixable after printing — often in minutes, without reprinting anything. Only bad artwork is unrecoverable, and that's the one a proof test would have caught.

Which means the decision that matters most happens before the print run, not after: whether the code you're about to commit to physical media can be repointed later, and whether anyone can switch it off on you.

Frequently asked questions

Why did my QR code stop working after printing?

In almost every case the printed symbol is fine and something behind it changed. The four common causes are: the redirect service deactivated the code when a subscription or free trial lapsed; the destination URL moved or returned a 404; the code was printed too small or with too little contrast to scan reliably; or the destination was flagged by a network filter. Static codes can only fail from the last two — dynamic codes can fail from all four.

Do QR codes expire on their own?

No. The QR symbol itself is an open ISO/IEC 18004 pattern with no built-in timer or kill switch. A printed code can be optically decoded for decades. What expires is the service redirecting the scan — which is why 'expiration' is a billing event, not a technical one.

Can I fix a QR code that's already printed?

If it was a dynamic code, yes — you can repoint the destination without touching the printed artwork. If it was a static code encoding the dead URL directly, you cannot change the code, but you can often restore the old URL as a redirect on your own domain, which fixes every copy already in the field.

How do I stop this from happening again?

Before your next print run: use a dynamic code so the destination stays editable; confirm in writing what happens to your codes if you stop paying; keep the redirect on a domain you control where possible; and test the physical proof at real size before committing to the run.

Read next

View all posts →