Skip to content

Why Is My QR Code Not Working? 9 Causes and Fixes

3 min read

Start here: scan it with your phone camera and note what happens. Nothing at all, an error, or the wrong page — each points at a different cause.

The tester below decodes your code right in your browser (the image never leaves your device), tells you whether it’s static or a redirect, and checks whether the destination still resolves.

QR code tester

Upload or drop a QR image. It’s decoded in your browser — the image never leaves your device; only the destination URL is checked for reachability.

or drag it here

PNG, JPG, or SVG

Nothing happens when you scan

1. The code is too small for its data

Every QR code is a grid of modules (the small squares). More encoded data means more modules, and more modules at the same physical size means each module is smaller. Below roughly 0.4mm per module, phone cameras fail.

A 140-character URL might need a 37×37 grid. The same code encoding a 20-character short link needs 21×21 — nearly half the density at the same print size.

Fix: shorten the URL before generating the code, or print it larger. Shortening is free and it’s the single most effective fix for scan reliability.

2. No quiet zone

QR codes need a clear margin — 4 modules wide on all sides — with nothing in it. Designers routinely crop this to save space, or run a border right up to the pattern. Scanners then can’t find the code’s edges.

Fix: restore the 4-module margin. It must be blank; a background colour is fine, artwork is not.

3. Not enough contrast

Dark-on-light is required. Light-on-dark (inverted) codes fail on many scanners. So do low-contrast pairings — grey on white, navy on black, or a gradient running through the pattern.

Fix: keep at least a 4:1 contrast ratio, dark pattern on light background. Coloured codes work if the contrast holds.

4. Damage, curvature, or reflection

Scuffing, folds, moisture, gloss varnish reflecting light back at the camera, or heavy curvature on a bottle or can. Error correction tolerates some loss — level H handles about 30% — but not the loss of a corner marker.

Fix: use error-correction level Q or H for anything printed, and keep codes off high-curvature and high-gloss surfaces. Details in QR codes on packaging.

5. A logo covering too much

A logo in the centre is fine within limits. Push past roughly 30% coverage, or place it over a corner marker, and the code stops decoding.

Fix: keep the logo central, under 30% of the area, and use level H error correction to buy headroom.

It scans, but goes somewhere wrong or broken

6. The destination page is gone

The code works exactly as designed and delivers the user to a 404. If the code encodes the final URL directly, you can’t fix this without reprinting.

Fix now: if you control the server, add a redirect at the old URL. Fix for next time: encode a short link so the destination stays editable. See dynamic QR codes.

7. The QR platform switched it off

Many QR generators route codes through their own domain and stop honouring the redirect when a subscription lapses or a free trial ends. The pattern is intact; the company disabled the hop.

Fix: check whether codes expire on your platform, and use a provider that doesn’t gate redirects.

8. The service shut down

goo.gl and Firebase Dynamic Links both stopped serving in August 2025, breaking every code built on them simultaneously. If your code encodes a third-party short domain, it depends on that company continuing to exist.

Fix: use your own domain for anything printed, on a shortener you control.

9. The link was anonymous and got cleaned up

Most services delete unclaimed anonymous links to control abuse — ours after 30 days. Claim links with a free account before printing.

A diagnostic sequence

  1. Scan with a second phone, ideally a different OS. Rules out a device or camera-setting problem.
  2. Decode the code to see the encoded URL.
  3. Open that URL in a browser. If it fails there, the problem is the destination, not the code.
  4. Check the quiet zone — 4 clear modules on every side.
  5. Measure a module. Below ~0.4mm, print larger or shorten the URL.
  6. Check contrast — dark on light, 4:1 or better.
  7. Test the printed piece under real lighting, not just on screen.

Avoiding this next time

  • Shorten the URL first. Fewer modules, sparser pattern, more reliable scan.
  • Encode a short link, not the destination, so you can fix mistakes after printing — and see every scan.
  • Error correction Q or H for print.
  • Test on at least three phone models before a press run.
  • Own the domain for long-lived print.

Generate a code free — every design is machine-verified as scannable before download.

Frequently asked questions

Supercharge your link management.

See why teams use in.bio to create, manage, track, and scale links across campaigns, products, and workspaces.