The scanner's point of view
A phone decodes a QR code by deciding, module by module, whether each square is dark or light. Everything in this guide follows from that. You can change the colours, round the dots, reshape the corners and add a logo — as long as the camera can still separate dark from light, find the three corner squares, and see where the code ends.
Colour
Dark on light, always. Scanners are built for dark modules on a light background. Light-on-dark ("inverted") codes are supported by some scanners and rejected by others, especially older phones and dedicated hardware. There is no upside that justifies the risk.
Contrast is what matters, not hue. A navy, forest green or deep burgundy code on white scans as well as black. A mid-grey on light grey does not. As a working threshold, aim for a contrast ratio of at least 4.5 : 1 between foreground and background (the same measure used for text accessibility); below 3 : 1, failures become common. The generator calculates this and warns you.
Good pairings: black, navy, dark green, dark brown, deep purple or dark red on white, cream or pale pastels.
Pairings that fail: yellow, light orange, pastel or neon codes on white; any code on a mid-tone background; red on black.
Gradients: a gradient across the code is fine if its lightest point is still dark enough. The usual mistake is a gradient that fades to a light colour at one corner — often directly over a finder pattern.
Background images: put a solid light panel behind the code, including its quiet zone. Patterns and photographs under the modules confuse the dark/light decision.
Dot and corner styles
Rounded dots, classy shapes and rounded corner "eyes" are compatible with modern scanners, which sample the centre of each module. Two cautions:
- Very small dots — circles with large gaps between them — reduce the dark area of each module. At small print sizes, or under bright light, they can drop out. Rounded squares are safer than circles for small codes.
- Corner eyes must remain clear squares-within-squares. Styling them is fine; turning them into shapes that lose the outer ring and inner block is not. They are how the scanner finds the code.
Logos
A logo in the centre works because of error correction: the code carries enough redundancy to rebuild the modules the logo covers.
- Use error correction H (the generator switches to it automatically when you add a logo).
- Keep the logo to around 20% of the code's area — under half its width — and centred.
- Keep it away from the three corner squares.
- Use a logo with a solid or transparent background and a little clear space around it, so its edge does not merge with the modules.
- Test the downloaded file, not the preview.
The logo uses up error correction before the code meets any real-world damage, so a code with a logo is less tolerant of scuffs and glare. Print it a little larger than you would without one. Our error correction guide explains the budget.
The quiet zone
The blank margin around a QR code — four modules wide — is part of the symbol. It is how the scanner knows where the code ends and the background begins. Layout pressure constantly pushes designers to trim it, and it is one of the most common reasons a printed code fails.
Our downloads include the full quiet zone. Place the file as-is, and keep other artwork, text and edges outside it.
Size and data
A clean design still fails if the code is too dense for its size. Short content gives large modules. Before styling a code, shorten what it holds: a short URL rather than a long one with tracking parameters, a link to an online contact page rather than a full vCard on a small card. Then size it for the scanning distance using the QR code size guide.
Print production
- Use SVG (vector) for print so the code stays sharp at any size. If a printer requires a raster image, export PNG at 2048 px or more.
- Do not stretch. Scale proportionally; QR modules must stay square.
- Convert colours carefully. RGB colours shift when converted to CMYK; check that a dark brand colour has not become a mid-tone on the proof.
- Mind ink spread. On uncoated and absorbent paper, ink bleeds and dark modules grow into light ones. Thin gaps between rounded dots are the first casualty. Proof on the real stock.
- Matte, not gloss. Glossy lamination and varnish create glare under spotlights and in sunlight.
- Curved and flexible surfaces — bottles, cups, bags — distort the grid. Keep the code small relative to the curve, or put it on a flat panel.
- Embroidery, engraving and etching lose detail. Use the simplest square style, high error correction and a larger size.
Add a call to action
A QR code on its own invites hesitation: people do not know what they will get or whether it is safe. A short line next to it does more for scan rates than any styling:
- Say what happens: "Scan to see the menu", "Scan to join our WiFi", "Scan for setup instructions".
- Show your domain: "menu.yourcafe.example". It reassures people that the code is genuine — see QR code scams.
- Make the destination mobile-friendly. Every scan happens on a phone.
Pre-print checklist
- Dark code on a light background, contrast 4.5 : 1 or better.
- Corner squares clearly visible and unstyled beyond recognition.
- Logo at or under ~20% of the area, error correction H.
- Quiet zone intact on all four sides.
- Size checked against the scanning distance and the code's version.
- Downloaded file scanned on at least one iPhone and one Android phone.
- Physical proof at final size, on the final material, scanned in the real lighting.
- Destination tested on mobile data.
Frequently asked questions
Can a QR code be any colour?
Yes, as long as the code is clearly darker than its background. Dark colours on white or pale backgrounds work well. Light codes on dark backgrounds, pale codes on white, and low-contrast combinations often fail.
Does adding a logo make a QR code harder to scan?
Slightly. The logo hides modules that error correction must rebuild, leaving less margin for damage. Use error correction level H, keep the logo to about a fifth of the area, and print the code a little larger.
Why does my coloured QR code not scan?
Usually insufficient contrast between code and background, an inverted colour scheme, or a gradient that becomes too light over part of the code. Try the same design in a darker colour on white to confirm.
Can I put a QR code on a dark background?
Put a light panel behind it. Place the code, dark-on-light, inside a white or pale box that includes the quiet zone, and the box can sit on any background.
Do rounded dots affect scanning?
Modern phones read rounded and dotted styles reliably at normal sizes. At very small sizes or on absorbent paper, square or rounded-square modules are safer than small circles.
Further reading
- Do QR codes expire? — A QR code itself never expires — but a dynamic code can die when a subscription ends. How to tell which kind you have, and how to get an editable code without the risk.
- GS1 Digital Link: QR codes on products, explained — How GS1 Digital Link puts a product's GTIN, batch and expiry into a QR code that both checkouts and phones can read, what Sunrise 2027 means for brands, and how to build one correctly.
- How QR codes work, from pattern to payload — A clear technical walkthrough of a QR code: the finder and timing patterns, how text becomes bits in each encoding mode, Reed–Solomon error correction, masking, and how a phone reads it.
- How to scan a QR code on any device — Scan QR codes with the built-in camera on iPhone and Android, from a screenshot or photo, on a Windows or Mac computer — and what to do when a code will not scan.