QR code design best practices
You can style a QR code — within limits set by physics. Scanners need contrast, a clear margin, and resolvable modules. Push too far and the code stops working. Here's how to make a code that's on-brand and bulletproof.
Contrast comes first
Scanners distinguish modules by light versus dark. The single most important rule: keep strong contrast between the dots and the background. Dark dots on a light background is the gold standard. Anything that narrows that gap — pale dots, a busy background, a gradient through the data — risks failure.
Light dots on a dark background (inverted codes) violate what many scanners expect and fail on a significant share of devices. It can look striking, but reliability drops. If you must, test exhaustively across phones.
Color choices
You can color a code, but follow the rules:
- Keep dots darker than the background, with a clear luminance difference — not just a hue difference. Two colors of similar brightness confuse scanners even if they look distinct to the eye.
- Avoid low-contrast pairings like yellow on white or navy on black.
- Use solid color, not gradients, across the data modules.
- Mind print color shifts — a color that's crisp on screen can muddy in CMYK printing.
Respect the quiet zone
Leave a clear margin of about 4 modules around the whole code. Don't let text, borders, or imagery intrude. A missing quiet zone is a leading cause of "but it looked fine" scan failures. See sizes and print resolution for sizing alongside the margin.
Adding a logo
A centered logo is the most popular customization, and it works because of error correction:
- Raise the error-correction level to H (~30% recovery) so the code tolerates the covered modules.
- Keep the logo small — cover no more than roughly 20–30% of the area, centered, away from the corner finder patterns.
- Never cover a finder pattern; the scanner can't locate the code without them.
- Test after adding it — error correction has limits.
Custom module shapes and frames
Rounded dots, custom corner "eyes," and framing ("Scan me") can look polished, but each departure from crisp squares costs a little readability. Use restraint, maintain contrast and module clarity, and a call-to-action frame genuinely helps people know to scan. The codes from this generator use sharp square modules for maximum reliability.
Frames and calls to action
People won't scan a code they don't notice or understand. A simple frame with a short instruction measurably improves scan rates:
- Add a clear prompt. "Scan for the menu" or "Scan to pay" tells people both what to do and what they'll get.
- Give it room. Surround the code with whitespace so it reads as an interactive element, not background decoration.
- Keep the frame outside the quiet zone. Decoration must never intrude on the 4-module margin around the pattern.
- Match the context. A code on a moving bus or a TV ad needs to be larger and on screen longer than one on a handheld flyer.
On contrast specifically, aim for a clear luminance gap — think dark navy or black on white, not mid-grey on light-grey. If you're unsure whether a color pair has enough difference, convert it to greyscale in your head: if the dots and background look similar in grey, a scanner will struggle too.
Always test before you commit
The non-negotiable step: scan your finished code with multiple phones (at least one iPhone and one Android), at the real size and distance, and on the actual printed material — not just the screen. A code that scans on your design monitor can fail on matte stock under shop lighting. Catching that before a print run saves the whole batch.
Design a code that still scans
Adjust colors, margin, and error correction in the generator and preview the result instantly before you export.
Open the generatorFrequently asked questions
Can I change the color of a QR code?
Yes, as long as the dots stay clearly darker than the background with strong luminance contrast. Avoid low-contrast pairings, gradients across the data, and inverting to light-on-dark.
How do I add a logo without breaking the code?
Raise error correction to level H, keep the logo small and centered (covering at most ~20–30%), never cover the corner finder patterns, and test the result on real devices.
Why does my styled QR code fail to scan?
Common causes are weak contrast, an inverted color scheme, a cropped quiet zone, an oversized logo, or modules printed too small. Restore contrast and margin, then retest.
Are rounded dots a problem?
They can slightly reduce readability. Used in moderation with good contrast and clear modules they're usually fine, but always test before printing at scale.