Why Most QR Debugging Advice Fails
Most "QR code not scanning" guides tell you to "make sure your camera is clean" or "try better lighting." These are not the root causes. A QR code that was generated correctly and printed correctly will scan in almost any lighting condition. The actual failure causes are structural - they are in the code itself, the file format, the print resolution, or the physical placement.
This guide diagnoses all 9 structural causes in order of frequency.
Cause 1: The File Was Printed as a Low-Resolution PNG (Most Common)
A QR code PNG exported at 200x200 pixels and then placed in a Word document and printed at 2 inches wide produces a module grid where each individual square is fewer than 5 pixels across. At print resolution, these tiny squares blur together and the camera cannot distinguish them.
The fix: Download the SVG format from your QR generator, not PNG. SVG is a vector format that scales to any print size without losing sharpness. Our Free QR Code Generator provides SVG export. If your tool or workflow requires PNG, export at a minimum of 1000x1000 pixels for a 2-inch print, never less.
Cause 2: Too Much Data Encoded (Dense Code Printed Too Small)
Every character added to a QR code increases its version number and module density. A Version 20 code (97x97 modules) encoding 500 characters of text printed at 1 inch puts each module at roughly 0.01 inches wide - below the reliable scanning threshold for most smartphone cameras.
The fix: Shorten your URL before encoding. Use a redirect page on your own domain (e.g. yoursite.com/go instead of yoursite.com/blog/article-title?utm_source=print&utm_medium=flyer). Then either print the code larger, or reduce the data payload. Use our print sizing guide to find the minimum safe size for your code's version.
Cause 3: Inverted Colours (White on Black Rather Than Black on White)
QR codes require dark modules on a light background. Some design tools invert the image - producing white modules on a black background - when adjusting for dark-mode aesthetics or design contrast. Most phone cameras fail to scan inverted QR codes because their scanning algorithm expects high reflectance (white) in the background and low reflectance (dark) in the modules.
The fix: Always use dark modules on a white or very light-coloured background. If you need the code on a dark background (e.g. on a black business card), invert the entire design in your QR generator so the quiet zone (border) and background are still lighter than the modules, or use a white-bordered transparent version of the code on the dark surface.
Cause 4: Insufficient Quiet Zone
The quiet zone is the blank white border surrounding the QR code pattern. The ISO standard requires a minimum quiet zone of 4 module widths on all four sides. If your code is cropped too tightly - common when placing a QR code into a bordered design element - the camera's finder algorithm cannot locate the code boundary and fails to decode.
The fix: When placing a QR code in a design tool, ensure there is at least 4 modules' worth of blank space (roughly 10% of the total code width) on every side between the code and any surrounding design element, border, text, or image.
Cause 5: Low Colour Contrast
Coloured QR codes are stylistically popular but they introduce contrast risk. A dark blue code on a black background, or a light grey code on a white background, may fall below the contrast ratio the camera's scanner requires to distinguish modules from background.
The fix: Maintain a minimum Light Reflectance Value (LRV) difference of 40% between the module colour and background colour. As a practical rule: if you cannot clearly see every individual module square when you squint at the code from arm's length, your contrast is too low. Learn more about safe colour choices in our QR code colour guide.
Cause 6: Logo Overlay Covering Too Much of the Code
Adding a logo to the centre of a QR code relies on error correction headroom to keep the code readable. The maximum safe logo size is 30% of the total code area at Level H (High) error correction. A logo exceeding this threshold - or a code generated at Level L (Low) error correction with any logo - will fail to scan.
The fix: If you added a logo and the code no longer scans, regenerate the code at Error Correction Level H before adding the logo, and ensure the logo covers no more than 25% to 30% of the code area.
Cause 7: Reflective or Glossy Print Surface
A QR code printed on high-gloss paper stock or laminated with a high-gloss lamination film creates specular reflection - a bright whitish glare spot - when the camera is held at certain angles. This glare patches over part of the code pattern and prevents decoding.
The fix: Print on matte paper stock or use matte lamination film. If the code is on a product label already using gloss stock, add a matte varnish spot-finish over the code area only while keeping the surrounding label in gloss.
Cause 8: The URL in the Code Is Dead or Error-Producing
The code itself scans correctly - the camera decodes the URL successfully - but the destination page returns a 404, 500, or SSL error. From the user's perspective, the app "didn't work" after scanning, which they report as a QR code failure.
The fix: Test the decoded URL by manually typing it into a browser, not just by scanning. Check that the destination page loads correctly including SSL certificate validity (the URL must be HTTPS with a valid certificate, or some phones will block the connection). Confirm the URL is exactly correct - a single character typo in the encoded URL is invisible in the visual code pattern.
Cause 9: Phone Camera App Does Not Support QR Scanning
Native QR scanning via the standard camera app requires iOS 11+ (iPhone 6 or later) or Android 8+ (with Google Lens enabled). Some older or budget Android phones do not support this. Some camera apps from third-party Android manufacturers (notably on certain Huawei and older Samsung models) require QR scanning to be enabled in the camera settings rather than being on by default.
The fix: If the code scans correctly on your phone but not the user's, this is likely a camera app configuration issue on their device rather than a code problem. Advise them to: Settings → Camera → turn on "Scan QR Codes" (Samsung) or open Google Lens directly (Android). Alternatively, recommend they download any free dedicated QR scanner from their app store.
Once you have identified and fixed the cause, regenerate your code fresh using our Free QR Code Generator and test the new version on at least three different phones before printing a production run.