Speed Index is a lab-data performance metric that measures how quickly the visible portion of a page becomes complete during load. It is not the moment the first pixel paints (FCP) or the moment the largest element renders (LCP) — it is a weighted average of how filled-in the viewport looks across every frame of the loading process. Lower is better.
Think of Speed Index the way you think of pouring water into a glass. FCP is when the first drop hits. LCP is when the biggest stream lands. Speed Index is the average fullness of the glass over time — it rewards pages that fill steadily and quickly, and punishes pages that pour for a second, pause, and dump the rest at the end.
Speed Index is computed from a video of the page loading. Each frame is scored for "visual completeness" — what percentage of the final viewport pixels are already in their final state. Then those scores are integrated over time.
Visual completeness over time:
100% | ___________________
| /
50% | ______/
| /
0% |______/
+------|------|------|------|------|→ time
0s 1s 2s 3s 4s 5s
Speed Index ≈ shaded area above the curve (lower = better)FCP fires the instant any content paints. LCP fires when the largest element finishes. Both are point-in-time measurements. Speed Index, by contrast, penalizes every second the viewport is incomplete — so it surfaces the awkward middle of a load (slow background fonts, late-arriving cards, progressive image enhancement) that single-moment metrics ignore.
Speed Index is dominated by what fills the viewport in the first 2–3 seconds. The single biggest win is removing the round-trip wait for external CSS by inlining the styles needed for above-the-fold content directly in <head>.
<head>
<style>/* Critical above-the-fold CSS, ~10–14 KB max */</style>
<link rel="preload" href="/styles/main.css" as="style"
onload="this.onload=null;this.rel='stylesheet'">
</head>The hero image (or hero video poster) usually dominates the visible area. Every millisecond of delay is multiplied across the integration. Preloading lets the browser fetch it before the parser would otherwise discover it.
<link rel="preload" as="image" href="/hero.webp"
fetchpriority="high">Convert above-the-fold images to WebP or AVIF — typically 25–50% smaller than equivalent JPEGs at the same visual quality. Combined with proper width / heightattributes (so layout doesn't shift mid-load), this is the highest-leverage Speed Index improvement on most marketing pages.
Content the user can't see contributes nothing to Speed Index — but downloading it competes for bandwidth with the content that does. Defer it.
<img src="/below-the-fold.webp" loading="lazy"
width="800" height="400" alt="...">Render-blocking scripts pause the parser, freezing visual progress. Every blocking <script> in the head should be challenged.
Fix: Add defer or async to anything that doesn't need to run before paint. For inline scripts, move them to the end of <body>.
Speed Index starts the moment the browser first sees content. If your HTML is served from a single origin halfway across the world, the first 200–400 ms of every load is wasted on transit. Edge-cached HTML and assets can drop that to under 50 ms for most users.
font-display: swap for Web FontsThe default font-loading behavior hides text for up to 3 seconds while a custom font downloads — every one of those frames is "visually incomplete" for Speed Index purposes. font-display: swap paints text immediately in a fallback, then swaps when the custom font arrives.
Bonus: Pair with size-adjust, ascent-override, and descent-override on a fallback @font-face declaration to minimize the visual jump when the swap happens.
The most reliable way to improve Speed Index is to render less above the fold. A 3-MB autoplaying hero video, a complex slider, and four parallax sections may all be technically optimized — and still produce a slow Speed Index because they have so much pixel area to fill.
Fix: Audit your above-the-fold UI honestly. Often a single static hero image with one CTA outperforms a feature-packed alternative, both in Speed Index and conversion.
| Metric | What It Measures | Good Threshold | Difference From Speed Index |
|---|---|---|---|
| First Contentful Paint (FCP) | When any content first paints | ≤ 1.8 s | Single moment vs. integrated visual progress |
| Largest Contentful Paint (LCP) | When the largest visible element finishes painting | ≤ 2.5 s | Focuses on one element vs. full-viewport completeness |
| Time to Interactive (TTI) | When the main thread quiets enough to handle input | ≤ 3.8 s | Measures interactivity vs. visual progress |
| Total Blocking Time (TBT) | How long the main thread is blocked during load | ≤ 200 ms | Measures responsiveness vs. visual fill rate |
| Cumulative Layout Shift (CLS) | Unexpected layout movement | ≤ 0.1 | Measures stability vs. fill rate |
Speed Index is the onlystandard performance metric that integrates over time rather than measuring a single moment. That's its strength — and why it sometimes uncovers problems the other metrics miss.
What's happening: The hero is large, uncompressed, and loaded at default priority — so it arrives 2+ seconds into the load even though it dominates the viewport.
Fix: Convert to WebP/AVIF, add fetchpriority="high", preload it in <head>, and serve responsive sizes via srcset.
What's happening: Multiple external stylesheets in <head> each add a round-trip before any paint — Speed Index pays for every one.
Fix: Inline the critical 10–14 KB and async-load the rest.
What's happening: The hero paints fast, but a related-products carousel, recommended-articles row, or chat widget loads 3 seconds in — and these sit above the fold.
Fix: Server-render anything above the fold. Reserve client-side rendering for genuinely interactive widgets that can wait.
What's happening: Every text block hides for 1–3 seconds while a custom font loads. Each frame counts as "incomplete" for Speed Index.
Fix: Add font-display: swap to @font-face rules and tune fallback metrics with size-adjust.
A good Speed Index is 3.4 seconds or less. Between 3.4 and 5.8 seconds "needs improvement," and over 5.8 seconds is poor. These thresholds apply to mobile lab tests; desktop expectations are typically 1–2 seconds tighter.
No. The three Core Web Vitals are LCP (loading), INP (interactivity), and CLS (visual stability). Speed Index is a labmetric — it's computed from synthetic-test video frames, not real-user data. Google uses Core Web Vitals as ranking signals; Speed Index is informational and contributes to the lab performance score.
LCP captures one moment: when the largest visible element finishes painting. Speed Index captures the entire shape of the load: how quickly the viewport fills in, integrated over every frame. A page can have a fast LCP and a slow Speed Index if smaller elements arrive sluggishly, or a slow LCP and an okay Speed Index if everything else paints fast and only the hero is late.
Speed Index requires recording and analyzing video of the load, which is too expensive and privacy-invasive to do in real users' browsers at scale. Field metrics like LCP and INP can be derived from inexpensive browser APIs that are safe to expose; Speed Index cannot.
Because users don't experience load as a single moment — they experience it as a movie. Point-in-time metrics (FCP, LCP) miss the awkward middle, where the page is half-painted and the user starts looking for the back button. Speed Index integrates that entire window, so it tracks user perception more closely than any single-moment metric.
Indirectly. Speed Index itself isn't a Google ranking signal. But the optimizations that improve Speed Index (fast hero images, inlined critical CSS, deferred JS) almost always also improve LCP, FCP, and CLS — and those are ranking signals.
Indirectly, the same way it affects classic SEO. AI search systems preferentially cite pages already ranking well in Google. Anything that improves Speed Index typically lifts Core Web Vitals too, which improves rankings, which improves AI citation odds.
Speed Index is the single best metric for capturing how a load feels. It rewards pages that fill in steadily and punishes pages with awkward gaps, even when their headline metrics (FCP, LCP) look fine. It carries about 10% of the performance score on its own — but the optimizations that improve it (inlined critical CSS, preloaded hero image, modern image formats, deferred JS, font-display: swap) cascade into LCP, FCP, and CLS gains too.
Run a Greadme deep scan to see your Speed Index, identify which above-the-fold resources are slowing the visual fill, and get a prioritized fix list.