“My QR code doesn’t work” almost always has a specific, diagnosable cause rather than being a mysterious or random failure. This guide walks through the most common reasons a code fails to scan, roughly in order of how often we see each one, so you can identify which applies to your situation and fix it directly rather than guessing.
Problem: the code is too small for its content
What it looks like: the code scans fine on a large screen preview but fails once printed at a small physical size, especially for longer encoded text or a vCard with several fields.
Why it happens: more encoded data requires more modules (the small squares making up the grid), which means each individual module gets physically smaller for a given print size. Below a certain module size, camera sensors — especially older or lower-end ones — struggle to resolve individual squares clearly.
The fix: either shorten the encoded content (a shorter URL, fewer vCard fields) or increase the physical print size. As a rule of thumb, the code should be at least 2×2 cm for typical close-range content, larger for anything encoding more data or intended to be scanned from further away.
Problem: insufficient quiet zone
What it looks like: the code fails intermittently, working for some scanners or angles but not others, especially when placed near other design elements.
Why it happens: the blank margin around a QR code (the “quiet zone”) tells a scanner where the code’s boundary is. Cropping the code tightly, placing it against a busy background, or letting text or images overlap the margin interferes with this boundary detection.
The fix: maintain a clear margin of at least four modules on every side of the code, with nothing else — no text, borders, or background pattern — intruding into that space.
Problem: low contrast between foreground and background
What it looks like: the code scans fine on a phone screen (which is backlit and high-contrast by nature) but fails once printed on paper, especially under dim or uneven lighting.
Why it happens: printed materials rely on reflected ambient light rather than a backlit display, so color combinations that look sufficiently distinct on screen can read as nearly indistinguishable once printed and viewed under normal room or outdoor lighting.
The fix: use a dark, saturated foreground on a light, plain background, and print a physical test copy to check under real lighting conditions rather than trusting an on-screen preview alone.
Problem: a logo or overlay obscures too much of the code
What it looks like: the code fails only after a logo was added to the center, having worked fine before.
Why it happens: a logo physically covers part of the encoded data, which is only recoverable through the code’s error correction redundancy. If the logo is too large, or the error correction level was left at a low setting (L or M) that doesn’t have enough redundancy to cover for it, the missing data can’t be reconstructed.
The fix: use error correction level Q or H whenever a logo is added, and keep the logo to a modest portion of the code’s total area — see our custom QR code design guide for specific guidance on this trade-off.
Problem: the destination page is broken or unreachable
What it looks like: the phone successfully reads the code and opens a browser, but the page itself fails to load, shows an error, or times out.
Why it happens: this isn’t actually a scanning failure at all — the code worked correctly and decoded the URL as intended; the problem is on the destination side, whether that’s a broken link, an expired short-link service, or a page that’s down.
The fix: test the actual destination URL directly in a browser, independent of the QR code, to confirm it loads correctly. If you’re using a link shortener or dynamic QR service, confirm the underlying redirect is still active.
Problem: the scanning app doesn’t recognize the content type
What it looks like: the code scans and something happens, but not what was expected — for example, a Wi-Fi code just shows raw text instead of prompting a network connection.
Why it happens: some content types (Wi-Fi credentials, vCards, calendar events) rely on the scanning app recognizing a specific text format and offering the appropriate action. Very old phones or bare-bones scanning apps sometimes only support basic URL and plain-text recognition, not the richer formats.
The fix: test with the device’s built-in camera app rather than a third-party scanner where possible, since native camera scanning tends to have the broadest content-type support on modern phones; for older devices, be aware that some content types may show as plain text rather than triggering the expected action.
Problem: reflective or curved surfaces
What it looks like: a code that scans reliably on a flat printout fails when applied to a curved bottle, a glossy laminated surface, or through glass.
Why it happens: glare and surface curvature distort how the camera perceives the code’s edges and contrast, which can be enough to prevent a clean read even when the underlying code is otherwise correctly formed.
The fix: use a matte rather than glossy finish where possible, keep codes on flatter areas of curved packaging rather than the most curved point, and test on the actual final surface and material, not just a flat proof.
A general troubleshooting approach
When a code fails, isolate the variable: does it fail on every device, or just some? Does it fail at the printed size, but work fine on screen? Does the scan succeed but the destination fail? Answering these narrows down which of the causes above applies, rather than guessing and changing multiple things at once.
Our QR code generator shows a live preview and lets you adjust color, size, and error correction directly, which makes it easy to test several of these variables before you commit to a final print.
Free, unlimited, and it takes about ten seconds.