← Back to Generator

Font Subsetting Guide: Reduce Font File Size by 90%

A full-featured font like Noto Sans can contain over 50,000 glyphs and weigh several megabytes. If your website only uses English text, you're forcing visitors to download thousands of characters they'll never see. Font subsetting solves this by stripping unused glyphs, often reducing file sizes by 50–90%.

What Is Font Subsetting?

Font subsetting is the process of creating a new font file that contains only a specific set of characters (glyphs) from the original. For example, if you subset a font to just the Basic Latin range (U+0020–U+007F), the resulting file will only include the 95 printable ASCII characters — letters, numbers, and common punctuation.

The result? A dramatically smaller font file that loads faster and improves your site's Core Web Vitals scores, particularly Largest Contentful Paint (LCP) and First Contentful Paint (FCP).

Real-World Size Reduction

Scenario Characters Included File Size (WOFF2) Reduction
Full font (no subsetting) All glyphs (~3,000+) ~120 KB
Latin subset 95 characters ~15 KB 87%
Latin Extended subset ~350 characters ~25 KB 79%
Custom (English + symbols) ~120 characters ~12 KB 90%

How to Subset Fonts with Webfont Generator

The Webfont Generator makes subsetting simple with three approaches:

1. Language Presets

Choose from 23 built-in language presets (Latin, Cyrillic, Devanagari, Arabic, Bengali, Gujarati, and more). Each preset automatically selects the correct Unicode ranges for that language's character set.

2. Specific Characters

Type individual characters you want to include. This is perfect when you need just a few special characters beyond a language preset — for example, copyright symbols (©), trademark symbols (™), or specific currency signs (€ £ ¥).

3. Custom Unicode Ranges

Define precise Unicode ranges in hexadecimal format. This gives you the finest control over exactly which glyphs are included. Common ranges:

Range Name Characters
0020-007F Basic Latin A–Z, a–z, 0–9, common punctuation
00A0-00FF Latin-1 Supplement Accented characters (é, ü, ñ, etc.)
0100-017F Latin Extended-A Central/Eastern European characters
0400-04FF Cyrillic Russian, Ukrainian, Bulgarian, etc.
0900-097F Devanagari Hindi, Marathi, Sanskrit, etc.

CSS unicode-range: Advanced Subsetting

For multi-language sites, combine subsetting with the CSS unicode-range descriptor. This tells the browser to only download a font file when characters in that range actually appear on the page:

/* Latin subset */
@font-face {
  font-family: 'MyFont';
  src: url('MyFont-latin.woff2') format('woff2');
  unicode-range: U+0020-007F, U+00A0-00FF;
}

/* Cyrillic subset */
@font-face {
  font-family: 'MyFont';
  src: url('MyFont-cyrillic.woff2') format('woff2');
  unicode-range: U+0400-04FF;
}

With this approach, a visitor viewing an English-only page downloads only the Latin subset (~15 KB), while a visitor on a Russian page gets both the Latin and Cyrillic subsets. The browser handles this automatically.

Common Subsetting Mistakes

  • Forgetting ligatures: Some fonts use OpenType ligatures for common pairs like "fi" and "fl". If you subset too aggressively, you may lose these, causing rendering issues.
  • Dropping the space character: Always include U+0020 (space) in your subset. Omitting it causes text to render without word breaks.
  • Ignoring punctuation: Characters like em-dashes (—), smart quotes (" "), and ellipses (…) are easy to overlook but commonly needed.
  • Not testing: Always preview your subsetted font with real content before deploying. The Webfont Generator includes a live preview specifically for this purpose.

Impact on Core Web Vitals

Font file size directly affects two key Core Web Vital metrics:

  • LCP (Largest Contentful Paint): If your hero heading uses a custom font, the font file must download before LCP can complete. Smaller files = faster LCP.
  • CLS (Cumulative Layout Shift): Smaller font files load sooner, reducing the chance of visible font-swap layout shifts. Using font-display: swap or font-display: optional combined with subsetting gives you the best CLS scores.

Pro tip: Combine subsetting with WOFF2 compression for the ultimate performance gain. A 500 KB TTF font can be reduced to under 15 KB with both techniques applied.

Bottom Line

Font subsetting is one of the highest-impact, lowest-effort performance optimizations you can make. If you're serving custom fonts on your website, you should always subset. The Webfont Generator makes it simple — just select a language preset or enter your character ranges, and the tool handles the rest, all in your browser with zero server uploads.

Subset Your Fonts Now — Free & Private →