Skip to content

QR code generator

The address is stored inside the pattern, so the code does not expire and nobody can switch it off. Tag the link if you want to know which flyer worked, and print it at the width the tool works out.

What the code should do

Tag the link, so you know it worked

Optional. These are added to the end of the address, and your website analytics then shows the visits from this code separately from everything else. Lower case, with hyphens instead of spaces.

utm_source. The thing somebody scanned: van-door, table-tent, flyer.

utm_medium. Nearly always qr, or print.

utm_campaign. The run of work this belongs to.

Two more, only if you already use them

utm_term. Only useful if you are also running paid search.

utm_content. Tells two codes in the same campaign apart.

Protection against damage

The usual choice, and the one to keep unless you know the code will take a beating. Survives a fingerprint or a scuff. At this level about 15% of the code can be dirty, torn or covered and it still reads.

Where it will be scanned from

A flyer on a board, a sticker in the shop window, a poster in a corridor.

The code is built by this page, on your own device. The address never leaves your browser, nothing is stored, and there is no redirect of ours in the middle of it. Privacy policy

Your code will show up here

Type the web address the code should open.

Try one of the examples

How to use it

  1. Say what the code should do

    Open a web page, show a few words, start a call or start an email. Type the address the way you would say it. The https:// is added for you, and a ?ref= or a #section already on the end is kept where it belongs.

  2. Tag the link, if you want to know it worked

    Say where the code is going — van-door, table-tent, front-window — and your website analytics will show those visits apart from everything else. It is optional. The code works the same either way.

  3. Pick where it will be scanned from, then download

    The tool works out how wide to print it, pale border included. Take the SVG to a printer or a sign shop: it has no size of its own and stays sharp however big they set it. The PNG is for anywhere that will not take one.

What a code can hold

Four kinds of thing, and the tool has a box for each. A code does not hold “a phone number”; it holds the exact text below, and a phone knows what to do with it because of the few characters in front.

  • A link

    You typeoakandember.com/menu

    The code holdshttps://oakandember.com/menu

    Opens the page in whatever browser the phone uses. The https:// is added for you.

  • Text

    You typeWi-Fi password: sourdough2019

    The code holdsWi-Fi password: sourdough2019

    Shows the words on the screen. Nothing opens, and nothing is looked up.

  • Phone

    You type+1 (415) 555-0142

    The code holdstel:+14155550142

    Offers to call the number. The brackets and dashes come off; the + and the digits stay.

  • Email

    You typehello@oakandember.com

    The code holdsmailto:hello@oakandember.com

    Starts a new message to that address, with nothing written in it.

Nothing here opens the address to check that it works. What you get is a correctly built code, not a tested one. Scan it with your own phone before it goes to a printer.

Inside a code, and how big to print it

  1. The pale borderPart of the code, not a margin around it. A scanner needs clear space to see where the pattern ends, so a code butted against a dark panel or the edge of a sticker fails at any size.
  2. The three big squaresHow a camera finds the code in a photograph and works out which way up it is. Three corners, never four — the missing one is what tells it the rotation.
  3. The dotted linesOne dark, one light, all the way between two big squares. This is the ruler: it tells a scanner how wide one square is on the picture in front of it.
  4. The small squarePuts the grid back straight when the code is photographed at an angle, or is stuck on something curved like a van door.

A real code, holding https://getsoyla.com. It is 25 squares across at version 2, each big square is 7 squares wide, and the pale border is 4 squares on every side. Everything not numbered is the address itself and the spare copy of it that error correction adds.

One square is the measurement that matters when you print it. The bigger a square is on paper, the further away a phone can read the code — which is why the tool gives you the square size beside the width.

What protection costs in size

ProtectionSurvives aboutSquares acrossOne square at 100 mm wide
Low (L)about 7%333 mm
Standard (M)about 15%372.7 mm
High (Q)about 25%412.4 mm
Highest (H)about 30%492 mm

That is one ordinary tagged link at all four levels. The same address goes from 33 squares across to 49, so at the same printed width every square in the protected one is smaller and it reads from less far away. More protection means printing the code bigger. Standard is right for nearly everything; go higher for a code that will be handled, rained on, scrubbed or stuck to something that flexes.

For size the tool works from where you say the code is going. A code reads from about 10 times its own width, so one on a van door read from about 3 metres (10 feet) wants to be around 300 mm across. That is far bigger than most people expect, and it is why a lot of van codes never scan.

The ten-to-one figure is common practice, not a specification. Denso Wave, who invented the QR code, publish no ratio of size to reading distance; their guidance on module size is to print as large as the space allows, and ISO/IEC 18004 says module dimensions are user-specific by design. So every figure here says “about”. The one with a published source behind it is the floor: the tool will not suggest squares smaller than 0.4 mm (0.02 in), the minimum the GS1 General Specifications (Release 26.0, section 5.12.3.1) give for a QR code read at a checkout. GS1 say in writing that there is no equivalent figure for a phone reading a sticker on a wall, so treat it as a floor worth warning at rather than a cliff — and print one and try it with the oldest phone in the building.

Tagging a link

A printed code cannot report back. What you can do is add a few words to the end of the address, so that when somebody scans the code and lands on your website, your analytics can tell that visit apart from the ones Instagram sent. Those words are UTM parameters, and three of them matter.

  • Where the code is

    utm_sourcevan-door

    The thing somebody scanned: van-door, table-tent, flyer.

  • How they found it

    utm_mediumqr

    Nearly always qr, or print.

  • What it was for

    utm_campaignspring-service-check

    The run of work this belongs to.

northbeamplumbing.com/book becomes https://northbeamplumbing.com/book?utm_source=van-door&utm_medium=qr&utm_campaign=vans

Three things the tool does that are easy to get wrong by hand. It keeps whatever the address already carried and leaves a #section at the end, rather than burying the tags behind it. It refuses to add a tag the link already has, because two values under one name is a coin toss over which gets counted. And it encodes what you type, so a campaign called “spring sale” arrives intact instead of breaking the link at the space.

It also warns you about capitals, which is the one that quietly halves people’s numbers. Google’s own documentation is plain about it: “Parameter values are case sensitive, e.g. utm_source=google is different from utm_source=Google.” A van tagged Facebook and a flyer tagged facebook are two sources, each showing part of the real figure. The tool says so and leaves what you typed alone; making them lower case is a button you press.

That sentence is from Google Analytics Help, URL builders: Collect campaign data with custom URLs, read on September 5, 2026. Google states the case sensitivity and names utm_source, utm_medium and utm_campaign as the ones to always use together; keeping everything in lower case is our advice, not a rule Google publishes. One limit worth knowing: analytics counts visits, not scans, so somebody who scans your code and loses signal before the page loads never appears in it. Printing your Google review link instead? The Google review link and QR code builds that one address for you. To share a name, phone number and email as a saved contact, use the contact QR / vCard maker.

Common questions

Does the code expire, and can I change where it points later?

It does not expire, and it cannot be changed. Both halves come from the same fact: the address is stored inside the pattern itself. Nothing of ours sits in the middle, so there is no account to lapse, nothing to switch off, and the code keeps working for as long as the address does — but the pattern is the address, so a printed code points where it pointed on the day you printed it. If the destination might move, point the code at a page on your own website and change what that page does. The page is the part you can edit, and editing it costs nothing.

How big do I need to print it?

Pick where it is going and the tool works it out. The rough guide behind it is that a code reads from about 10 times its own width, so a code scanned from about 3 metres (10 feet) wants to be around 300 mm (11.8 in) across, which is far bigger than most people expect. That is a rule of thumb rather than a standard — the company that invented the QR code publishes no such ratio — so print a test at that size and try it with the oldest phone in the building.

Why will my code not scan?

Four things cause nearly all of it. It is too small for the distance people stand at. The pale border has been cropped off or something has been laid over it, which stops a scanner recognising the pattern at all. It is printed too pale, or reversed to light-on-dark, which some scanners will not read. Or a logo has been dropped in the middle and has covered squares the scanner needed. Print it dark on a plain light ground, leave the border clear, and test the real printed thing rather than the file.

What does error correction do?

Every QR code carries a spare copy of its own contents spread through the pattern, so a scanner can rebuild the part it cannot see — a scuff, a fingerprint, a torn corner. Higher protection means more of that spare copy, and those extra squares have to go somewhere, so the grid gets denser. Print two codes the same width and the protected one has smaller squares, which is what decides how far away a phone can read it. So more protection means printing the code bigger, not smaller. Standard is the right answer for nearly everything.

Should I give a printer the SVG or the PNG?

The SVG, whenever they will take one. It has no size of its own, so it stays sharp at any width they set it to, and a sign shop can drop it straight into artwork. The PNG is a picture at a fixed number of pixels and is for anywhere that will not accept a vector — a document, a slide, a website. Give whoever prints it the border figure rather than the code figure: the pale border is part of the code and has to stay clear.

Can I put my logo in the middle?

No, and this tool does not offer it. A logo sits on top of squares the scanner needs, and the usual fix is to raise the error correction, which adds squares and makes the code denser — so it then has to be printed larger to read from the same distance, not smaller. A logo beside the code, or under it, costs nothing and breaks nothing.

Can I see how many people scanned it?

Not the code itself. A printed code is ink and nothing reports back from it. What you can do is tag the link, which is what the second half of this tool is for: add utm_source=van-door and your website analytics will show the visits that arrived from the van separately from everything else. It counts visits rather than scans, so somebody who scans the code and loses signal before the page loads never appears in it.

Is it free, and does the address I type get uploaded?

Free, with no account, no limit on how many you make and no watermark — and nothing you type leaves your browser. The code is built on your own device, so there is no server of ours to store the address and no redirect of ours in the middle of it. The other side of that: nothing here opens your address to check that it works, so what you get is a correctly built code rather than a tested one. Scan it with your own phone before it goes to a printer.

Read more in our privacy policy and terms of use.

The code is the easy part

Soyla writes and designs a month of posts for your business, so there is something worth scanning the code for. You just approve them.

See how Soyla works