How to use the QR Code Generator
- Choose what the code holds. Pick Link, Bio link, Wi-Fi, Contact or Text, and fill in the fields. Bio link is a web address with campaign tracking already switched on, for a profile page or a printed card.
- Add tracking if it is a link. Turn on campaign tracking to add utm_source, utm_medium and utm_campaign, so visits from this code show up as their own source in your analytics.
- Set error correction, colours and size. Medium is a good default. Use Quartile or High if the code will be printed on a rough surface or carry a logo. Keep dark modules on a light background.
- Check the warnings and download. Read the contrast and size notes, scan the preview with your own phone, then download SVG for print or PNG for screens.
How the QR code generator works
What it builds
The encoder is written from scratch for this page and follows the QR Code Model 2 standard, ISO/IEC 18004: byte mode, versions 1 to 10 (21 by 21 up to 57 by 57 modules), automatic version selection, error correction levels L, M, Q and H, Reed-Solomon codes over GF(256), format and version information, and mask choice by the standard's four penalty rules. Text is stored as UTF-8.
Version 10 holds up to 271 bytes at level L, 213 at M, 151 at Q and 119 at H. If your text is longer, the tool says so and tells you the limit for that level. A short link makes a simpler code that scans faster.
The checks it runs
Contrast is the WCAG ratio between the dark and light colours. Below 4.5:1 you get a warning, and a lighter-on-darker code is flagged separately because many scanners are built to read dark modules on a light ground. The tool also shows the width of one printed module for the size you plan, so you can see when a code will be too fine to print well.
The generator is tested against the worked example in the specification (HELLO WORLD at version 1, level M), the published format information strings for every level and mask, and the published capacity table. Even so, always scan your finished code with a real phone before you print a run.
Limitations
Static codes only: no scan counts, no editing after printing and no redirect service. Numeric mode and Kanji mode are not used, and text outside plain ASCII is stored as UTF-8 without an extra character-set marker, which current phone cameras read correctly but very old readers may not. Logos in the middle are not added, because they reduce the error margin.
Frequently asked questions
Do QR codes expire?
A code made here is static: the address or text is written straight into the pattern, so the code itself never expires and nothing has to stay online for it to scan. What can stop working is the page it points to. If you delete the page or let the domain lapse, the code will scan and then land nowhere. Codes from services that route through their own short link can stop when the subscription ends. This tool does not do that.
What size should a QR code be?
It depends on how far away the scanner is. A commonly used rule of thumb is a scanning distance of about ten times the code width, so a code scanned at arm's length, about 50 cm, wants to be roughly 5 cm wide. Leave the blank border around the code too: the QR code specification asks for four modules of it. The tool shows the printed size of one module at the width you choose, and the safest test is to print a sample and scan it with a few phones.
What error correction level should I choose?
The four levels can recover about 7% (L), 15% (M), 25% (Q) and 30% (H) of the code if part of it is damaged or covered. Higher levels make the pattern denser. Use M for screens and clean prints, Q or H for stickers, packaging and anything that may get scuffed or carry a logo over the middle.
Can I put UTM tracking in a QR code?
Yes, for web links. Turn on campaign tracking and the tool adds utm_source, utm_medium and utm_campaign to the link before it encodes it, keeping any query string and fragment you already had. Each placement should get its own campaign value so you can compare them. The Campaign Link Builder offers more control over the same parameters. More tracking text means a denser code, so keep the values short.
Why does my QR code not scan?
The usual causes are low contrast, a light code on a dark background, no blank border, a code printed too small for the distance, or too much data packed in. Keep dark modules on a light background with at least 4.5:1 contrast, keep the border, shorten the link if you can, and test the final print. The warnings on this page cover the first three.
Is my data sent anywhere?
No. The code is built by JavaScript running in your browser. The link, Wi-Fi password or contact details you type are not uploaded. Because the code is static, anyone who scans it can read what is inside, so do not put a password in a code you will publish.