On this page
Static codes and why they never expire
There are two kinds of QR code, and the difference matters enormously once something is printed.
A static code contains the destination itself. Scan it and your phone reads the URL, the Wi-Fi credentials or the contact card directly out of the black and white pattern. Nothing else is involved. This is what the generator above produces.
A dynamic code contains a short link belonging to whoever generated it, which then redirects to your real destination. That allows editing and scan analytics — and it means your printed material depends permanently on someone else's service staying online and staying free. When those services sunset a free tier, the codes printed on menus, packaging and signage stop working.
Static codes cannot be edited after printing. If you need that flexibility, get it
without the dependency: point the static code at a URL on your own domain, such as
yoursite.com/menu, and change where that page redirects whenever you
like. You keep the ability to edit and you own the whole chain.
What you can put in a QR code
A QR code holds text. Everything else is a convention about how that text is formatted so phones know what to do with it.
-
Link — the most common by far. Include the
https://prefix; the generator adds it if you leave it out. - Plain text — a note, a serial number, an asset tag. The phone displays it rather than acting on it.
- Wi-Fi — network name, security type and password. Android and iOS both offer to join the network on scan, which is why these appear on café walls and in guest rooms.
- Contact card — a vCard the phone offers to save. Useful on business cards, conference badges and email signatures.
- Email and SMS — opens a prefilled message the person only has to send. Good for feedback prompts and support requests.
Keep the content short. Every character makes the pattern denser, and a dense code needs to be printed larger and held closer to scan reliably. A long URL with tracking parameters can double the size of the pattern compared with a clean one, so trim what you can before generating.
Error correction, explained properly
QR codes carry redundant data so they still work when part of the pattern is damaged, dirty or covered. Four levels are available:
| Level | Recoverable | When to use it |
|---|---|---|
| L | ~7% | Clean digital display, long content, smallest pattern |
| M | ~15% | The default — print and screen alike |
| Q | ~25% | Outdoor signage, packaging, anything that gets handled |
| H | ~30% | Harsh conditions, or a logo placed over the centre |
Higher is not automatically better. Redundancy costs space, so raising the level makes the pattern denser for the same content, and a denser pattern needs to be printed larger. M is right for most jobs. Move to Q or H when the code will live on something that gets scuffed, rained on or handled — or when you intend to cover the middle with a logo.
If you do place a logo over a code, keep it under about 20% of the width and centred, use level H, and test with several phones before printing a thousand of them.
Printing a code that actually scans
Four rules cover almost every scanning failure.
Leave the quiet zone. The blank margin around a code is not decoration — scanners use it to find where the pattern begins. Four modules is the specification and the default here. Cropping it tight is the single most common reason a code fails.
Print it big enough. The working rule is that the code should be at least one tenth of the scanning distance. Read from 30 cm on a flyer, print it at 3 cm. Read from 3 metres on a poster, print it at 30 cm. Never go below 2 cm on paper regardless.
Use vector for print. Download the SVG. It scales to any size with perfectly crisp edges. A PNG scaled up in a layout program produces soft edges that confuse scanners at the exact moment you most want the code to work.
Test on real phones before you commit. Print one proof at final size on the final material and scan it with an old Android and a current iPhone, in the lighting where it will actually live. Glossy laminate under a spotlight defeats codes that scan perfectly on a screen.
Colouring a code without breaking it
Brand colours are fine within limits, and the generator warns you when you cross them.
Contrast is what matters. Aim for at least a 4:1 ratio between the pattern and its background. Dark navy on cream works beautifully; mid-grey on light grey does not.
Keep the pattern darker than the background. Inverted codes — light pattern on dark — are technically readable but many scanner apps will not attempt them. It is not worth the lost scans.
Avoid gradients and photographic backgrounds behind the code. A scanner decides light-or-dark for each module, and a gradient makes that decision unreliable across the pattern.
Leave the three corner squares alone. Those finder patterns are how a scanner locates and orients the code. Restyling them into circles or brand shapes is a fashionable choice that measurably reduces scan rates on older devices.