Work down this list. Each check rules something out, and most problems are found by the third one.
Check 1: does the artwork decode?
Take the original file, or a straight-on photo of the printed code, and drop it into the decoder.
- It decodes and the text is right. The code is sound. Skip to check 4.
- It decodes but the text is wrong or truncated. The generator was given bad input. Fix the content and regenerate.
- It does not decode. Continue to check 2.
Check 2: is it big enough and sharp enough?
Modules under 0.5 mm smear on ordinary printers. A code scanned from further than ten times its width is too small for the camera. Upscaled PNGs are blurry at any size.
Do this
A 4 cm code with a short link, printed from a vector file.
Not this
A 2 cm code holding a long tracking URL, stretched from a 200 px screenshot.
Fix: shorten the content, print larger, export vector. Details in too small or blurry.
Check 3: contrast and polarity
Grey on white, orange on white, dark blue on black, or white modules on a dark background all cause failures. Put the colours into the contrast checker; you need 4.5 to 1 and dark modules on a light background.
Do this
Black or navy modules on white.
Not this
Brand orange modules, or white modules on the brand's dark background.
Check 4: the quiet zone
Four modules of clear space around the code. A border, text or a photo touching the code hides the finder patterns. The scannability tester measures the margin for you.
Check 5: the logo
A logo covering more than a quarter of the code, or touching a corner square, exceeds the error-correction budget. Shrink it, centre it, set level H. The logo safe-area tool shows the limit.
Check 6: damage and wear
Scratches, fading, a fold through the middle, a torn corner. A scratched data area at level H survives; a damaged finder pattern does not survive at any level. Reprint, and consider laminate.
Check 7: the link, not the code
If the code decodes but the phone shows an error page, the destination is the problem. A dynamic code whose subscription ended, a page that moved, a shortener that closed. See expired or dead QR code.
Check 8: the phone
iPhone: Camera must be in Photo mode, “Scan QR Codes” must be on in Settings, and the phone must not be too close to focus. Android: the camera app or Google Lens, or a scanner app. See iPhone camera not scanning.
Check 9: the screen
Scanning a code from another screen adds glare and moiré. Turn the brightness up, hold the phone further back, and tilt slightly. Scanning a code on the same phone needs a screenshot and a decoder, not the camera.
In practice
Photograph the failing code straight on, in good light, and run the photo through the decoder. If the photo decodes, the code is fine and the problem is the scanning conditions. If it does not, the code or the print is at fault. This one test halves the search.
Try it in QR Studio
QR Studio runs the size, contrast, quiet-zone and logo checks before export so most of this list never applies to codes it makes.
Checklist
- Artwork or photo run through the decoder
- Module size above 0.5 mm; scan distance under ten times the width
- Contrast 4.5 to 1 or better, dark on light
- Quiet zone of four modules intact
- Logo under 25% and centred, level H
- Print undamaged, finder patterns intact
- Link resolves; dynamic code subscription active
- Phone in the right mode with scanning enabled
Try it yourself
Upload the artwork or a photo. The tester reports decode, quiet zone, small-size, blur, contrast and inversion results in one go.