The short version
Use dark squares on a light background, leave a clear blank border around the code, print it large enough for the distance it will be scanned from, keep the web address short, and test the final printed result with more than one phone before you print a large batch.
How a QR code works
A QR code stores your text or address as a pattern of small squares called modules. Three of the four corners carry a large square marker known as a finder pattern. These let a scanner find the code, work out which way up it is and correct for an angled photo, which is why a code still scans when it is rotated or tilted. The fourth corner has no marker, and that asymmetry is what tells the scanner the orientation.
On top of your data, the code carries extra error-correction information, so that a smudged, torn or partly covered code can still be read.
Error correction levels
| Level | Can recover roughly | When to use it |
|---|---|---|
| L (low) | 7% of the code | Clean screens, where the code is shown large and undamaged |
| M (medium) | 15% | A sensible default for most uses |
| Q (quartile) | 25% | Printed material that may get scuffed |
| H (high) | 30% | Codes with a logo in the middle, or hard-wearing labels |
Higher levels make the code denser, with more, smaller squares, so it needs to be printed larger to scan as easily. When you add a logo in the middle of the code you cover some of the squares on purpose, so the generator raises the error correction automatically to compensate.
Size, margin and contrast
Size. As a rule of thumb, a code can be scanned from about ten times its width, so a code 3 cm across suits scanning from about 30 cm away. For a poster that people will read from a couple of metres, make the code much larger. As a minimum, avoid printing codes smaller than about 2 cm.
Margin. Leave a blank border, called the quiet zone, around the code that is at least as wide as four of its small squares. Text, borders or pictures pressed right up against the code can confuse a scanner.
Contrast. Dark on light is the safest choice. Pale colours on a pale background, or a busy photograph behind the code, are the most common reasons a scan fails. Some scanners cannot read inverted codes (light squares on a dark background), so test before you commit to a stylish look.
Keep the data short
The more text a code holds, the more squares it needs, and the harder it is to scan at a small size. A long web address with tracking parameters makes a dense, fiddly code. Where you can, point the code at a short, clean address, which gives you a simpler pattern that scans faster and prints better.
The codes made by this generator are static, which means the address is stored directly inside the pattern. They never expire and do not depend on any service staying online, but you cannot change where a printed code points, so check the address carefully before you print.
Wi-Fi, email and phone codes
The generator can make codes for more than links. A Wi-Fi code stores your network name, password and security type, so a guest can join by pointing their phone camera at it, with no typing. An email code opens a message to a given address with the subject already filled in, and a phone or SMS code starts a call or a text. A Wi-Fi code contains your password in plain form, so only display it somewhere you would be happy for guests to read the password anyway.
Test before you print
Scan your finished code with at least two different phones, one of them older. Test it at the real size and on the real material: glossy paper, curved bottles and shiny packaging can reflect light and defeat a scanner. If it scans slowly or only at one angle, make it bigger, increase the contrast, or shorten the data.
If you need a barcode for a product or a library label rather than a QR code, the Barcode Generator makes the common one-dimensional formats.
Try it yourself
Last updated 2 November 2026. These guides are general information written by the Cwtch.es team. Settings and platform limits change, so check the current details for any service you rely on.