Dynamic and static QR codes.

One encodes your destination. The other encodes an address that resolves to it. The difference decides whether the print run is a final answer or a first draft.

GuideDynamic vs staticDensity · modules per sideError correction · H with logo

The difference in one line

A static code encodes your destination. A dynamic code encodes a short address that resolves to your destination, which means the destination can be changed afterwards and the printed artwork cannot tell the difference.

Everything else follows from that. Static codes have no dependency and no editing. Dynamic codes are editable and measurable, and they depend on something continuing to answer at the printed address. Neither is the better product; they answer different questions about how long the paper has to stay right.

Compared

The row that matters most is the last one, and it is the row this category usually leaves out.

StaticDynamic
What the pattern encodesYour destination URLA short redirect address
Editable after printingNoYes
Module densityGrows with the URLFixed and short
Scan analyticsNone availableEvery scan, at the hop
Works with no service runningYes, foreverNo
Fails if the issuer disappearsNeverYes — the address stops answering

Why dynamic codes usually print better

This is the practical advantage nobody mentions, and for print work it is often the deciding one.

A QR code’s grid grows with the length of what it encodes. A real destination — a deep path, a few campaign parameters, a session token someone pasted in — can run to two hundred characters, and the code needed to carry it is dense: many small modules. A short redirect address is perhaps twenty-five characters, and prints as a much coarser grid.

At the same physical size, fewer modules means bigger modules. Bigger modules survive small print, coarse paper stock, ink spread, matte laminate, curved packaging, a scuff, and a phone camera held at an angle in bad light by someone who will not try twice. If your code is going onto a business card or a bottle neck rather than a poster, the short-address version is the one that scans.

The same arithmetic is why an embedded logo is risky. A logo covers modules, so error correction has to climb to compensate — Inkhop raises it to level H automatically the moment a logo lands, caps how much of the code the logo may cover, and warns you before you export something that will not read. An unscannable branded code is the most expensive mistake in this category, because it is discovered by a customer, after the print run.

When static is the right answer

Choose static when the destination will never change and the code has to work with no dependency on anyone:

  • Wi-Fi credentials, vCards, plain text, calendar events. These encode the payload itself, not a link. There is nothing to redirect to and no reason to add a hop.
  • Anything archival. A plaque, a memorial, a monument, a museum label, a document meant to be readable in decades. A dependency on a company existing is the wrong bet at that timescale.
  • Codes that must work offline or on a closed network — pointing at an internal host, a device, or a local address that a public redirect could never reach.
  • A destination you fully control and never intend to move, where you would rather own the whole chain than add a third party to it.

We sell dynamic codes and we still think this list is real. A static code is the more durable object; it just cannot be corrected.

When dynamic is the right answer

Choose dynamic when the paper will outlive the decision behind it — which, for most commercial print, it does:

  • Campaigns with an end date. The poster stays up after the promotion closes. A dynamic code retires gracefully instead of sending people to a dead page.
  • Anything seasonal or versioned — menus, price lists, catalogues, schedules, instruction sheets.
  • Print runs large enough that a reprint hurts. Packaging, direct mail, signage, anything with a supplier and a lead time.
  • Work you have to report on. A static code produces no evidence at all. If someone is going to ask whether the print worked, the hop is the only place that question can be answered.
  • Work you do for someone else. A client changes their mind after approval; that is not a failure, it is the job. Dynamic codes make it survivable.

What to check before you pick a provider

If you go dynamic, you are trusting an address for the life of the material. Four questions separate the providers, and none of them are usually on the pricing page:

  • Are addresses ever reused? If a deleted code’s address can be reissued to another customer, printed material still in circulation can start routing to a stranger. Inkhop’s slugs are unique forever and never reissued, even after deletion.
  • Is the hop cached? A permanent redirect (301, 308) tells browsers and CDNs to stop asking, so your edit never reaches people who scanned earlier. It must be a 302 with Cache-Control: no-store.
  • What happens when a code is paused or deleted? Scans arriving at a retired code are the only proof the material is still out there. Dropping them silently throws away the one signal that tells you to reprint or reactivate.
  • Does the free tier issue real codes? Some generators hand out a static code, or a dynamic one that expires into a dead link. Every free Inkhop code is a real dynamic link with a permanent address, and stays one whether or not you subscribe.

If you have already printed something and need to move it, that is its own problem: changing a QR code after it’s printed.

Print a first draft, not a final answer.

Make a code free — no account, no card, no cap. It is dynamic from the moment it is issued, so the destination stays yours to move long after the artwork is out of your hands.

GuideDynamic vs staticDensity · modules per sideError correction · H with logo