# QR code too dense to scan

> A dense code means too many modules for the printed size. The fix is almost always to shorten the payload rather than to enlarge the code or raise error correction — raising error correction makes density worse, not better.

Source: https://useqr.app/docs/troubleshooting/qr-code-too-dense-to-scan · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

## What density actually is

Density is module count per printed millimetre. It is driven by the
[version](/glossary/version), which is driven by payload length and error-correction level.

| Payload | Version at EC M | Modules | Module size at 3 cm |
|---|---|---|---|
| 25 chars | 2 | 25 | 1.2 mm |
| 100 chars | 5 | 37 | 0.81 mm |
| 200 chars | 8 | 49 | 0.61 mm |
| 400 chars | 12 | 65 | 0.46 mm |
| 800 chars | 19 | 93 | 0.32 mm |

Below about 0.4 mm per module, consumer printing and phone cameras start to struggle.

## Fixes, in order of effectiveness

**1. Shorten the payload.** The highest-leverage change by far.

- Remove UTM parameters from the code and apply them on your own redirect instead — this
  alone often removes 60–100 characters.
- Use a short path on your own domain: `example.com/s26` not
  `example.com/campaigns/2026/spring/landing`.
- For a vCard, switch to [MeCard](/mecard-qr-code) (~40% smaller) or link to a hosted
  contact page instead.

**2. Use uppercase where you can.** Uppercase letters, digits and a few symbols encode in
alphanumeric mode at 5.5 bits per character instead of 8. `HTTPS://EXAMPLE.COM/SALE` is
about 45% more efficient. Schemes and hostnames are case-insensitive; paths usually are not.

**3. Lower the error-correction level.** If the code is on a clean surface with no logo,
level **L** or **M** is fine and drops the version. Going the other way — raising to H
"to be safe" — makes the code denser and often harder to scan.

**4. Only then, enlarge the code.**

## The trap

The intuitive response to a code that will not scan is to raise error correction. For a
dense code that is exactly backwards: level H needs more codewords, which means a higher
version, which means smaller modules at the same printed size. Fix density first.

## FAQ

### How do I make a QR code less dense?
Shorten what it encodes. Removing tracking parameters, using a short path on your own domain, and switching to uppercase where possible all reduce the version and enlarge every module.

### Does higher error correction make a dense code scan better?
No, usually worse. Higher levels need more codewords, pushing the version up and shrinking every module at the same printed size. Reduce the payload instead.

### Why does uppercase make a QR code smaller?
Uppercase letters, digits and a few symbols are encoded in alphanumeric mode at 5.5 bits per character; anything else uses byte mode at 8 bits. The saving is around 30–45%.

### What is the maximum module size I should aim for?
Aim for a minimum, not a maximum: at least 0.4 mm per module for consumer printing, and 0.5 mm or more for uncoated stock, thermal printing or anything scanned in poor light.

## Try it

- https://useqr.app/size-calculator
- https://useqr.app/validate
- https://useqr.app/url
