# Static vs Dynamic QR Codes: What Is the Difference?

> A static QR code holds the content itself. A dynamic one holds a short link that redirects. Trade-offs, plus computed QR capacity and size tables.

- URL: https://generate.now/guides/static-vs-dynamic-qr-codes
- Published by: Hyperdusk Ltd (https://hyperdusk.com)
- Published: 2026-11-11
- Last updated: 2026-11-11

## The short answer

A static QR code holds the final content itself, such as a full URL, so it works for as long as that content does and cannot be edited after printing. A dynamic QR code holds a short link run by a QR service. The link redirects to a destination you can change later, and the service counts scans.

## Key differences

**Static and dynamic QR codes side by side**

|   | Static QR code | Dynamic QR code |
| --- | --- | --- |
| What the code contains | The content itself: a URL, text, WiFi details or a contact card | A short URL that redirects to the real destination |
| Change the destination after printing | No | Yes, by editing the redirect |
| Scan counts | None from the code; a URL's own site analytics still count visits | Yes, counted at the redirect |
| Depends on a third party | No | Yes: it stops working if the redirect is removed |
| Works without an internet connection | Yes for text, WiFi and contact cards | No: the phone must follow the redirect |
| Size of the code | Grows with the length of the content | Small, because the short link is short |

## What is a static QR code?

A code in which the data you entered is the data in the pattern. Scan it and the phone has everything: the URL, the text, the WiFi network name and password, or the contact card. Nothing is looked up from the company that made the code, so there is nothing to expire and nothing to switch off.

The cost is that the content is fixed. If a printed code points at a URL that later changes, the only fixes are to redirect that URL on your own site or to reprint.

## What is a dynamic QR code?

A code that contains a short URL belonging to a QR service. When someone scans it, the service's server records the scan and redirects the phone to the destination set in your account. Bitly, which sells them, describes dynamic codes as using "a modifiable short URL to redirect users to your latest landing page", with "editable URLs and automatic tracking".

The pattern itself is not special. A scanner reads a URL either way, and "dynamic" describes the server behind that URL. That has two consequences. The code only works while the redirect exists: Bitly's article notes that on some services' free trials a dynamic code "may expire if you don’t upgrade". And you can build the same thing yourself by encoding a URL on a domain you control and changing where it redirects.

## Which kind does generate.now make?

Static only. The generate.now QR code generator encodes exactly the text shown on the page, for a URL, plain text, WiFi details or a vCard. There is no redirect through generate.now and no scan is reported to us, so a code keeps working for as long as its content is valid. It cannot be edited after you print it.

## How much data fits in a static QR code?

It depends on the version, which is the size of the grid, and on the error-correction level. Versions run from 1 (21 × 21 modules) to 40 (177 × 177). Error correction lets a damaged code still scan: level L restores about 7% of the code, M about 15%, Q about 25% and H about 30%. A higher level leaves less room for data.

**Maximum bytes per QR code version and error-correction level**

| Version (modules per side) | L | M | Q | H |
| --- | --- | --- | --- | --- |
| 1 (21) | 17 | 14 | 11 | 7 |
| 2 (25) | 32 | 26 | 20 | 14 |
| 5 (37) | 106 | 84 | 60 | 44 |
| 10 (57) | 271 | 213 | 151 | 119 |
| 20 (97) | 858 | 666 | 482 | 382 |
| 40 (177) | 2,953 | 2,331 | 1,663 | 1,273 |

_Computed by calling the qrcode library, version 1.5.4, with lower-case text of increasing length in byte mode until it reported that the data no longer fit. The version 40 row matches the capacity table in the library's README. Digits and upper-case-only text pack more tightly: version 40 at level L holds 7,089 digits or 4,296 alphanumeric characters._

## Why does the length of a URL matter?

A longer URL needs a larger grid. Printed at the same physical size, a larger grid means smaller modules, which are harder for a camera to resolve. This is the practical argument for a short link, whether it comes from a dynamic-code service or from your own domain.

**Smallest QR code for a URL of a given length**

| URL length | L | M | Q | H |
| --- | --- | --- | --- | --- |
| 25 characters | 25 × 25 | 25 × 25 | 29 × 29 | 33 × 33 |
| 50 characters | 29 × 29 | 33 × 33 | 37 × 37 | 41 × 41 |
| 100 characters | 37 × 37 | 41 × 41 | 49 × 49 | 53 × 53 |
| 150 characters | 45 × 45 | 49 × 49 | 57 × 57 | 65 × 65 |
| 250 characters | 57 × 57 | 61 × 61 | 73 × 73 | 81 × 81 |

_Modules per side of the smallest version the qrcode library (1.5.4) chose for a lower-case https URL of that length, at each error-correction level. Sizes exclude the quiet zone._

## Which should you use?

Use a static code when the content will not change and you do not want the code to depend on anyone's service: WiFi details, a contact card, a link to a page you control. It costs nothing to keep alive.

Use a dynamic code when the destination may change after printing or you need scan counts, for example on packaging or a long-running campaign. If you do, check what happens to the code when the subscription ends, or run the redirect on your own domain so the printed code never depends on a vendor.

## Tools for this

- [Create a static QR code for a URL, WiFi network or contact](https://generate.now/qr-code): QR Code Generator. Draws a static code in the browser and downloads it as SVG or PNG, with a choice of the four error-correction levels.
- [Turn a title into a short URL slug](https://generate.now/slug): Slug Generator. Converts a title into a URL slug with a maximum length, which keeps an encoded URL short.

## Sources

Primary sources, read on 2026-11-11.

- [node-qrcode README](https://github.com/soldair/node-qrcode#qr-code-capacity): soldair/node-qrcode on GitHub. Error-correction levels, the version range, encoding modes and the maximum-capacity table for the library the tables were computed with.
- [Static vs. Dynamic QR Codes: What Enterprises Need to Know](https://bitly.com/blog/static-vs-dynamic-qr-codes/): Bitly. A dynamic-code vendor's own description of how the two kinds differ, including editing, tracking and free-trial expiry.

## Related guides

- [UUID v4 vs v7: Differences and Which to Use](https://generate.now/guides/uuid-v4-vs-v7): UUID v4 is 122 random bits. UUID v7 starts with a millisecond timestamp, so IDs sort by creation time. Bit layouts, collision odds and when to use each.
- [UUID vs ULID vs Nano ID: Size, Sorting and Collisions](https://generate.now/guides/uuid-vs-ulid-vs-nanoid): UUID, ULID and Nano ID compared: length, alphabet, random bits, whether they sort by time, and computed collision odds. With a guide to choosing one.
- [Password vs Passphrase: Which Is Stronger?](https://generate.now/guides/password-vs-passphrase): A random 12-character password and a six-word passphrase are about equally strong. Entropy tables for both, and what NIST SP 800-63B says about length.

[All guides](https://generate.now/guides)
