Skip to content

URL QR code generator

Encode a link directly into the code, with no redirect through anyone's servers. Scanning it produces exactly the address you typed.

No need to type https:// — we'll add it.

What “static” actually means here

When you scan one of these, your phone reads the link out of the black and white pattern and opens it. That is the whole mechanism. There is no lookup, no server in the middle, and no record of the scan anywhere — which is also why we cannot tell you how many times a code has been scanned. That information does not exist.

The alternative, which most generators quietly hand you, is a code pointing at something like qr-service.example/a7Bx9. That address belongs to them, and it redirects to your link. It buys you editability and scan counts, and it costs you a permanent dependency on that company continuing to exist, continuing to run the redirect, and continuing to do it for free. Our static versus dynamic comparison goes through when that trade is worth making — sometimes it genuinely is.

The expiry question, precisely

“My QR code expired” is almost never true of the code. Two different things get confused:

What people sayWhat actually happened
“The QR code stopped working”A dynamic code’s redirect was switched off, usually because a trial ended. The code still scans; the address it produces now returns an error.
“The QR code goes to a dead page”A static code, working exactly as designed, pointing at a page that has since been deleted or moved.

A static code cannot fail in the first way, because nothing is switched off. It can absolutely fail in the second, which is why what you point it at matters more than how you generate it.

Choosing a link worth printing

  • Point at a domain you control. A link to your own site can be redirected by you later. A link to a third-party page cannot.
  • Prefer short and stable. Fewer characters means fewer modules, which means a code that stays readable at smaller sizes and from further away. example.com/menu encodes into a much simpler code than a URL carrying three tracking parameters.
  • Use HTTPS. Browsers increasingly warn on plain HTTP, and a warning screen is a poor first impression from a scan.
  • Add tracking at the destination, not in the code. If you need to know how many people scanned, put the analytics on the landing page. A long campaign-parameter string bloats the code for no benefit the page couldn’t provide.

Before it goes to print

Scan the finished code with a phone that has never visited the link before, and watch what the browser actually opens. It is the only test that catches a typo in a domain you have visited a hundred times, and it takes a few seconds. Then check the printed size against the distance people will scan from.