Common QR Code Mistakes That Kill Scan Rates (and How to Fix Them)
A QR code that doesn't scan almost never means the QR format itself failed — it means one specific, usually avoidable mistake got made somewhere between generating the code and printing or displaying it. This is the full list of the ones that actually show up in practice, roughly in order of how often they're the real culprit.
Mistake 1: low-resolution images scaled up too far
A code exported or saved at small size, then stretched larger for a poster or banner, blurs the fine module edges a scanner needs to distinguish. This is the single most common cause of print-related scan failures. Fix: export as SVG whenever the code needs to appear at more than one size — it has no native resolution to blur past, so the same file scales cleanly from a business card to a building banner.
Mistake 2: cropping into the quiet zone
The blank white margin around a QR code isn't decorative spacing — it's a required part of the format that scanners use to first detect where the code begins. A tight crop, or placing the code flush against a busy background with no border, can prevent a scanner from recognizing there's a code there at all. Fix: always leave the generated margin intact; if you need the code to sit closer to other design elements, add visual space around it in the layout rather than cropping the code's own built-in border.
Mistake 3: insufficient contrast
A scanner reads a QR code by distinguishing dark modules from light background — a color combination that looks elegant on screen (a mid-tone color on a similar-toned background) can fail to provide enough contrast for reliable scanning, especially at a distance or under imperfect lighting. Fix: stick to genuinely high-contrast combinations — dark on light is safest — and test by viewing the code in grayscale; if the dots and background still look clearly distinct with color removed, contrast is almost certainly sufficient.
Mistake 4: a logo or image covering too much of the code
A logo in the center is a common, legitimate design choice, but covering too much area (beyond roughly 20% of the total code) — even with error correction bumped to its highest level — can exceed how much damage the code can actually recover from. Fix: use a tool that automatically raises error correction the moment a logo is added, keep the logo modest relative to the whole code, and always test-scan the specific result before printing at volume.
Mistake 5: wrong file format for the use case
Exporting a code as JPEG for something that needs a transparent background is a common mismatch — JPEG has no alpha channel, so any transparency toggle silently falls back to solid white in that format. Fix: match the format to the need — SVG for anything printed or resized, PNG for anything needing transparency, JPEG only for simple digital use with a solid background.
Mistake 6: testing only on-screen, never in the actual final medium
A code that scans perfectly from a laptop screen doesn't guarantee it scans the same way once printed, laminated, or displayed under different lighting — screen glare, print contrast shifts, and camera autofocus all behave differently across mediums. Fix: always test-scan the actual final version — a printed proof, not just the digital file — before committing to a full print run or permanent installation.
Mistake 7: no context telling people what scanning gets them
Not a scan-failure exactly, but a conversion failure with the same root cause as a broken code: a bare QR code with no explanatory text gets scanned far less than one with a clear, specific line next to it ("Scan for our menu," "Scan for 20% off"). Fix: always pair a code with a short, specific line of text about what's on the other side of the scan.
Mistake 8: reusing a static code where content needs to change per unit
Trying to make one static code serve as a per-item tracker, a per-attendee badge, or anything requiring a unique identifier per unit doesn't work — a static code's content is fixed once generated. Fix: for unique-per-unit needs, use a scriptable generator like the MCP/API to batch-generate individually distinct codes rather than trying to stretch one code to cover many items.
The short version
Nearly every QR code scan failure traces back to resolution, contrast, quiet-zone cropping, an oversized logo, a mismatched export format, or skipping a real-world print test — all avoidable with the generator's defaults and a quick test-scan before committing to a full print run.