QR codes spent fifteen years as a punchline and then, in the space of about eighteen months, became infrastructure. They are on restaurant tables, payment terminals, parcel labels, boarding passes, medicine packaging, museum walls and business cards. If you build anything that bridges physical and digital, you will end up generating one.
Most of them work. A surprising number do not — because of decisions made in the thirty seconds before someone hit "download".
What a QR code actually contains
A QR code is a two-dimensional barcode holding raw data, most often a URL but equally happily plain text, a phone number, an email address, Wi-Fi credentials, a calendar event or a vCard.
The three large squares in the corners are finder patterns; they tell the scanner where the code is and how it is rotated, which is why QR codes scan upside down and at an angle. The scattered small patterns handle alignment and timing. Everything else is data plus error correction.
A single code can store up to about 4,296 alphanumeric characters, but density rises fast with length and dense codes are harder to scan. Short data means bigger, more forgiving modules.
Error correction: the setting that decides reliability
QR codes use Reed-Solomon error correction, the same family of maths that lets a scratched CD play. Four levels exist:
| Level | Recovers | Use when | |---|---|---| | L (Low) | ~7% | Clean digital display, short URL | | M (Medium) | ~15% | Sensible default for most uses | | Q (Quartile) | ~25% | Printed materials, small logo overlay | | H (High) | ~30% | Harsh environments, larger logo overlay |
Higher correction means more redundancy, which means a denser code at the same physical size. The trade-off is real: level H with a long URL produces a code so dense that a mid-range phone camera struggles in poor light.
The practical rule: M for screens, Q or H for anything printed, or anything with a logo in the middle. That logo works precisely because error correction can reconstruct the covered modules — but keep it under about 20% of the code area, centred, with a small white border.
Static versus dynamic
A static code encodes the destination directly. It is permanent, free, works forever, and cannot be changed. If the URL dies, so does every printed copy.
A dynamic code encodes a short redirect URL that you control. You can change the destination later and track scans — but you depend on that redirect service continuing to exist and continuing to be free. Plenty of businesses discovered this when a provider moved tracking behind a subscription and every printed menu stopped working.
Use static for anything permanent that points at a stable URL you own. Use dynamic when the destination genuinely will change, and self-host the redirect if the campaign matters.
The QR Code Generator produces static codes locally in your browser — no account, no expiry, no third party in the path between your customer and your website.
Sizing for print
The most common failure is a code printed too small. The working rule of thumb is:
Minimum code width = scanning distance ÷ 10
Scanned from 30 cm (a table card): at least 3 cm. From 3 m (a poster): at least 30 cm. From 10 m (a billboard): at least 1 m.
Then respect the quiet zone — the blank margin around the code, at least four modules wide. Designers delete it constantly because it looks like wasted space, and the result is a code that will not scan against a busy background.
Other print rules:
- Dark code on light background. Inverted codes fail on many scanners.
- Maintain strong contrast; pale grey on white is a common and fatal choice.
- Never stretch or skew the code non-uniformly.
- Avoid glossy laminate under direct light, which produces glare hotspots.
- Print at 300 DPI minimum and export as vector or high-resolution PNG.
Always test before you print
Test with at least three phones — one recent iPhone, one recent Android, one cheap or older device. Test in dim light, at an angle, from your intended distance, and on the actual printed material rather than a screen. Ten thousand flyers with an unscannable code is an expensive lesson that a five-minute test prevents.
Also test the landing page on mobile. A QR code delivers a phone user to a page that had better load fast and be readable without pinching.
Add a call to action
A bare code tells nobody why to scan it. Scan rates improve dramatically with three words of context: "Scan for menu", "Scan to pay", "Scan for Wi-Fi". Add it directly under the code, outside the quiet zone.
Security: quishing is real
QR phishing — "quishing" — is now a mainstream attack. Because a code is unreadable to humans, an attacker can print a sticker with a malicious code and paste it over the legitimate one on a parking meter, restaurant table, EV charger or invoice. Victims scan, land on a convincing payment page, and hand over card details.
Sensible habits:
- Check the URL preview your camera shows before opening it. Every modern phone shows it.
- Look at the physical code — a sticker over a printed surface is the classic tell.
- Never enter payment or login details on a page reached only by scanning an unfamiliar code.
- If you publish codes, prefer your own domain so customers can recognise it in the preview.
Genuinely useful non-URL codes
- Wi-Fi: guests join without you reciting a password. Encode as
WIFI:S:NetworkName;T:WPA;P:password;; - vCard: a contact card on the back of a business card.
- Email or SMS: pre-filled recipient and subject for support or feedback.
- Calendar event: encode an event so attendees add it in one tap.
Quick checklist
- [ ] Shortest possible URL, on a domain you own
- [ ] Error correction M for screen, Q/H for print
- [ ] Quiet zone intact
- [ ] Size ≥ distance ÷ 10
- [ ] Dark on light, high contrast, no distortion
- [ ] Logo under 20% of area, if used
- [ ] Tested on three devices in real conditions
- [ ] Mobile-optimised, fast landing page
- [ ] A short call to action beside it
Make one now with the QR Code Generator — and if you need to shrink the finished artwork for the web, run it through the Image Compressor.