Free Tool
    Updated 6 June 2026

    Font Loading Checker

    Audit how your web fonts load. Find FOIT, missing `font-display: swap`, and oversized font files dragging down LCP and CLS.

    By Deepak Shukla — Founder & CEO, Pearl Lemon

    What This Tool Checks

    • Missing `font-display: swap` (causes FOIT — invisible text)
    • Web fonts not preloaded
    • Oversized font files (>50KB compressed)
    • Too many font weights/styles loaded
    • Self-hosted vs third-party font hosting
    • Variable fonts opportunity

    Why This Matters

    A blocked web font shows nothing — your text is invisible until the font downloads, blowing LCP. The wrong fallback metrics cause text to reflow when the font swaps in, blowing CLS. Both are ranking signals.

    How to Fix Issues

    1. 1.Add `font-display: swap` to every `@font-face` rule
    2. 2.Preload critical fonts with `<link rel="preload" as="font" crossorigin>`
    3. 3.Self-host fonts to remove third-party DNS and TLS handshakes
    4. 4.Subset fonts to only the characters you actually use
    5. 5.Use variable fonts to replace 4–8 file requests with 1

    Web fonts are a brand requirement and a performance hazard. This checker audits exactly how your fonts load, where the blocking moments are, and which one-line CSS changes return the most milliseconds.

    FOIT vs FOUT — pick the right tradeoff

    Without font-display: swap, browsers default to FOIT (Flash of Invisible Text) — text is hidden until the font downloads. On a slow connection that's 3+ seconds of nothing visible, which torches LCP and bounce rate. font-display: swap switches to FOUT (Flash of Unstyled Text) — text renders immediately in the fallback font, then re-renders when the real font arrives. FOUT looks janky but is almost always the right choice.

    Preload the fonts above the fold

    Browsers discover web fonts late — they have to parse the CSS, find the @font-face rule, and then start the font download. A <link rel="preload" as="font" type="font/woff2" crossorigin> in the document head starts the download immediately, often shaving 500–1500ms off the moment your hero text is readable. The crossorigin attribute is mandatory; without it the browser ignores the preload.

    Self-host or third-party — the case for self-hosting

    Google Fonts and Adobe Typekit save you the hassle of font hosting but add a DNS lookup, TLS handshake, and a third-party privacy concern (GDPR rulings have gone against Google Fonts in Germany). Self-hosting eliminates the extra connection and gives you control over caching headers. For most teams, downloading the woff2 files once and serving them from your own domain is a clean win.

    Variable fonts collapse the request count

    If you use a typeface in regular, medium, semibold, bold, and their italics, that's 8 file requests. A single variable font file delivers the entire weight axis in one woff2, often smaller than 2 static weights combined. Inter, Roboto Flex, and JetBrains Mono all ship variable versions; the migration is usually a single CSS change.

    Match the fallback metrics

    When the web font swaps in, the layout shifts because the metrics differ from the fallback. The size-adjust, ascent-override, descent-override, and line-gap-override @font-face descriptors let you tune the fallback to match — turning a CLS-blowing swap into one the user barely notices. The font-fallback-generator at fontkit.dev produces these values automatically.

    Methodology

    We fetch the page, parse every stylesheet for @font-face declarations, and inspect the resulting font requests in the network waterfall. Each font is evaluated against six criteria: font-display set, preload hint present, file size (woff2 compressed), self-hosted vs third-party, number of weights/styles loaded, and whether a variable-font alternative exists. We surface the byte savings from migrating to variable fonts and from subsetting against the characters your visible text actually uses. The test runs against a real Chromium so we see exactly which fonts the browser actually requested.

    Frequently Asked Questions

    Monitor this continuously with LemWatch

    A one-off free font loading checker shows you today. LemWatch re-runs the same checks around the clock and alerts you the moment something breaks — free for up to 10 sites, no card needed.

    HTTP Status Code Reference

    Understanding HTTP status codes helps you diagnose issues found by this tool: