MostlyQR

Why did my QR code stop working? Four causes and how to tell which

A printed QR code that stopped working has one of four causes. The link inside it tells you which, and whether it's yours to fix.

Max Čelar··Dynamic QR codes

What’s new here: A dated observation (18 October 2026) that a switched-off code on a large generator's short domain answers HTTP 200 with an "account disabled" page instead of a 404, so a status check calls it healthy, plus a verdict table generated by the rules our own QR code checker runs, which anyone can try on the checker page.

A QR code that used to work almost never breaks on the paper. Ink doesn’t expire. When a printed code stops working, one of four things happened: the company behind its short link switched that link off, the page it points to moved, the print can’t be read, or the code was made with a typo in it. The link inside the code tells you which one in under a minute, and only the first is out of your hands.

Point your phone camera at the code and look at the preview before you tap it. Or upload a photo to our free QR code checker, which shows the same thing and then follows every redirect behind it. Three outcomes:

  • Nothing appears. The phone can’t read the code at all. That is a print problem (cause 3), and no amount of fiddling with links will fix it.
  • Your own address appears (yourcafe.com/menu). The code is static: the address is drawn into the squares, nothing sits in between, and nobody can switch it off. If it fails, the page is the problem (cause 2) or the address has a typo (cause 4).
  • A short link on somebody else’s domain appears (a few letters, a slash, a short code). The code is dynamic: it sends people to the generator first, and the generator forwards them to wherever its owner pointed it. If it fails, the forwarding was very likely switched off (cause 1).

That third case is the one people find hardest to diagnose, for a reason worth its own section.

# A switched-off code still opens a page, with HTTP 200

You might expect a dead code to produce an error. On 18 October 2026 we checked a switched-off code on qrco.de, the short domain used by QR Code Generator (QRCG by Bitly). It did not redirect anywhere, and it did not return an error. The short link answered:

text
HTTP/2 200
content-type: text/html; charset=UTF-8

and the page it served contained a single component, <qrcg-web-component-error-account-disabled>, which renders an “account disabled” notice. We are not publishing the code’s own path, because it is somebody else’s code.

Three things follow from that one response:

  1. The code still scans. Your customer’s phone opens a page, just not yours. That is why “the QR code works, but it shows something weird” is the usual report.
  2. A simple link check calls it healthy. HTTP 200 means “OK”. Any uptime monitor or broken-link tool that only reads status codes will mark this code as fine. You have to look at what the page says.
  3. The link names who can fix it. The domain in the code (qrco.de here) belongs to the generator. It is the only party that can switch that link back on.

This matches what the generator’s own help centre says happens when a free trial ends: “Dynamic QR Codes are deactivated and point to a service page rather than the original destination.” Other generators’ switched-off pages look different. Some redirect to a notice page instead of serving one at the short link. One observation on one day is an example, not a survey.

Our checker looks for exactly this. When the page at the end of the chain reads like a “this code has been deactivated” notice, in its title, its address or a small set of phrases in its HTML such as “account disabled”, it says so, even when the status is 200.

This is the one that happens to people who did nothing wrong. A dynamic code goes through the generator’s short link, and that link only works while the generator keeps it on. Common triggers, each described in the generators’ own help pages:

  • A free trial ended. Some generators’ free dynamic codes stop redirecting when the trial ends.
  • A subscription lapsed or a payment failed.
  • A free-plan scan limit was reached. QR TIGER’s help centre: “Dynamic QR codes created with a Freemium account have a predetermined limit on the number of scans they can receive. Once this limit is reached, the QR code becomes inactive.”
  • The code or the account was deleted, often by a colleague tidying up a dashboard, or when someone who owned the account left.

How to tell: the link inside the code is on a domain you don’t own, and the page you land on is a notice, an upgrade prompt or a blank screen instead of your content.

What to do: the printed code points to the other company’s address, so only they can switch it back on. Your real choices are to reactivate it with them, or to reprint once with a code that won’t stop. If you’re unsure which applies, the QR code checker shows whose short link is in the code.

# Cause 2: the page it points to moved or was deleted

The code works perfectly and delivers the visitor to a page that isn’t there any more. A website redesign renamed /menu to /our-menu, a PDF was replaced with a new file name, or the site itself went away.

How to tell: the link inside the code is your address (or a short link that forwards to your address), and you land on a “not found” page, usually HTTP 404. If the address starts with http:// and the site only serves https://, some phones will also show a warning or refuse to load it.

What to do:

  • If the code is static, put a page back at that exact address, or set up a redirect on your own website from the old address to the new one. Your web host or site builder can do this, and it fixes every printed copy at once.
  • If it’s a dynamic code you still control, change its destination to the new page. No reprint.

# Cause 3: the print can’t be read

How to tell: the phone camera shows no link at all, or only reads the code from one particular angle and distance. Try another phone too: if a recent phone reads it easily and an older one doesn’t, it’s marginal rather than broken.

The usual culprits:

  • Too small for its content. A code is a grid of modules, and a longer link means more modules squeezed into the same space. In our print-size measurements, a 21-character short link encodes to 25 modules across at error-correction level M and a 116-character product URL to 45. At the same 25mm width that is 0.76mm modules against 0.47mm.
  • No quiet zone. The standard calls for four modules of blank space on every side, and scanners use it to find the code’s edges. A border, a photo or text pushed right up to the code is a frequent cause.
  • Low contrast. Dark modules on a light background. Light-on-dark, pale colours, or a code printed over a busy image all make the scanner’s job harder.
  • Damage and surface. Scratches, fading, folds, glare from lamination, or a code wrapped around a curved bottle.

What to do: reprint. Make it bigger, give it its quiet zone back, and test the printed copy in the place people will scan it, with the worst phone you can find.

# Cause 4: a static code with a typo in it

A static code is the address drawn as squares, so a typo is drawn in too: cafe.com/menu encoded as cafe.com/mneu, or a misspelt domain.

How to tell: the link inside the code is almost-but-not-quite your address. A wrong path gives a “not found” page on your own site. A misspelt domain usually gives no answer at all.

What to do: if the typo is in the path on your own site, add a redirect from the misspelt path to the real page (same fix as cause 2). If the domain itself is misspelt and you don’t own it, there is no fix from your side. Reprint.

# What the checker concludes, case by case

Here is the same diagnosis run through the code behind our QR code checker, over seven example responses, one per situation above. The fetch is simulated (no real codes, example domains only), so this table shows what the checker concludes from each kind of response, not what any particular company’s code does today. Case 5 reproduces the body of the qrco.de response from 18 October.

Case Link in the code Hops (status) Verdict Switched-off notice
Static, page live https://www.cafe.example/menu www.cafe.example (200) static no
Static, page moved https://www.cafe.example/old-menu www.cafe.example (404) broken no
Static, typo in domain https://www.cfae.example/menu www.cfae.example (unreachable) broken no
Short link, switched on https://short.example/Ab12Cd short.example (301) → www.cafe.example (200) redirect no
Short code, account-disabled page https://qr.example/Xy34Zw qr.example (200) hosted yes
Short link, to a “deactivated” page https://short.example/Zz99Yy short.example (302) → generator.example (200) redirect yes
MostlyQR code https://mqr.sh/AB12CD mqr.sh (302) → www.cafe.example (200) mostlyqr no

How to read it:

  • static: no other site in the chain. Nothing can switch it off; it works while the page exists.
  • redirect: the code goes through another site’s short link first. That site decides where it goes, and its domain is the first hop in the chain.
  • hosted: no redirect, but the link is a short code on a site that serves the page itself (case 5). Unless that site is yours, whoever runs it controls the code.
  • broken: the chain ends in an error or never answers.
  • Switched-off notice is a separate flag on top of the verdict. Look at cases 5 and 6: both return 200 at the end of the chain, and the notice flag is the only thing that separates them from a working code.

The table is generated, not typed: we ran the QR code checker’s own rules over each example response and copied its verdicts. You can try any real code the same way on the checker page.

# What this doesn’t cover

  • One generator, one day. The qrco.de response is a single observation from 18 October 2026. Other generators’ switched-off codes behave differently, and any of them can change what theirs do.
  • The checker’s limits. It follows at most eight hops, gives up after eight seconds, reads only the first 64 KB of a page, and spots a notice from a short list of phrases. A notice worded some other way will get a verdict but no flag. And a “redirect” verdict says who controls the code. It doesn’t say the code is broken.
  • Print problems aren’t diagnosed by a link checker. If the phone can’t read the code, there is no link to check. The checker can only read a clear photo.

# The short version

  1. Read the link inside the code with your camera preview or the QR code checker.
  2. Nothing reads: reprint it larger, with its quiet zone, and test the paper copy.
  3. Your own address: fix the page or add a redirect on your site. If the domain is misspelt, reprint.
  4. Someone else’s short link landing on a notice: only that company can switch it back on.

If you do end up reprinting, choose deliberately. A static code can’t be switched off but can’t be changed either. A dynamic QR code can be changed after printing, but it depends on the company behind it. Ours keep redirecting to their last saved destination even if you cancel a paid plan, for as long as you keep your free account and MostlyQR runs. You can make a replacement here; the first dynamic code is free, no card needed.

Frequently asked questions

Why did my QR code stop working when nothing changed?

Usually because the code holds a short link on the generator's domain, not your own address, and the generator switched that link off: a free trial ended, a subscription lapsed, or a free-plan scan limit was reached. The printed pattern is fine. Only the company that owns the short domain can turn it back on.

How can I tell if my QR code is static or dynamic?

Look at the link inside it, either in your phone camera's preview before you tap it or with a QR code checker. If it is your own website's address, the code is static. If it is a short link on another company's domain, the code is dynamic and that company decides where it goes.

Can a QR code expire by itself?

No. The printed pattern has no date in it. A static code works for as long as the page it points to exists. A dynamic code works for as long as the company behind its short link keeps that link switched on.

My phone doesn't react to the QR code at all. What's wrong?

That is a print problem, not a link problem. The code is too small for the distance it is scanned from, has too little contrast, is damaged, or is missing the blank margin (the quiet zone) around it. Reprint it larger, dark on light, with four modules of blank space on every side, and test the printed copy rather than the file.

Sources
  1. QR Code Generator support: What happens to my account and QR Codes when the trial expires?
  2. QR TIGER help centre: How do I fix a QR code that has reached its scan limit?
  3. QR Code standardization (ISO/IEC 18004), Denso Wave