PageSpeed Fix · June 2026

Shopify Font Display Swap: Fix Invisible Text During Webfont Load (2026)

Shopify font display swap fixes the PageSpeed warning that says "Ensure text remains visible during webfont load." Start with a free Shopify speed test; Thunder reduces the scripts competing with your fonts, then this guide shows the exact Liquid and CSS fixes.

~12 min read · CSS, Liquid, preload, and fallback examples

Quick Fix with Thunder

Font files are rarely the only reason the warning appears. Heavy app scripts often delay CSS parsing and font discovery, so the browser starts font downloads late. Thunder defers non-critical JavaScript and improves first-render loading order, which gives the browser a cleaner path to CSS, fonts, and the hero image.

Use Thunder for automated script cleanup, then apply the font-specific fixes below. If your report also shows LCP or CSS issues, pair this with the Shopify font optimization guide, CSS optimization guide, and LCP guide.

Install Thunder

What the Font Display Warning Means

Chrome flags "Ensure text remains visible during webfont load" when a custom font can hide text until the font file finishes downloading. That blank period is called FOIT: flash of invisible text. On a fast desktop connection it may last a few frames. On a mobile shopper's first visit, it can make headings, navigation, product names, or prices disappear long enough to feel broken.

The official Chrome guidance recommends using the font-display API so the browser can show a fallback font while the custom file loads. Web.dev's font best practices also warn that font loading can affect both perceived speed and layout stability.

This is a diagnostic warning, not a Core Web Vitals metric by itself. But it can influence LCP if your LCP element is text, and it can influence CLS if the fallback font swaps to a custom font with different dimensions. That is why the fix needs both visibility and stability.

Step 1: Find Which Shopify Font Is Failing

Open PageSpeed Insights, expand the font warning, and copy the listed font URLs. Shopify fonts usually come from fonts.shopifycdn.com, cdn.shopify.com, Google Fonts, Adobe Fonts, or an app vendor. Your fix depends on the source.

If the font is declared in your theme CSS, you can edit it directly. If it comes from Google Fonts, update the request URL. If it comes from an app widget, you usually cannot rewrite its @font-face rule; the practical fix is to remove the widget from the first viewport or ask the vendor for a modern build.

Before editing, run another store speed test and save the baseline. Font changes can improve visibility while accidentally hurting CLS, so compare before and after.

Step 2: Add font-display swap to Theme Fonts

For self-hosted theme fonts, add font-display: swap inside each @font-face block used for readable text:

@font-face {
  font-family: 'Brand Sans';
  src: url('{{ 'brand-sans.woff2' | asset_url }}') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

Use swap when brand typography matters and you want the custom font to replace the fallback once ready. Use optional when performance matters more than perfect typography; the browser may keep the fallback font for the whole visit on slow connections.

Step 3: Fix Shopify font_face and Google Fonts

Many Shopify themes output fonts through Liquid settings. If your theme uses Shopify's font_face filter, add the display option if your theme supports it:

{{ settings.type_header_font | font_face: font_display: 'swap' }}
{{ settings.type_body_font | font_face: font_display: 'swap' }}

For Google Fonts, make sure the URL includes &display=swap. Without it, Google may serve CSS that allows invisible text:

<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap" rel="stylesheet">

Step 4: Preload Only the Critical WOFF2 Font

Preload helps when the font is used above the fold and is discovered late through CSS. It hurts when you preload every weight. Start with the single body or heading font that appears in the first viewport:

<link
  rel="preload"
  as="font"
  type="font/woff2"
  href="{{ 'brand-sans-regular.woff2' | asset_url }}"
  crossorigin
>

Do not preload five weights, italic variants, and icon fonts. Fonts compete with CSS and the LCP image. If the hero image is already late, use the hero image preload guide before adding more font preloads.

Step 5: Prevent Layout Shift from Font Swaps

The common mistake is fixing invisible text and creating layout shift. If your fallback font is much wider or taller than your brand font, the text reflows when the custom font arrives. Choose fallback fonts with similar metrics, keep line-height stable, and avoid using custom fonts for price blocks where a shift can move purchase buttons.

Test with the Shopify CLS fix guide. A good font-display swap implementation shows text immediately and keeps the page steady when the final font appears.

Manual Fix vs Thunder Fix

ProblemManual fixThunder fix
Invisible textEdit @font-face and Liquid font outputImproves first-render order around CSS and fonts
Late font discoveryPreload one critical WOFF2 fontReduces script competition in the critical path
App-injected fontsRemove widget or ask vendor to fix CSSDefers non-critical app widgets where safe
Related LCP delaysTune CSS, fonts, hero image, and LiquidAutomates common Shopify resource ordering improvements

FAQ

What does Shopify font display swap mean?

Shopify font display swap means your theme tells the browser to show fallback text immediately while a custom webfont loads. It prevents flash of invisible text, often called FOIT, and helps shoppers read the page before the brand font finishes downloading.

Why does PageSpeed show ensure text remains visible during webfont load?

PageSpeed shows this warning when a font file can hide text while it loads. Chrome recommends font-display: swap, fallback, or optional inside @font-face rules so the browser can use system text instead of blank text.

Can Thunder fix Shopify webfont load problems?

Thunder optimizes the loading order around critical resources and reduces competing scripts that delay font discovery. Theme-specific font declarations may still need manual cleanup, but Thunder helps the rest of the first render happen sooner.

Should every Shopify font use font-display swap?

Most readable text fonts should use swap or optional. Icon fonts need more care because fallback glyphs can look broken. For icons, SVG icons are usually a better long-term fix than a blocking icon font.

Does preloading fonts always improve Shopify speed?

No. Preload only one or two critical WOFF2 fonts used above the fold. Preloading every weight and style competes with the hero image and CSS, which can make LCP worse.

Why does font-display swap sometimes cause layout shift?

Swap can shift text when the fallback font has different metrics from the webfont. Use a similar system fallback, reduce font weights, and test CLS after changing font loading.

Fix Shopify font display swap the practical way

Add font-display to your theme fonts, preload only the critical WOFF2 file, and use Thunder to reduce the scripts delaying first render. For the full framework, use our complete Shopify speed optimization guide or compare the best Shopify speed apps.

See Thunder pricing