# QR code opens a 404 page

> The code is fine — the destination page is gone. Usual causes are a site rebuild that moved the page without a redirect, a case-sensitive server rejecting the printed path, or rejected tracking parameters. If you own the domain you can rescue every printed code with one redirect rule; if you do not, you are reprinting.

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

---

## First, confirm which fault you have

Decode the code with our [scanner](/scan) and read the raw string. If the string differs from the URL you intended, this is a data problem — go to [opens the wrong link](/docs/troubleshooting/qr-code-opens-wrong-link). If the string is exactly right and the server answers **404 Not Found**, stay here: the code did its job and the destination let it down.

(If the browser cannot reach the server at all, that is a different and worse failure — see [dead domain](/docs/troubleshooting/qr-code-goes-to-a-dead-domain).)

## Causes, ranked

1. **A site rebuild moved the page.** A CMS migration or redesign changed the URL structure and nobody carried the old paths forward. The most dangerous day in a printed QR code's life is its website's relaunch, often years after printing.
2. **A case-sensitive server.** On most Linux-hosted sites, `/Menu` and `/menu` are different paths. This bites QR codes specifically because of an encoding trick: QR alphanumeric mode only stores **uppercase** letters, so some generators uppercase the whole URL to save modules. The *domain* part is case-insensitive and survives; the **path is not**, and 404s.
3. **Rejected query parameters.** Some routing and firewall configurations return 404 for unexpected query strings, so a URL with tracking parameters dies where the bare URL works. Test both forms.
4. **The page moved behind a login or geo-restriction.** The page exists — just not for the scanner standing in front of your poster.

## The rescue — if you own the domain

This failure has the cheapest fix in QR troubleshooting: one **301 redirect** from the old path to the new one heals *every printed copy simultaneously*, with no reprinting. Add wildcard rules for whole moved sections, and keep a documented list of "printed paths" that every future rebuild must preserve — the usual cause of this fault is a redirect nobody knew was ever needed. The general technique is covered in [changing what a QR code points to](/docs/how-to/how-to-change-what-a-qr-code-points-to).

## If you do not own the destination

There is nothing server-side you can do. Withdraw or cover the printed codes and reprint with a new destination — and take the lesson: printed codes should point at a **domain you control**, precisely so the redirect rescue is always available. Third-party pages, marketplace listings and social profiles are all paths someone else can delete.

## Prevention

- Encode a short, stable, **lowercase** path with no fragile parameters.
- Prefer a dedicated path you create for the campaign (`example.com/menu`) over a deep CMS URL — short paths survive rebuilds better and make [smaller codes](/docs/spec/why-longer-urls-make-denser-codes).
- Re-test your printed estate quarterly: scan each live code, or request each URL with an uptime checker.
- Verify before printing with our [validator](/validate), which renders and decodes the artwork so at least the code side is proven.

## FAQ

### Why does my QR code go to a page not found error?
The code stores a URL whose page no longer exists at that path — usually a site redesign moved it without a redirect. The code itself is working perfectly; the fix belongs on the server.

### Can I fix a printed QR code that opens a 404?
Yes, if you control the destination domain: add a 301 redirect from the old path to the new page and every printed copy starts working again immediately. If the domain is not yours, reprinting is the only option.

### Why does the QR code URL work when I type it but 404 from the scan?
Compare the two strings character by character — case, trailing slash and query parameters. Paths are case-sensitive on most servers, and some setups reject unexpected parameters, so near-identical URLs can behave differently.

### How do I stop QR codes from 404ing in the future?
Point them at short, lowercase, stable paths on a domain you own, document those paths as permanent, and make redirect preservation a required step in any future site rebuild. Then re-test the printed estate on a schedule.

## Try it

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