Speed Index measures how quickly content is visually populated on your page. Here's what it means and how to improve it.
Speed Index (SI) measures how quickly the visible content of a page is populated. Unlike LCP which measures a single element, Speed Index tracks the overall visual progress of the entire page loading from top to bottom.
Speed Index accounts for 10% of your PageSpeed score. A good Speed Index is under 3.4 seconds. Above 5.8 seconds is considered poor.
Speed Index captures screenshots of your page loading at multiple points in time and measures how complete the page looks at each point. A page that shows content gradually gets a better score than one that shows nothing for a long time and then everything at once.
In technical terms, it's the area above the visual progress curve. A lower area means content appeared faster.
CSS and synchronous JavaScript that block rendering delay when the browser can start painting the page, which directly increases Speed Index.
If the server takes a long time to respond, no rendering can happen until the HTML arrives. A high TTFB pushes Speed Index up.
Pages that rely heavily on JavaScript to render content show nothing until the JS runs. This creates a gap in visual progress that Speed Index penalizes.
Images that take a long time to load leave visible blank spaces on the page. Speed Index tracks these gaps.
If fonts take a long time to load and you're using font-display: block, your text is invisible until the font arrives. Speed Index captures this invisible period.
Speed Index improves when you improve FCP and LCP. Most of the same techniques apply.
Move non-critical CSS out of the <head>. Add defer to JavaScript. Inline the critical CSS needed for above-the-fold content so the browser can start rendering immediately.
Replace font-display: block with font-display: swap so text renders immediately in a fallback font while the custom font loads:
@font-face {
font-family: "MyFont";
src: url("/fonts/myfont.woff2") format("woff2");
font-display: swap;
}
Tell the browser to start loading critical resources early:
<link rel="preload" href="/fonts/main.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/hero.webp" as="image">
Images visible when the page first loads should be compressed, correctly sized, and not lazy-loaded. A blank image placeholder while the image loads directly hurts Speed Index.
Client-side rendered apps delay all visual content until JavaScript runs. Switching to SSR means the browser gets rendered HTML immediately and can start displaying content right away.
Avoid using JavaScript to populate content after the initial render for above-the-fold areas. If your hero text, navigation, or featured content loads in via useEffect, the page will look blank during that period.
These three metrics all measure visual performance but from different angles:
A fast FCP that's followed by a slow trickle of content will still have a high Speed Index. You need both a fast FCP and consistent visual progress.
| Score | Speed Index | |---|---| | Good | Under 3.4s | | Needs improvement | 3.4s to 5.8s | | Poor | Over 5.8s |
<head>defer or asyncfont-display: swapSpeed Index rarely needs to be addressed in isolation. If your FCP and LCP are good, Speed Index usually takes care of itself.
Test your site to see your Speed Index alongside all your other Core Web Vitals metrics.
How fast is your site?
Get your PageSpeed score in seconds — free, no sign-up needed.
Test Your Site →