SteadQR

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.

Published 17 September 2026 · 8 min read · by SteadQR

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

QR code not working on Android

WiFi and contact-card codes

These carry data rather than a link, and they fail for their own reasons.

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

  1. 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.
  2. Export SVG for print. Never scale a PNG up.
  3. Keep the quiet zone. Tell the designer it is not optional.
  4. Encode as little as possible. A short link makes a smaller, more forgiving code than a full URL with parameters.
  5. 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 generator

All guides · Free QR code generator · Dynamic codes waitlist