QR code error correction and scan failures: why your QR will not scan
Last reviewed 2026-05-05. You generated a QR with our QR Code Generator, printed it on a flyer or stuck it on a slide, and the camera will not pick it up. The cause is almost always one of four things — payload size, error-correction level, contrast, or print scale — and the fix is mechanical, not magical. This guide names what each looks like and how to make the QR scan on the first try.
Cause 1: payload too long for the encoder
A QR code stores its payload across a fixed number of "modules" — the small black-and-white squares. The longer the payload, the more modules you need, the denser the pattern gets, and at some point the camera cannot resolve the modules cleanly from a phone's typical scan distance (15-30 cm).
Three rough payload bands worth knowing:
- Short URL or text under ~25 characters (e.g.
https://yoursite.com, "WIFI:..." short SSID). The pattern stays sparse and scans cleanly at any reasonable size. - Medium URL or text 25-100 characters (e.g. tracked URLs, short vCards). The pattern starts to densify; mostly fine but watch out for low contrast or small print.
- Long URL or full vCard 100-300+ characters (full contact card with phone, email, organization, address; URLs with multiple tracking params). The pattern is now very dense — small print sizes will fail to scan.
Fix: shorten the payload before generating. For URLs, drop tracking parameters or use a short-link service. For vCards, keep only essential fields (name, single phone, single email). For Wi-Fi, do not embed a long passphrase if you can avoid it. Re-generate from the QR Code Generator after trimming and the pattern should noticeably loosen up.
Cause 2: error-correction level mismatch
QR codes have four error-correction levels — L (~7% recoverable), M (~15%), Q (~25%), H (~30%). Higher levels mean the code can be partially obscured (a logo overlay, a fingerprint smudge, a torn corner) and still decode, but at the cost of more modules per character of payload.
The trade-off in plain language:
- L (Low) — default for most generators including ours. Fastest scanning, smallest pattern at a given payload size. Use when the QR will be displayed on a clean digital screen or pristine print.
- M (Medium). A small reliability buffer at minor pattern cost. Use for printed flyers that may bend or smudge.
- Q (Quartile). Roughly 25% of the code can be obscured and the scan still works. Use when you plan to overlay a small logo in the centre.
- H (High). Roughly 30% obscurable. Use for outdoor signage that may fade, peel, or be partially covered.
The QR Code Generator on this site emits at level L, which is the right default for digital and pristine-print use. If you specifically need overlay tolerance, generate the QR, wrap it in your design tool, and test scan from the actual final medium (printed at the actual size, mounted at the actual distance) before going to print.
Cause 3: low contrast between modules and background
The phone camera reads modules as binary: dark or light. If the modules are dark grey on a light grey background — or worse, on a coloured background that overlaps with the module value — the camera cannot threshold cleanly and the scan fails. This is the single most common cause of "the QR is right there, why won't my phone read it?"
Contrast rules of thumb:
- Dark on light, not light on dark. While inverted QRs (white modules on a dark background) are technically valid, many older cameras and some apps refuse to decode them. Stick to dark-on-light unless you control the scanning device.
- Solid background, not photographic. Placing a QR over a photograph almost never works — the noise in the photo bleeds into the module pattern.
- True black, not dark colour. Dark blue, dark red, or dark brown modules will scan, but they reduce the contrast margin. If you are printing at small size, prefer pure black.
- White or near-white background. Cream, off-white, very pale yellow are usually fine. Saturated pastels are risky.
Our QR Code Generator outputs a true-black-on-true-white PNG. If you re-style it in a design tool, keep the contrast ratio high and re-test with two different phones before printing.
Cause 4: print scale below the camera resolution floor
A QR code needs roughly 10 modules per centimetre of scan distance at the camera. A short-payload QR has ~21 modules per side; a long-payload QR has ~57+. Print at 2 cm × 2 cm and a 25-character URL is fine; print the same payload at 1 cm × 1 cm and the modules collapse into illegibility on a phone camera.
Practical print-scale floors:
- Business card / sticker / flyer (scan distance ~15 cm): minimum 2 cm × 2 cm for short payloads, 3 cm × 3 cm for medium, 4-5 cm × 4-5 cm for full vCards.
- Poster / signage (scan distance 30-60 cm): minimum 5 cm × 5 cm; for outdoor signage scanned from across a room, 10-15 cm × 10-15 cm.
- Slide deck (scan distance varies; assume back-of-room ~5 m): at least 10 cm × 10 cm rendered, and pre-test from the actual back row before the talk.
The PNG from the QR Code Generator is a raster image; if you upscale it without anti-aliasing artefacts, it stays scannable. If you need very large print and the PNG looks blocky at scale, regenerate at a larger output size or convert to SVG via the SVG to PNG converter in reverse (most QR tools also export SVG; ours emits PNG which scales cleanly with nearest-neighbour resampling).
Cropping and the finder pattern: a fifth common failure
Every QR has three large square "finder" patterns in three corners (top-left, top-right, bottom-left). The camera locates the QR by spotting these. If any one of them is cropped, occluded, or scratched off, the scan fails entirely — not "with errors", but completely, because the camera cannot find the code in the first place.
When laying out a QR on a card or flyer, leave at least a 4-module-wide white border (the "quiet zone") around the entire code. Do not let layout grids or background shapes touch the finder squares. If your QR is failing on a printed page that scans fine on the screen, this is the first thing to check — pick up the printed copy and inspect the three corner squares against the screen version.
Quick diagnostic flowchart
- Does the QR scan from the screen? If no, the encoder is not the problem — payload or contrast is.
- If yes from the screen but no from print: measure the printed code. Is each side < 2 cm? Print larger.
- Still failing from print at > 2 cm: check the corner finder patterns visually. All three squares present and uncropped?
- Still failing: check contrast. Dark on light? True black on white background? No coloured tint over the QR?
- Still failing on long payloads: regenerate with a shorter URL or trimmed vCard. The long-payload pattern is too dense for many phone cameras.
What does NOT cause scan failures (common myths)
- "You need a paid QR generator." No. The QR specification is open; a free in-browser generator like ours produces a code that scans identically to a paid one. You pay for analytics or branding, not scannability.
- "Curved or rotated QRs do not scan." Modern phone cameras handle moderate rotation and slight surface curvature fine. Severe wrap (around a bottle) does break scans, but a flat label on a slightly curved surface is usually OK.
- "Old phones cannot scan QRs." Native QR scanning shipped in iOS 11 (2017) and Android stock cameras around the same time. Anything from the last 7 years has it built in.
- "You need to install a QR app." Not on iPhone or modern Android. If a flyer instructs the reader to install a "QR scanner app", the QR is being used in 2008 marketing and should be replaced.
Related tools and guides on this site
- QR Code Generator — the in-browser generator that produced the PNG you are debugging.
- Compress Image — if the printed PNG file is huge and you need to email a smaller flyer, compress the QR PNG first.
- SVG to PNG — for designers regenerating a vector QR at a specific raster size.
- Photo Editor — to add a quiet-zone white border or place the QR on a clean background tile before print.
Why trust these tools
- Ten-plus years of web tooling. The freetoolonline editorial team has shipped browser-based utilities since 2015. The goal has never changed: get you to a working output fast, without an install.
- Truly in-browser - no upload. Every file-processing tool on this site runs in your browser through modern Web APIs (File, FileReader, Canvas, Web Audio, WebGL, Web Workers). Your photo, PDF, audio, or text never leaves your device.
- No tracking during tool use. Analytics ends at the page view. The actual input you paste, drop, or capture is never sent to any server and never written to any log.
- Open-source core components. The processing engines underneath (libheif, libde265, pdf-lib, terser, clean-css, ffmpeg.wasm, and others) are public and audit-able. We link to each one in its tool page's footer.
- Free, with or without ads. All tools are fully functional without sign-up. The Disable Ads button in the header is always available if you need a distraction-free run.