Why QR codes stop working, and how to prevent it
Updated
The real reasons a printed QR code stops working, from ended trials and dead links to damage and poor contrast, and how to avoid each one.
A QR code does not wear out on a schedule. The black and white pattern is a piece of text, and it will scan in twenty years if the print survives. When a code "stops working", something around it changed: the service behind it, the page it points to, or the physical print.
The fix depends on which of those it is, so the first step is telling them apart.
A note before you read on: three of the causes below are policies some QR services apply to the codes their customers made. KeeperQR applies none of them, and each section says what KeeperQR does instead. Where a cause can affect any dynamic code, KeeperQR's included, the article says that too.
First, find out which kind of failure it is
Scan the code with your phone camera and watch what happens.
- The camera does not recognise a code at all. The problem is physical: size, contrast, damage, or the print itself. See the section on print problems below.
- The camera shows a link, but the page is an error, an upgrade prompt, or a notice that the code is inactive. The problem is the service behind a dynamic code.
- The page opens, but it is a 404 or the wrong page. The redirect works, and the destination is the problem.
Most phone cameras show the link before opening it. That link tells you whether the code is static, with your own website's address in it, or dynamic, with a QR service's short domain in it.
Problems caused by a QR service's policies
A dynamic code holds a short link to a QR service, which redirects each scan to your page. If the service stops redirecting, every printed copy stops working at once, even though nothing on the paper changed. When a code made with another dynamic QR tool stops working, it is usually one of these.
Some services deactivate codes when the trial ends
Many QR services let you create dynamic codes during a free trial, then deactivate them when the trial ends. The codes still scan, but they lead to an error or a notice instead of your page. People often discover this after printing, when the trial has quietly run out.
How to avoid it: before you print anything from a trial, find the service's written answer to "what happens to my codes when the trial ends?" If it is not written down, assume the codes stop.
With KeeperQR: there is no trial. Every account starts on a Free plan with no end date, and we never switch off a code to make you pay.
Some services pause codes over a free-tier cap
Some free plans allow a small number of dynamic codes, or a monthly scan allowance. Go over it and some codes get paused, sometimes the older ones, sometimes the most scanned ones.
How to avoid it: check the limits on codes and scans before you rely on a free plan for print, and check which codes get paused when you exceed them.
With KeeperQR: the Free plan limits how many codes you can create (3), not how many scans they get, and no code is paused for going over it. If you cancel Pro with more codes than that, every one of them keeps redirecting. The only Free code we ever pause is one nobody has scanned for twelve months, after two emails, and it resumes in one click.
Some services redirect scans to an upgrade page after cancelling
When a paid plan ends, some services keep the code "active" but send scans to an upgrade or sales page instead of your destination. Some put an ad page in front. The code appears to work, which makes this harder to notice than an error.
How to avoid it: read what the service does on cancellation as well as on trial end. They are often different answers.
With KeeperQR: after you cancel, scans still go straight to your destination. There is no upgrade page and no ads in front of your code, because the code that resolves a scan never checks your plan.
Any service can shut down or get blocked
This one applies to every dynamic QR service, KeeperQR included. A code on a service's domain depends on that service answering the link. If the company closes, or its domain gets flagged by browsers for hosting abusive links, every code on that domain breaks.
How to avoid it: use a service that lets you put codes on a domain you own. The printed link then reads as your address, and if you ever leave the service you can point the domain elsewhere and keep every printed code.
With KeeperQR: codes can use a domain you own. KeeperQR also disables codes used for abuse, which lowers the risk of its shared domain being blocked for everyone else. The FAQ sets out what KeeperQR commits to if it ever winds down.
Problems with the destination
These can happen with any dynamic code, whichever service made it, and the destination one can happen to a static code too.
The page behind the code is gone
The redirect can be working perfectly and still send people to a 404. Websites get rebuilt, campaign pages get deleted, and links change when someone renames a page. This one is on the site owner, and a static code is exposed to it just as much.
How to avoid it: keep pages that printed codes point to at a stable address. With a dynamic code you can change the destination when a page moves. Better still, use a service that checks your destinations and tells you when one breaks, so you hear about it before a customer does. KeeperQR checks every active code's destination daily.
The code was paused, scheduled, or protected
Dynamic codes can have an end date, a start date, a pause switch, or a password, and KeeperQR codes have all four. These are settings you or your team control, not something the service does to you. Still, a code whose end date passed, or one that someone in your team paused, looks broken to the person scanning.
How to avoid it: check the code's settings before assuming the worst, and be careful with end dates on anything printed to last.
Problems with the print
These affect static and dynamic codes equally. The print size guide covers each in more detail.
- Too small for the distance. A rule of thumb is a code at least one tenth as wide as the scanning distance.
- The blank border was cropped. A QR code needs a quiet zone four modules wide on each side, and layouts often squeeze it out.
- Low contrast. Pale colors, a dark background behind a light code, or a photo behind the pattern.
- Damage. Scratches, fading, folds, stickers over part of the code, or a curved surface. Error correction recovers some damage, not all of it.
- Glare. Glossy laminate, or a window in direct sun.
- A blurry file. A small image scaled up for print. Use a vector file such as SVG.
How to avoid it: print a proof at the final size and scan it in the real location before the full run. The test before you print checklist walks through it.
A short prevention checklist
| Cause | Prevention | In KeeperQR |
|---|---|---|
| Service deactivates codes after a trial | Get the trial-end behaviour in writing before printing | Does not happen. There is no trial, and Free has no end date |
| Service pauses codes over a free-tier cap | Check code and scan limits, and what gets paused | Does not happen. No scan limits, and no code paused over the code limit |
| Service shows an upgrade page after cancelling | Check what scanners see after cancellation | Does not happen. Scans go to your destination |
| Service closes or is blocked | Put codes on a domain you own | Can happen to any service. Use your own domain to stay safe |
| Dead destination | Stable URLs, plus automatic destination checks | Destinations checked daily |
| Paused or scheduled | Review end dates and status before blaming the service | Settings you control in Studio |
| Print problems | Size for distance, keep the quiet zone, test a real proof | New codes export with the quiet zone included |
If you do not need scan counts or the ability to change the link, a static code avoids the service risks completely. The free generator makes one with no account. See static vs dynamic QR codes for the trade-offs.
How KeeperQR handles this
KeeperQR is built so the service-policy problems above do not happen to your codes.
- We never switch off a code to make you pay. Cancel Pro and your account moves to Free: every code keeps redirecting and scans are still recorded, with no upgrade page or ads in front. The code that resolves a scan does not read your plan at all.
- No scan limits. Free limits how many codes you create, never how many scans they get, and no code is paused for going over a limit. A Free code nobody scans for twelve months is paused after two emails, and resumes in one click.
- Codes can use a domain you own, so the printed link is yours.
- Destinations are checked every day, and the workspace owner can get an email when one breaks.
The one exception is abuse. Codes used for phishing, malware, or anything else the acceptable use policy prohibits get disabled. The FAQ covers that, and what happens if KeeperQR ever shuts down.
Codes we never switch off to make you pay
Dynamic QR codes with real scan analytics. Free for 3 codes, no card.
Start free