Illustration of a QR code being scanned by a phone, with a check mark badge.

How to Make a QR Code for a Link That Lasts

A printed QR code cannot be edited. Once it is on a poster, a menu or a product label, the destination is fixed for as long as the paper exists. Most stories about codes that “stopped working” are not about the code at all: they are about a redirect service that changed its terms, a short domain that lapsed, or a URL that was never meant to be permanent.

The URL QR Generator turns a web address into a code anyone with a phone can scan, and it runs in your browser.

Quick answer

Encode a URL on a domain you control, at a path you intend to keep. Avoid link shorteners and free redirect services unless you accept that they may disappear. Test the printed code at its final size on both an iPhone and an Android phone before you commit to a print run.

Static and dynamic codes are not the same

A static code stores the URL directly in the pattern. There is no account, no redirect and no expiry: the phone reads the address and opens it. If the destination moves, the code is broken, but nothing else can break it.

A dynamic code stores a short redirect address, and a service maps that address to the real destination. This lets you change where the code points after printing, and it usually provides scan counts. The trade-off is dependence: if the service closes, starts charging or changes its rules, every code it issued stops working. If you need the flexibility, run the redirect on your own domain so you keep control of it.

Choose a URL that will survive

Keep the address short, lowercase and free of tracking parameters that change per campaign. A URL on your own domain, pointing to a page you will maintain, is the safest option. Deep links into a shop or a social platform are riskier, because those platforms reorganise their URLs.

A shorter URL also produces a less dense code, which scans more reliably at small sizes. If the address is long, consider a clean path on your own site rather than a chain of redirects.

Details that decide whether it scans

  • Contrast: dark modules on a light background. Inverted codes fail on many cameras.
  • Quiet zone: leave a clear margin around the code, at least the width of a few modules.
  • Size: the code needs to be big enough to scan from the distance people will stand. A code on a poster read from two metres needs to be much larger than one on a business card.
  • Surface: glossy paper, curved bottles and fabric distort the pattern. Test on the real material if you can.

Test it the way a stranger will

Scan the code with a phone that has never seen it, at the size and distance it will be used, in the lighting it will be used in. Then scan it with the QR Scanner to confirm the decoded address is exactly what you intended — one wrong character is enough to send people to the wrong page.

If you need a code for plain text rather than a link, the Text QR Generator does that job. For a link, stay with a URL code so the phone offers to open it.

Generate the code with the URL QR Generator, download the image, and print a proof at the final size before the full run. A minute of testing is cheaper than a reprint.

Back to URL QR Code

Common questions

What is the difference between a static and a dynamic QR code?

A static code stores the URL directly in the pattern, with no account, redirect or expiry. A dynamic code stores a short redirect address that a service maps to the destination, so you can change it later and get scan counts, but the code stops working if that service closes or changes its rules.

How do I choose a URL that will keep working in a printed QR code?

Use a short, lowercase address on a domain you control, pointing to a page you intend to maintain. Avoid tracking parameters that change per campaign. Deep links into shops or social platforms are riskier because those platforms reorganise their URLs. A shorter URL also makes a less dense code.

Does the QR generator upload my URL?

No. The code is generated in your browser, so the URL is not uploaded to a server. The result is a static code that stores the address directly in the pattern, with no account or redirect service involved. Print a proof at the final size and test it on both an iPhone and an Android phone.