# QR code not working — a 60-second diagnosis

> A QR code fails in one of three ways. The scanner never detects it (quiet zone, contrast, size), it decodes the wrong string (bad input, tampering, a mangled image), or the destination is broken (dead URL, retired shortener, blocked network). Decode the code with a scanner that shows the raw text — that one step splits the three classes apart.

Source: https://useqr.app/docs/troubleshooting/qr-code-not-working · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

## The three failure classes

"Not working" hides three different faults with three different owners:

| Class | What you see | Where the fault is |
|---|---|---|
| 1. Never detected | The camera never reacts; no banner appears | The image — quiet zone, contrast, size, blur |
| 2. Decodes the wrong thing | A link appears, but it is wrong or garbage | The data — wrong input, tampering, a mangled file |
| 3. Destination broken | The link opens, then errors | The URL — dead page, retired shortener, blocked network |

The instinct is to re-scan harder. Diagnosis is faster.

## The 60-second flow

1. **Decode the code with a tool that shows the raw text** instead of following it. Our [scanner](/scan) does this in the browser, from the camera or an uploaded photo.
2. **Nothing decodes at all?** Class 1 — the image is the problem.
3. **It decodes, but the string is wrong?** Class 2 — the data is the problem.
4. **The string is right, but the link fails?** Class 3 — the destination is the problem.

That single decode separates the image from the data from the destination — the split most people never make. Each class routes to its fix below.

## Class 1 — the camera never finds it

Ranked by how often each is the real cause:

1. **Quiet zone.** The blank margin must be at least **4 modules** on every side. Designers crowd it constantly, and without it the code is never detected at all — see [quiet zone too small](/docs/troubleshooting/qr-code-quiet-zone-too-small).
2. **Contrast and polarity.** Dark modules on a light background, with at least a **40% luminance difference**. Light-on-dark and low-contrast brand colours scan on some phones and not others.
3. **Size for the distance.** Printed width must be at least **scan distance ÷ 10**. A 3 cm code across a lobby has no chance — see [too small to scan](/docs/troubleshooting/qr-code-too-small-to-scan).
4. **Blur and damage.** Upscaled raster images, heavy compression, glare, folds and worn print.

The [not-scanning checklist](/docs/troubleshooting/qr-code-not-scanning-checklist) works through all of these in priority order, with the numbers.

## Class 2 — it decodes to the wrong thing

- **Wrong input.** A typo, a missing `https://`, trailing whitespace or an invisible character in the pasted URL. Regenerate from a copied link, never a typed one.
- **Tampering.** A sticker pasted over the original is the standard quishing move on parking meters, payment standees and menus. Feel the surface for a raised edge.
- **A design tool mangled it.** Codes that were traced, redrawn, mirrored or flattened can decode to garbage. Regenerate rather than repair.

Full walkthrough: [QR code opens the wrong link](/docs/troubleshooting/qr-code-opens-wrong-link).

## Class 3 — the code is fine, the destination is broken

The string decodes exactly as intended; the fault is at the other end:

- **404 or moved page** — the site was rebuilt and the old path lost its redirect.
- **A retired link shortener** — free redirect services sunset, prune links or move them behind paywalls; see [shortener expired](/docs/troubleshooting/qr-code-link-shortener-expired).
- **A lapsed domain** — the worst case, because someone else can register it next; see [dead domain](/docs/troubleshooting/qr-code-goes-to-a-dead-domain).
- **A blocking network** — corporate DNS filters and captive portals commonly block shortener domains wholesale.

Test the URL in a browser on mobile data, not the office WiFi, before blaming the code.

## Prevent the next one

Before anything goes to print, run the artwork through our [validator](/validate) — it renders the code, decodes the output and checks contrast and quiet zone, which catches classes 1 and 2 in a single pass. For class 3, point printed codes at a stable path on a domain you own, and re-test the printed estate quarterly.

## FAQ

### Why did my QR code suddenly stop working?
A static code's pattern never changes, so a code that used to work almost always has a destination problem: a moved page, a retired shortener or a lapsed domain. Physical wear and a sticker pasted over the original are the remaining suspects.

### How do I find out what is wrong with my QR code?
Decode it with a scanner that shows the raw text rather than opening it. No decode means an image problem, a wrong string means a data problem, and a correct string with a failing link means a destination problem.

### Do QR codes expire?
The pattern itself never expires — it is printed geometry. What expires is what it points to: shortened links, hosted redirects and domains all have lifespans. A direct URL on a domain you keep renewed works indefinitely.

### Can a QR code be repaired without reprinting?
Only destination faults. If the code points at a path on a domain you control, fixing the page or adding a redirect heals every printed copy instantly. Image and data faults require regenerating and reprinting.

## Try it

- https://useqr.app/scan
- https://useqr.app/validate
