Why is my QR code not working? Every cause, in the order to check them
Either the phone cannot read the code, or it reads it fine and the link behind it is broken. Those are different problems with different fixes, and the first thing to do is work out which one you have. Then go down the list.
First, find out which of two things is failing. Point the camera at the code. If no banner or link appears at all, the phone cannot read the pattern: the problem is the printed image (size, border, contrast, logo, blur). If a link appears but tapping it goes nowhere, the phone read the code fine and the problem is the destination (a typo, a dead page, or a dynamic code whose vendor switched it off). The two lists below are separate; start with the one that matches.
The phone cannot read the code
Work down this list in order. The first three account for most printed failures.
1. No quiet zone
The QR standard requires a blank border of four modules (four small squares' width) on every side. It is how the decoder finds the edge. Designers crop it to make the code fit, or run a border line or a photo right up to it. If the white space around the pattern is thinner than the pattern's smallest square times four, add it back. This is the single most common reason a code scans on screen and fails in print.
2. Too small for what is in it
Each square in the grid needs to be about 0.5 mm in print for a phone to resolve it. A short link fits in a 25 or 29-square grid and scans at 2 cm. A URL with tracking parameters needs a 41 or 49-square grid and does not: at 2 cm, its squares are 0.35 mm and the decoder is guessing. Either print it larger or shorten what is encoded. Minimum QR code size for print has a size table by content.
3. Scaled-up PNG
A PNG is a fixed grid of pixels. Exported at 300 px and placed on an A3 poster, every module edge becomes a soft grey ramp that the decoder reads as noise. Export SVG (true vector) for anything printed, or a PNG at least 1,000 px for small print. The free generator does both.
4. Low contrast, or inverted colours
The decoder wants dark modules on a light background. Yellow on white, light grey on white, or a pale gradient will not read. Inverted codes (white on black) fail on a meaningful share of phones. Metallic and glossy inks reflect the phone's torch straight back. Fix: darker modules, lighter background, matte finish.
5. A logo with the wrong error correction
A logo covers real data. The code only survives that at error-correction level H (30% recovery), with the logo under about 20% of the area and clear of the three big corner squares. Generators that default to M and still let you add a logo produce codes that scan in the preview and fail after the first smudge. Regenerate at H, or shrink the logo. QR code with a logo has the rules.
6. Physical damage, curves and glare
Scratches, a sticker peeling at a corner, a fold through the middle, a code wrapped around a bottle so only two thirds is visible from any angle, a laminated menu in a spotlight. Error correction handles some of this and not all. If the corner squares are damaged, no level of error correction helps, because those are how the phone finds the code.
7. Bad light or a bad angle
Dim restaurant, phone at 45°, hand shaking. Move closer, hold the phone square to the code, let the camera focus for a full second. If it scans in good light and not in bad, the code is marginal: print it bigger next time.
8. A screen, not a print
Scanning a code shown on another phone or a laptop usually works, but screen brightness turned down, a dark-mode inversion, or a moiré pattern from the screen's pixel grid can all defeat it. Turn the brightness up and pull the phone back.
The phone reads it, but the link is broken
The banner appears, you tap it, and you get an error page, a blank page, or nothing. The code is fine. The problem is what it says.
9. A typo, or a missing https://
The commonest cause by far. cafe.exmaple.com. A trailing space. A URL typed without https://, which some phones treat as plain text and show as a message instead of opening. Read the address in the banner character by character. If it is wrong, there is no fix for a static code except regenerating and reprinting; a dynamic code can be repointed from the dashboard.
10. The page moved or was deleted
The menu PDF was replaced with a new one at a new address. The landing page was taken down after the campaign. The site was rebuilt and the URLs changed. The code is faithfully sending people to a page that no longer exists. Put a page back at the old address, or if the code is dynamic, retarget it.
11. An expired dynamic code
If the address in the banner is a short link on a domain that is not yours (bit.ly, qrco.de, flowcode.com, app.qr-code-generator.com and the like), the code is dynamic and the redirect has been switched off: a free trial ended, a subscription lapsed, the plan was downgraded, or the vendor deleted it. Log into that account and reactivate it if you can; the printed code itself cannot be changed. Do QR codes expire? covers each vendor. This is also the answer to "my QR code worked last month and now it does not".
12. It is not a URL at all
A code containing plain text shows the text in a popup and does not open anything. A code containing a phone number offers to call. A code containing an email address offers to compose. If you wanted a web page and got a text box, the generator was set to the wrong type.
QR code not working on iPhone
- Settings → Camera → Scan QR Codes must be on. It is on by default, but it can be turned off, and a phone that has never scanned a code is worth checking.
- Use the built-in Camera app. Third-party camera apps and the in-app cameras of WhatsApp or Instagram do not scan QR codes.
- The result is a yellow banner at the top of the screen, easy to miss and easy to dismiss by moving the phone. Hold still and tap it.
- In Control Center, the Code Scanner (the QR icon; add it under Settings → Control Center if it is not there) is more forgiving than the Camera app on marginal codes and opens the link directly.
- Older iPhones on iOS 10 or earlier do not scan from the Camera app at all and need a scanner app.
QR code not working on Android
- Most current Android phones scan from the default Camera app. On some Samsung models the feature is a toggle: Camera → Settings → Scan QR codes.
- Google Lens (in the Google app, the Camera app, or long-press the home button) scans any QR code and is the fallback when the camera app will not.
- Some manufacturer camera apps show the result as a small chip at the bottom of the viewfinder rather than a banner. Look there.
WiFi and contact-card codes
These carry data rather than a link, and they fail for their own reasons.
- WiFi: wrong security type. A network on WPA2 encoded as WEP, or vice versa, will be read by the phone and then fail to join. Check what the router is set to. WPA, WPA2 and WPA3 all go under WPA in the code.
- WiFi: wrong password or network name. Both are case-sensitive. A hidden network needs the hidden flag set in the code or the phone will not look for it.
- WiFi: the phone joins, then nothing loads. The code worked. The network has a captive portal or no internet.
- Contact cards on iPhone open in a preview with an "Add contact" button, which is easy to mistake for a failure. On Android the behaviour depends on the phone; a Google Lens scan gives an "Add to contacts" option reliably.
Canva, Adobe Express and other design tools
Codes from design tools fail for two reasons that are not the tool's fault. The first is a URL typed without https://, which some phones show as text rather than opening (cause 9 above). The second is that the design around the code eats the quiet zone: a coloured background block, a frame, or a photo running up to the code's edge (cause 1). Export the code with its white border intact and check the address by scanning before sending anything to print. Codes from these tools are static and do not expire, so if one has stopped working, it is one of these two or the page itself has moved.
How to stop it happening again
- Print one copy at final size and scan it with an older phone in ordinary light, before the real run. A monitor preview is not a test.
- Export SVG for print. Never scale a PNG up.
- Keep the quiet zone. Tell the designer it is not optional.
- Encode as little as possible. A short link makes a smaller, more forgiving code than a full URL with parameters.
- If the destination might change, use a dynamic code on a domain you own, so a moved page is a thirty-second edit rather than a reprint, and no vendor can switch it off. Dynamic vs static QR codes explains the choice.
Regenerate it properly. The free generator keeps the quiet zone, exports SVG, and locks error correction to H when a logo is added. For codes you can fix after printing, SteadQR dynamic codes will resolve on your own domain and never expire because a payment did; they are in build, and you can join the waitlist.
Open the free generatorAll guides · Free QR code generator · Dynamic codes waitlist