QR codes are everywhere — menus, posters, packaging, business cards. Making one is free and takes seconds, but a few details decide whether it scans reliably. Here’s a practical guide.
We measured the four correction levels. The same URL through our QR generator, PNG bytes:
L (low) 3403 bytes M (medium) 3353 bytes Q (quartile) 3382 bytes H (high) 4206 bytesThe intuitive rule “more correction, bigger file” does not hold: M came out smaller than L. Higher correction adds redundancy, but the encoder may also settle on a mask pattern that compresses better. Only H — which needs a denser grid — is clearly largest. So choose the level for how the code will be used: H survives a scuffed printout, L does not.
What a QR code actually stores
A QR code is a 2-D barcode that encodes text. Most often that text is a URL, but it can also be plain text, a phone number, Wi-Fi credentials or contact details. When someone points a camera at it, the phone reads the encoded text and acts on it. You can create one in seconds with a QR code generator.
Static vs. dynamic QR codes
- Static codes encode the content directly. They never expire, work forever, and involve no tracking or third party. The trade-off: if the destination changes, you must make a new code.
- Dynamic codes encode a short redirect URL owned by a service, which forwards to your real destination. You can edit the destination later and see scan analytics — but they depend on that service staying online, and often cost money.
For most needs — a link on a flyer, a menu, a Wi-Fi share — a static code is simpler, free and permanent. Our generator produces static codes that never expire.
What is error correction?
QR codes include redundancy so they still scan when partly dirty, wrinkled or covered (for example by a logo). The level sets how much damage they tolerate:
- L ≈ 7% recoverable — densest, for clean digital use.
- M ≈ 15% — a solid default.
- Q ≈ 25%.
- H ≈ 30% — most robust, needed if you place a logo over the code.
Higher levels pack more modules into the image, so the pattern looks busier. Use M unless the code will be printed small, handled roughly, or overlaid with a logo.
Error correction is normally described as a percentage of recoverable damage. What it costs is easier to see as bytes. We encoded the same URL at all four levels with our own QR generator and measured the PNG each time: L 3403, M 3353, Q 3382, H 4206 bytes. The interesting part is that M and Q came out smaller than L — the redundancy did not push the code into a larger version, and at the same module count a denser pattern can compress better. Only H, with roughly 30% recovery, needed a bigger grid and jumped to 4206.
Best practices so it always scans
- Contrast: dark code on a light background. Avoid low-contrast color combos.
- Quiet zone: keep empty margin around the code — don’t crowd it with text.
- Size: bigger is safer. A rough rule for print is a scan distance about 10× the code’s width, so size for how far people will stand.
- Test before you print: scan it with two or three different phones first. A code that fails on a printed 5,000-copy flyer is an expensive mistake.
The practical reading of those four numbers: choosing H is not a free safety margin. It cost 4206 bytes against 3353 at level M, and — more importantly than file size — a bigger grid means smaller modules at the same printed width, so the code needs either more paper or a closer scan. Level M is the usual default for a reason; reach for H only when the code will be printed on something that gets handled, folded or rained on.
Common uses
- Link to a website, app store, or event page from a poster.
- Restaurant digital menus.
- Share Wi-Fi without reading out a password.
- Put a portfolio or LinkedIn link on a business card.
Ready to make one? The free QR code generator creates a code instantly and lets you download a PNG — and it runs entirely in your browser, so nothing you enter is uploaded.