Guide · no product attached

Own your redirect

Editable QR codes without a middleman — run the redirect yourself, on your own domain, in about ten minutes. Free, no subscription, and nobody can take it away from you. Including us.

What a “dynamic” QR code really is

A static code (the kind our generatormakes) encodes your link directly into the pattern. The destination lives in the ink. It can't expire, because there's nothing to expire.

A dynamiccode encodes a short URL on someone else's server, which then forwards each scan to your real destination. That indirection is what makes the destination editable — and it's also a dependency: your printed poster now works only as long as that company exists, keeps its servers up, and keeps letting you. Most “free” QR tools monetise exactly this — the code works until the trial ends, then your ink goes dark unless you subscribe. The scans are usually tracked along the way: IP, location, device.

Sometimes you genuinely need editability — a menu that changes seasonally, a poster that outlives a campaign URL. The honest version isn't renting a middleman. It's owning the redirect.

The recipe

You need two things: a domain you own and a free Cloudflare Workers account (the free tier handles 100,000 requests a day — decades of scans). The entire redirect is ~25 lines:

// Your printed QR codes, your redirect, your domain.
// Edit ROUTES, run `npx wrangler deploy`, done.

const ROUTES = {
  "menu": "https://example.com/spring-menu.pdf",
  "card": "https://example.com/contact",
};

export default {
  async fetch(request) {
    const { pathname } = new URL(request.url);
    const code = pathname.split("/").filter(Boolean).pop();
    const dest = ROUTES[code];
    if (dest) {
      // 302, never 301 — browsers cache 301s forever
      // and your future edits would stop working.
      return new Response(null, {
        status: 302,
        headers: { location: dest, "cache-control": "no-store" },
      });
    }
    return new Response("This code isn't pointing anywhere yet.", {
      status: 404,
      headers: { "content-type": "text/plain; charset=utf-8" },
    });
  },
};
  1. Clone the template: github.com/KalliKalla/qr-redirect-worker
  2. Edit ROUTES — one line per code.
  3. Run npx wrangler deploy.
  4. In the Cloudflare dashboard, attach your domain (e.g. go.yourdomain.com) to the worker.
  5. Generate your QR with the free generator, pointing at https://go.yourdomain.com/menu. Print it once. Edit the destination in the file whenever you like.

The details that matter

302, never 301.The template answers with a temporary redirect. A 301 gets cached permanently by browsers and proxies — your future edits would silently stop working for anyone who'd scanned before.

It logs nothing. No IP, no analytics, no cookies — unless youchoose to add them. The template's README shows how to add a privacy-respecting scan counter if you want one. Your scanners, your call.

It's yours forever. If Cloudflare ever displeases you, the same 25 lines run anywhere that speaks HTTP — the codes on your posters point at yourdomain, so you can move the redirect without reprinting anything. That's the entire point.

Why are we giving this away?

Because the alternative is you renting your own ink back from a middleman — and we built QR Bunker specifically because that market felt wrong. We sell nothing on this page. If you just want a code that can never be taken from you, that's the generator on the homepage — free, made in your browser, nothing stored.