Free tools

QR Code Generator

Make a code for a link, a Wi-Fi network, an email, or a contact card. Drop your logo in the middle, style it in your own colours, and download it print-ready. No account, no watermark, no expiry date, and nothing you type ever leaves your browser.

Scanning it opens the page. A missing https:// is filled in for you.

Error correction Download size Quiet zone

Medium error correction at 1024 px handles almost any print job. The guide below explains when each of these is worth changing.

Pattern shape Corner style
Optional

Dropped into the middle of the code on a patch of your background colour, with error correction raised to cover what it hides. Your file is read by this page and never uploaded.

Preview

Add a link or any text above and your QR code appears here.

SVG is the one to hand a designer or a printer: it stays sharp at any size, from a business card to a billboard.

Printing this on something you cannot reprint? Point it at a short link first, so you can change the destination later without touching the code.

How to make a QR code that actually scans

What is actually inside a QR code

A QR code is your text written out in black and white squares, called modules. The three large squares in the corners tell a camera where the code is and which way up it sits; the rest is data plus a block of redundancy. Nothing about it is a link to a service somewhere, which is why a code works offline, forever, and cannot be switched off by whoever generated it.

The more you encode, the more modules are needed, and the denser the pattern gets. A short URL of twenty characters produces a code a phone reads instantly from across a room. The same URL with a tracking query string bolted on can double the module count and turn a poster code into something people have to walk up to.

The kinds of code, and what they actually contain

A phone reads squares and nothing else. Everything a scan then does, opening a page, joining a network, saving a contact, comes from the format of the text hidden in those squares, which is a convention camera apps have agreed to recognise:

  • Website is simply the URL, which is why it is the most reliable of the lot.
  • Text is shown as-is. Nothing opens, nothing is looked up.
  • Wi-Fi is a WIFI: string holding the network name, the password, and the security type. It contains the password in the clear, so a printed Wi-Fi code is exactly as private as the wall it hangs on.
  • Email, phone, and SMS are mailto:, tel:, and SMSTO:, the same links a web page would use.
  • Contact card is a vCard, the format address books have imported for decades. It is the largest of these by some margin, so a contact code needs more squares and a bigger print size than a link does.

Anything encoding more than a short URL benefits from being shortened first. A vCard or a long tagged link produces a dense code; the same information behind a short link produces a sparse one that scans from twice the distance.

Putting a logo in the middle

A logo works because of the redundancy described below, not in spite of it. The middle of a code carries no positioning information, so covering it costs you data the error correction can rebuild. Keep the logo to roughly a fifth of the code's width, leave a small margin of background colour around it rather than laying it straight onto the squares, and use level H. Never cover any of the three corner squares: those are how a camera locates and orients the code, and no amount of error correction replaces them.

Error correction, in plain English

QR codes carry a copy of their own data spread through the pattern, so a code can be partly obscured and still read. That is why a logo can sit in the middle of one. The four levels trade resilience against density:

  • L recovers from about 7% damage. Screens and clean, flat surfaces.
  • M recovers from about 15%. The sensible default for print.
  • Q recovers from about 25%. Packaging, curved surfaces, anything handled.
  • H recovers from about 30%. Codes with a logo in the middle, or that will get scuffed.

Higher is not automatically better. Level H on a small print area produces a dense code that needs to be printed larger to stay readable, so you can lose more than you gain.

Printing a code that scans first time

Size it from the scanning distance. The working rule is one to ten: a code read from 30cm wants to be around 3cm across, one read from two metres wants around 20cm. Under 2cm is unreliable no matter what.

Leave the quiet zone alone. The empty margin around the code is part of the code. Crowd it with a border or a caption and scanners lose the edges. Four modules of clear space is the standard, and this tool keeps it by default.

Keep it dark on light. Cameras look for a dark pattern on a light ground. Inverting that, or picking two brand colours of similar weight, is a common reason a beautifully designed code fails in the wild. If you colour a code, keep it dark and keep the background pale.

Mind the surface. Gloss throws reflections straight back into the lens, and anything printed across a fold or a curve distorts the grid. Both are worth a test print rather than an assumption.

Static codes and dynamic codes

A static code, the kind this tool makes, has the destination baked into the pattern. It is free, permanent, and unchangeable. A dynamic code encodes a short link instead, so the squares stay identical while the destination behind them can be changed whenever you like.

That difference only matters once the code leaves your control. Five thousand printed flyers, a sticker on packaging, an engraved plaque: with a static code, a typo in the URL or a page that moves means the whole run is waste. Encode a branded short link instead and the fix takes seconds. It also means you can count scans, which a static code can never do, since nothing about it reports back.

Tag the destination before you generate

If the code is going on something physical, tag its destination so the traffic shows up as its own source in your analytics rather than as unattributed direct visits. Set the medium to qr and name the placement in the source, like poster-lisbon or packaging-insert. Our UTM builder will assemble the tagged URL, and it is worth doing before you generate the code, not after: adding parameters later changes the pattern.

Test it before you commit

Scan the finished code with a phone that is not yours, ideally an older one, from the distance people will really stand at, in the light the code will really live in. A code that reads on your desk under a lamp at 5cm tells you very little about a code on a wall in daylight.

Frequently asked questions

The code itself never expires. The pattern is just the destination written in squares, so a printed code keeps working for as long as the page it points to exists. What expires is the destination: move that page and every code you printed is dead, with no way to fix it short of reprinting. Generators that charge a monthly fee to keep your code "alive" are charging for the redirect in the middle, not for the code.

Codes you can repoint after they are printed

GoGoLink is adding QR codes you can restyle, redirect, and count scans on, long after the poster has gone to print. Short links are live today. Free to start, no credit card required.