A QR code that will not scan usually fails one of eight physical checks: low contrast or inverted colors, too small for the scanning distance, a cropped quiet zone, a logo over 30 percent, blurry print, glare from gloss laminate, or the wrong camera app. Run the checks below in order. If the code scans but nothing loads, the link itself is dead.
The two-minute diagnostic
Work through these in order. The cheap checks come first. Most failures fall to one of the first four. Each check gets its own section below, with the fix.
| # | Check | Takes | Pass condition |
|---|---|---|---|
| 1 | Contrast | 5 sec | Dark code on a light background, never inverted |
| 2 | Size and distance | 10 sec | At least 2 x 2 cm, and one tenth of the scan distance |
| 3 | Quiet zone | 5 sec | Clear empty margin on all four sides |
| 4 | Logo size | 5 sec | Logo covers under 30 percent of the code |
| 5 | Print sharpness | 10 sec | Crisp square modules, no soft edges or smearing |
| 6 | Glare | 10 sec | No white band when you tilt the code under a light |
| 7 | The phone | 20 sec | Native camera app, 15-30 cm away, two phones tested |
| 8 | The link | 30 sec | The URL loads when typed by hand |
Is the contrast wrong or inverted?
Scanners read the difference between dark and light. A pale gray code on white fails. Dark blue on black fails. And inverted codes — light modules on a dark background — fail on a large share of phones. iPhones are especially strict about them.
The working rule is simple: keep the code clearly darker than what it sits on. Black on white always works. Dark navy on cream works. White on black is a gamble that loses on older phones. Quick test: squint at the code from arm's length. If the pattern turns to mush, the contrast is too low.
Is the code too small or missing its quiet zone?
Size depends on scanning distance. The rule of thumb is one tenth: a code scanned from 1 meter should be about 10 cm across. A poster across a lobby needs a much bigger code than a table tent. For close-range scans, never go below 2 x 2 cm.
The quiet zone is the empty margin around the code. The QR spec calls for four modules of clear space on every side. Designers crop it to tighten layouts, and scanners then cannot find the code's edges. If the code sits flush against text, a border, or a photo, give it room and reprint.
Is the logo too big?
A logo works by vandalizing part of the code. Error correction rebuilds the missing data — up to a point. At the highest level, a code survives roughly 30 percent damage. The logo spends that budget. So does every smudge, fold, and scratch the print collects later.
Keep the logo under 30 percent of the code's area, and under 20 percent for anything living outdoors. One more trap: a logo pasted on top in a design tool, after the code was generated, gets no error-correction compensation at all. Rebuild the code with the logo option in the generator instead.
Is the print blurry or the laminate glaring?
Look at the printed code up close. Modules should be crisp squares, not soft blobs. Blur almost always comes from upscaling a small PNG — a 200px image stretched across a poster cannot survive the trip. Print from SVG, which scales without loss, or use a PNG of 1000px or more. Qranite exports both, with PNG up to 4096px.
Gloss laminate has a different failure mode: glare. Ceiling lights reflect as a white stripe, and the camera reads the stripe as missing data. The tilt test takes ten seconds. Hold the code under a light and tilt it. If a white band sweeps across the pattern, switch to matte laminate or move the code out of direct light.
Is the phone the problem, not the code?
Sometimes the code is fine. The native camera app on iPhone (iOS 11 and later) and Android (10 and later) scans QR codes automatically. In-app cameras, social media scanners, and old barcode apps are far less reliable — some only accept their own platform's codes.
Test properly: open the plain camera app, hold the phone 15 to 30 cm from the code, and keep it still for two seconds. Then repeat on a second phone. If both phones fail, the code is broken. If only one fails, the phone is the problem. Clean the lens first; it fixes more scans than anyone admits.
Does it scan but the page never loads?
Then the code is healthy and the link is dead. Type the URL by hand and see what happens. There are three usual causes. The page moved or was deleted. The URL had a typo when the code was made. Or the code is a dynamic code from a paid generator, and someone stopped paying.
That last one quietly kills printed codes at scale. Per their support docs, qr-code-generator.com deactivates codes made during its 14-day trial and redirects scans to an upsell page. QR Tiger stops free dynamic codes after 500 scans each, per their own policy. The QR image itself never expires — the redirect behind it is what dies. The details are in do QR codes expire and why did my QR code stop working.
How do I stop this happening again?
Most scanning failures are decided before the file reaches the printer. A short pre-print routine prevents nearly all of them.
- Print dark on light. Black on white unless you have a strong reason.
- Export SVG for anything larger than a sticker.
- Leave the quiet zone alone. Never crop the margin.
- Keep logos under 30 percent, added in the generator, not pasted on after.
- Choose matte over gloss for anything under bright light.
- Test the final printed object on two phones — one iPhone, one Android — before ordering 500 of anything.
- For links you may need to change after printing, use dynamic codes from a provider that keeps redirects alive. Qranite's dynamic codes keep redirecting forever, even if you stop paying. The static vs dynamic guide covers which to pick.