TL;DR: A QR code only works if a phone camera can lock onto it. Scannability comes down to four things: enough contrast, a big enough print size, a clear quiet zone around the edges, and the right error-correction level — especially once you add a logo. Get those right and test before you print, and the code will stay reliable.
QR codes fail silently. They look fine on screen, get printed on a flyer, and then nobody can scan them from across a room. Almost every failure traces back to one of a handful of avoidable causes.

Contrast and colour
A scanner reads QR codes as dark modules on a light background. High contrast — ideally dark-on-white — is what makes that possible. Inverting the colours (light modules on a dark background) or using a low-contrast pairing like grey-on-beige is the fastest way to make a code unreadable. If you brand a code with colour, keep the modules distinctly darker than the background.
Error correction and logos
QR codes have four error-correction levels — L, M, Q and H — that determine how much of the code can be damaged or covered while still scanning. Levels roughly restore up to 7%, 15%, 25% and 30% of the data respectively. Use Low or Medium for a plain code with short content. Switch to High (H) whenever you place a logo in the centre or print in demanding conditions: the extra redundancy is exactly what lets the code survive the covered area.
The quiet zone
A QR code needs an empty margin — the "quiet zone" — around all four sides so the scanner can find its boundaries. Cropping the code tight to other elements, or letting text bump against it, is a common reason a code that scanned in testing fails in the printed layout.
Size for the scan distance
Print size should match how far away people will scan from. A code on a business card can be small because it's held close; a code on a poster read from two metres needs to be much larger. When in doubt, print bigger — a code that is too small simply won't resolve.
PNG or SVG?
For print, export as SVG: it is a vector file that scales to any size without blurring, which matters on flyers, posters, and packaging. Use PNG for screens and the web. Exporting a small PNG and then enlarging it for print is a classic cause of fuzzy, hard-to-scan codes.
Static versus dynamic
A static QR code encodes its content directly, so it never expires and doesn't depend on any server — but the destination can't be changed later. Dynamic codes redirect through a short URL you can edit, at the cost of relying on that service staying online. For a fixed link that must keep working for years, static is the safer bet.
A workflow that scans first time
- Build the code in the QR Code Generator, choosing High error correction if you add a logo.
- Keep strong contrast and a clear quiet zone.
- Export as SVG for print, PNG for screens.
- Test with two or three real phones, at the actual scan distance, before the print run.
If the destination is a long link, shorten and tidy it with the URL Encoder / Decoder so the encoded code stays as simple as possible.
Common mistakes to avoid
- Low contrast or inverted colours.
- Adding a logo without raising error correction to High.
- Cropping away the quiet zone.
- Enlarging a small PNG instead of exporting SVG for print.