Blog
Wild & Free Tools

How Font Subsetting Improves Core Web Vitals — Especially LCP

Last updated: February 2026 5 min read
Quick Answer

Table of Contents

  1. How fonts affect LCP
  2. How subsetting reduces LCP
  3. Pairing subsetting with font-display: swap
  4. Preloading the font
  5. Measuring before and after
  6. Frequently Asked Questions

Core Web Vitals measure the real-world experience of loading a page: how fast meaningful content appears, how much the layout shifts, and how responsive the page is to input. Of the three primary metrics, Largest Contentful Paint (LCP) is the one most directly affected by font loading. A large font file that loads late delays when the browser can first paint readable text — which is often the largest element on the page. Subsetting that font so it is 80 percent smaller is one of the highest-leverage LCP improvements available, and it takes under two minutes to implement.

Why Fonts Are a Common LCP Bottleneck

LCP measures how long it takes for the largest visible element in the viewport to render. On most content sites, that element is either a hero image or a large heading. If the heading uses a custom web font, the browser must download that font file before it can paint the text — and until the text renders, the LCP element has not loaded.

Fonts are also render-blocking by default: the browser discovers the @font-face rule when it parses CSS, adds the font to the download queue, and then waits (or shows invisible text) until the font arrives. On a 4G mobile connection averaging 10 Mbps, a 200 KB font file adds roughly 160 ms of download time. A 20 KB subset of the same font adds 16 ms. The difference in LCP is measurable.

How Subsetting Directly Reduces LCP

Subsetting works by removing glyphs from the font file that your page never uses. A full Latin font covering 800 glyphs, subsetted to the 95 glyphs of Basic Latin, can drop from 200 KB to 20–40 KB — an 80–90 percent reduction in bytes the browser must download before text can render.

This reduction appears directly in LCP timing because the font download starts at the same point in the page load regardless of file size, but finishes 80–90 percent sooner. The browser reaches the point where it can paint the heading text that much earlier, and LCP fires at that moment.

Sell Custom Apparel — We Handle Printing & Free Shipping

Combine Subsetting with font-display: swap for Maximum Impact

Font subsetting reduces download time. font-display: swap eliminates the wait-for-font behavior entirely by rendering text in a fallback font immediately and swapping in the custom font when it arrives. Together, the two techniques ensure that text is visible as soon as the browser finishes rendering the page structure, and that the custom font swap happens quickly because the subsetted file is small.

Add font-display: swap to your @font-face declaration alongside your optimized font reference. The combination of a smaller file and an immediate fallback render is the standard recommendation for web font LCP optimization.

Adding a Font Preload for the Heading Font

A <link rel="preload"> tag in the document <head> tells the browser to start downloading the font as early as possible — before it parses the CSS and discovers the @font-face rule. Combined with a subsetted font file, this ensures the smallest possible download starts at the earliest possible moment:

<link rel="preload" href="/fonts/my-heading-font-subset.woff"
  as="font" type="font/woff" crossorigin>

Only preload fonts that are used above the fold — typically the display or heading font that contributes to your LCP element. Preloading body fonts or fonts used only in footers can actually hurt performance by competing with higher-priority resources.

How to Measure the LCP Improvement

Run a Lighthouse audit in Chrome DevTools before subsetting to establish a baseline LCP score and note the font transfer size in the waterfall. Then replace the font file with the subsetted version, clear the browser cache, and run Lighthouse again.

You should see the font file size drop significantly in the network waterfall, and the LCP time should improve proportionally. If LCP does not improve as expected, check whether the LCP element is actually a text node using the custom font, or whether it is an image — font optimization only affects LCP when the LCP element depends on the font to render.

Improve Your LCP — Subset Your Font Now

Upload a TTF, OTF, or WOFF and download a 50–90% smaller font file. Free, instant, no account required.

Open Font Subsetter Free

Frequently Asked Questions

How much can font subsetting improve my LCP score?

Results depend on your starting font size and connection speed. On mobile, reducing a 200 KB font to 25 KB can improve LCP by 100–300 ms — enough to move a page from "Needs Improvement" to "Good" in many cases.

Does subsetting affect Cumulative Layout Shift (CLS)?

Indirectly. When font-display: swap causes a fallback font to be replaced by the custom font, the different letter spacing can shift layout. A faster-loading subset font shortens the window during which the fallback is visible, reducing the duration of any layout shift.

Should I subset every font on my site?

Prioritize fonts used above the fold and in your likely LCP element — usually heading fonts. Body fonts are also worth subsetting but have less direct LCP impact since they are typically not the largest element in the viewport.

Jessica Rivera
Jessica Rivera Color & Design Writer

Jessica worked as a UX designer at two product companies before writing about color theory and design tools.

More articles by Jessica →
Launch Your Own Clothing Brand — No Inventory, No Risk