QRMapper
All posts

Why Did My QR Code Stop Working?

Kevin Brady · · 6 min read

The code worked when you tested it. It worked when the proofs came back. Now a customer is standing in front of your poster with their phone out and nothing is happening — or worse, something is happening and it is an error page.

QR failures fall into two groups, and telling them apart takes about thirty seconds. Either the phone cannot read the pattern, or it reads the pattern fine and the link behind it is broken. Almost everything you can fix without a reprint lives in the second group.

Step one: does the camera see anything at all?

Point a phone at the code and watch for the notification banner with a URL in it.

If a URL appears — even if tapping it fails — the pattern is fine. The ink is doing its job. Skip to the link failures below.

If nothing appears after a few seconds, the pattern is the problem. Try these in order:

  • Move. Too close is as bad as too far. A phone needs roughly ten times the code's width as scanning distance — a 20 mm code wants about 20 cm.
  • Change the light. Glare on glossy laminate or a shadow across half the code both defeat the scanner. Tilt it.
  • Look at the edges. A code needs a clear margin — the quiet zone — of about four modules on every side. If your designer cropped tight to the pattern or ran text right up against it, scanners lose the frame.
  • Check the contrast. Dark pattern on a light background, always. Light-on-dark works on some readers and fails on others; a mid-tone pattern on a mid-tone background fails on most.
  • Check the surface. Curved bottles, stretched fabric, and creased folds distort the grid. A code that scans flat on your desk can fail on the actual product.

If the pattern is the problem, you are looking at a reprint. Print-Ready QR Codes: Size, Contrast, and Placement Rules has the numbers to get it right the second time.

Step two: the URL appears but the page fails

This is the common case, and it is the fixable one. What the error says narrows it fast.

What you seeWhat it means
"Server not found" / DNS errorThe domain is gone — expired, moved, or never renewed
404 Not FoundThe domain lives, the specific page moved or was deleted
A generic "link expired" pageThe link shortener behind the code shut the link down
A parking page full of adsThe domain expired and someone else picked it up
Redirect loop / "too many redirects"A chain of shorteners eating itself
The right page, but broken layoutNot a QR problem at all — that is your website

The dead shortener

This is the single most common cause of a QR code that used to work.

Free QR generators very often bury a third-party link shortener in the code. Your printed pattern does not encode your URL — it encodes theirs, and theirs redirects to yours. That works exactly as long as the shortener is alive, funded, and willing to keep serving your redirect for free. When any of those stops being true, every code you ever printed through them dies at once.

Google's own URL shortener is the cautionary tale: goo.gl links stopped resolving in 2025, taking an unknowable number of printed codes with them. Trial links from QR generators are the smaller, faster version of the same story — a code that works for fourteen days and then serves an upgrade prompt to your customers.

You cannot fix this without a reprint, because the dead domain is baked into the ink. What you can do is never buy it again: check whose domain appears when you scan a code, before the print run.

The expired domain

If the destination domain lapsed, the fix depends on what kind of code you printed.

Static code: the URL is inside the pattern. Renewing the domain is the only fix, and if someone else has already registered it, there is no fix — reprint.

Dynamic code: the pattern holds a short link that you control; the destination is a database row. Point it somewhere else and every printed copy follows immediately. The Reprint Problem: Fixing a Printed QR Code Without Reprinting walks through that repair.

The page that moved

Site redesigns quietly break QR codes. A CMS migration renames /menu to /our-menu, nobody thinks about the table stickers, and six weeks later scans are landing on a 404.

Fix it at the source if you can — a server-side redirect from the old path repairs every inbound link at once, not just the QR. If you cannot touch the site, and the code is dynamic, repoint the code.

Step three: is it you, or is it everyone?

Before you conclude the code is broken, check whether it is broken for everyone.

  • Try a second phone, ideally on a different operating system. A camera app quirk on one device is not a code failure.
  • Try mobile data instead of Wi-Fi. Corporate and guest networks block plenty of domains.
  • Check your own protection settings. If you set a scan limit, an expiration date, or a password on the code, it is behaving exactly as instructed. QR Code Security: Passwords, Scan Limits, and Expiration Dates covers which control does what.
  • Look at the scan log. If your codes report analytics, a code that is still logging scans is being read fine — the failure is downstream, on the page.

That last check is the fastest diagnosis available. Scans arriving but complaints continuing means the pattern is innocent.

Making the next one un-breakable

Three habits remove almost every cause above:

  1. Print a short link you own. If the domain in the code belongs to someone else, your codes have someone else's expiry date. QRMapper codes print as qrmap.cc/?q=ab12cd and the destination stays editable for the life of the code.
  2. Test-scan the proof, not the screen. On the real paper, the real vinyl, the real curved bottle, in the light the code will actually live in.
  3. Re-test after every site change. Add "scan the printed codes" to the checklist for any redesign or migration.

A free QRMapper account gives you five dynamic codes with no card required, so you can see the difference a repointable destination makes before committing to anything. Start there if your last print run is currently a museum of dead links.

A broken QR code is almost never broken ink. It is a promise made by a domain someone else controls — and the fix is to stop making promises you cannot keep.

Print once. Point anywhere.

Create a dynamic QR code you can re-point anytime — free, no credit card.

Get started free