QR codes & labels
QR code not scanning? Fix contrast, size, spacing, and damage
A practical checklist for repairing a QR code that a phone camera cannot read.
Quick answer
Most failures come from weak contrast, a cropped quiet zone, an image that is too small or blurred, or a logo covering too much data. Test the exact exported or printed version, not only the preview.
Step by step
Restore a clear blank border; use a dark code on a light plain background; export at a larger size; remove styling and the logo; then verify locally. Add one change at a time and re-test on more than one camera.
Common mistakes
Do not stretch the image unevenly, crop to the outer modules, place it on a patterned background, or assume high error correction can repair any design. Screenshots and messaging apps may also rescale it.
Completion check
Confirm the full destination text, test the final physical size at the expected distance, and keep the verified file as the production master.
Make the right call
Separate a reading failure from a broken link
A customer points a phone at your counter sign and nothing happens. Before replacing the code, establish which step fails: recognizing the pattern, reading its text, or opening the destination. Only the first two are QR-image problems.
| Check | Example or action | How to judge the result |
|---|---|---|
| No code is recognized | Try the original PNG in Decode, then a plain no-logo version. | If the plain version reads, remove the styling change that broke it. Preserve a blank border at least four small squares wide on every side. |
| The file reads; the print does not | Compare the final print with the master: crop, blur, reflections, scale and creases. | Reprint one sample at the intended size. A successful screen test does not certify the printer, label surface or viewing distance. |
| The URL is read, but the page fails | Compare the full decoded URL with the intended destination. | A typo, expired domain or sign-in requirement cannot be repaired by increasing image resolution. Fix the destination, then regenerate if the stored text changes. |