Spec & internals
Why longer URLs make denser QR codes
QR versions step in fixed sizes, each adding four modules per side, and capacity boundaries at level M fall at 14, 26, 42, 62, 84 and 106 bytes. A 30-character URL fits version 3 (29 × 29 modules); a 90-character URL needs version 6 (41 × 41), exactly twice the modules.
Capacity is a staircase, not a slope
A QR code cannot grow by one module. The standard defines 40 discrete versions, and each version is exactly four modules wider and taller than the last: version 1 is 21 × 21, version 2 is 25 × 25, up to version 40 at 177 × 177. When your payload exceeds a version's capacity, the encoder jumps to the next step. There is nothing in between.
At error correction M, the byte-mode boundaries for the first few versions are:
| Fits up to | Version | Grid | Total modules |
|---|---|---|---|
| 14 bytes | 1 | 21 × 21 | 441 |
| 26 bytes | 2 | 25 × 25 | 625 |
| 42 bytes | 3 | 29 × 29 | 841 |
| 62 bytes | 4 | 33 × 33 | 1,089 |
| 84 bytes | 5 | 37 × 37 | 1,369 |
| 106 bytes | 6 | 41 × 41 | 1,681 |
(Verified against a real encoder; the full grid is in the capacity table.)
A worked example
Take the same URL at 30 and at 90 characters, both at level M:
- 30 characters → version 3, 29 × 29 = 841 modules
- 90 characters → version 6, 41 × 41 = 1,681 modules
Tripling the character count here exactly doubles the module count. Printed at the same physical size, every module in the 90-character code is 29/41 ≈ 71% the width of its counterpart, which means the camera must resolve detail 1.4× finer to read it. That is the whole story of "my QR code looks so busy": density is a direct, stepped function of payload length.
Why one character can matter
Because capacity is a staircase, a single character can push you over a boundary. A 42-byte URL sits at version 3; a 43-byte URL is version 4. Near a boundary, trimming one query parameter or shortening one path segment buys a visibly simpler code. Far from a boundary, trimming does nothing until you reach the next step down.
/validate reports the selected version and how many bytes of headroom remain before the next jump, useful when deciding whether shortening is worth the effort.
What this means in practice
- Trim before you style. Removing
https://www.(keephttps://. It is required for the link to work, butwww.often is not) and tracker parameters routinely drops a version or two. - Short domains pay off. Every character of the domain is paid on every code you print. A dedicated short URL can cut a 90-character link to under 30, at the cost of depending on the shortener staying alive.
- Uppercase can help, narrowly. A payload made only of digits, capitals and
$%*+-./:uses alphanumeric mode at 5.5 bits per character instead of 8. Most real URLs contain lowercase and do not qualify. - Denser codes need more space. If you cannot shorten, compensate physically, the density and scan distance page has the arithmetic, and the size calculator does it for you.
Note that raising error correction has the same stepping effect in the other direction: the same 90-character URL that is version 6 at M becomes version 9 at H. Density is a budget shared between payload and redundancy.
FAQ
Why does my QR code look so dense?
Your payload is long enough to force a high version. Every capacity boundary crossed adds four modules per side, so a 90-character URL produces a 41 × 41 grid where a 30-character one needs only 29 × 29. Shorten the URL or print larger.
Does removing https:// make a smaller QR code?
Do not remove it: many scanners will not treat the result as a link. Remove www., tracking parameters and unnecessary path segments instead; near a version boundary even a few characters can step the code down a size.
How long can a URL be in a QR code?
Technically up to 2,953 bytes. Practically, under about 50 characters keeps the code at version 4 or below at level M, which scans well at small print sizes. Beyond roughly 100 characters, density starts costing you scans.
Do capital letters make QR codes smaller?
Only if the entire payload fits the 45-character alphanumeric set: digits, capitals, space and $%*+-./:. Such payloads encode at 5.5 bits per character instead of 8. A normal mixed-case URL does not qualify and encodes in byte mode.
Try it: free, no signup
Related
- QR code anatomy: every region of the symbol, A labelled tour of a QR code: finder patterns, separators, timing, alignment, format and version information, the data region and the quiet zone.
- How much data fits in a QR code, Theoretical ceilings are 7,089 digits, 4,296 alphanumeric characters or 2,953 bytes, but the practical answer is to keep URLs under about 50 characters.
- QR code versions 1 to 40: sizes, capacity and how to choose, Versions run from 21×21 to 177×177 modules, growing 4 per step. The right version is the smallest that fits your payload at your error-correction level.
- QR code data capacity table, The maximum a QR code can hold is 7,089 digits, 4,296 uppercase alphanumeric characters, 2,953 bytes or 1,817 kanji: all at version 40, error-correction…