scoringApril 14, 2026·5 min

SEO Performance Score: Core Web Vitals, INP, and the Metrics That Actually Move Rankings

The performance sub-score covers LCP, INP, CLS, TTFB and bundle size. These are the metrics that tip Google from 'slow penalty' into 'fast bonus'. Here is how to diagnose and fix each one.

Juliette
By Juliette
Bloomwise's SEO expert

Key takeaways

  • Core Web Vitals (LCP, INP, CLS) are the three metrics Google uses as a ranking signal. Hit the good threshold on all three and you are safe.
  • INP replaced FID in 2024 and is harder to pass because it measures every interaction, not just the first one. Heavy JavaScript bundles are the usual culprit.
  • Image optimisation is the single biggest LCP lever: WebP/AVIF, explicit dimensions, fetchpriority on the hero, lazy-loading everything below the fold.
  • TTFB (Time to First Byte) under 800ms is mostly a hosting and CDN question. If your TTFB is 2 seconds, no amount of frontend optimisation will save you.
  • Field data in Google Search Console is authoritative. Lab tools (PageSpeed Insights, Lighthouse) are useful for debugging but do not set rankings.

Performance is the sub-score that most small sites get wrong for the wrong reason: they obsess over micro-optimisations on already-fast pages, or they ignore catastrophic issues that tank rankings. This guide focuses on the five metrics Google actually measures and the fix order that gets you above the Core Web Vitals threshold without wasted effort. The performance sub-score weighs 15% of the SEO + GEO AI Search Score, and clearing it is binary: either you pass the thresholds or you do not.

The five metrics that matter

Metric Good threshold Poor threshold Impact
LCP (Largest Contentful Paint) Under 2.5s Over 4s Ranking signal
INP (Interaction to Next Paint) Under 200ms Over 500ms Ranking signal
CLS (Cumulative Layout Shift) Under 0.1 Over 0.25 Ranking signal
TTFB (Time to First Byte) Under 800ms Over 1.8s Foundation metric
Bundle size (mobile) Under 1.5MB Over 3MB User experience

LCP, INP, and CLS are the three Core Web Vitals Google uses as a ranking signal. TTFB is a foundation metric that affects all three. Bundle size is a user experience signal that correlates with all the above.

Metric 1: LCP (Largest Contentful Paint)

LCP measures how long it takes for the biggest visible element on the page to render. It is usually a hero image, a title block, or a large text paragraph.

Common LCP killers on small sites:

  • Huge unoptimised hero image
  • Custom web fonts blocking the initial render
  • JavaScript libraries that delay paint
  • Slow server TTFB cascading into slow LCP

The fix order:

  1. Compress and convert hero images to WebP or AVIF. A 3MB PNG becomes a 200KB WebP with no visible loss.
  2. Set explicit width and height on every image to prevent reflow.
  3. Use fetchpriority="high" on the main above-the-fold image so the browser prioritises it.
  4. Preload custom fonts or switch to font-display: swap so text is visible immediately.
  5. Lazy-load everything below the fold with loading="lazy".

Metric 2: INP (Interaction to Next Paint)

INP replaced FID in March 2024 and it is significantly harder to pass. While FID only measured the delay of the first interaction (click, tap, key press), INP measures the responsiveness of every interaction on the page and reports the worst outliers.

What breaks INP:

  • Heavy JavaScript event handlers (analytics, tracking, chat widgets)
  • Long tasks on the main thread (large React or Vue re-renders)
  • Third-party scripts that hog the main thread
  • Unoptimised images in infinite scroll feeds

The fix order:

  1. Audit third-party scripts and remove anything not business-critical. Live chat, analytics, tag managers.
  2. Defer non-critical scripts with defer or async.
  3. Split long tasks using requestIdleCallback or scheduler.yield().
  4. Debounce expensive event handlers (input, scroll, resize).
  5. Use a CDN for framework code so users hit a cached version.

INP is the biggest failing metric for most JavaScript-heavy sites. If your score is red, the answer is almost always "less JavaScript, not more optimisation".

Metric 3: CLS (Cumulative Layout Shift)

CLS measures visual stability. It is the metric that annoys users the most: buttons jumping right as you click them.

Common CLS killers:

  • Images without explicit width and height
  • Ad slots that expand after load
  • Web fonts swapping with different sizes
  • Injected content (banners, modals) pushing layout down

The fix: reserve space for everything that loads asynchronously. Images need explicit dimensions, ad slots need a fixed container, embedded iframes need width and height attributes.

Metric 4: TTFB (Time to First Byte)

TTFB is how long it takes for the server to start responding. Under 800ms is good, over 1.8s is a foundation problem that caps every other metric.

TTFB is mostly a hosting decision:

Cause Typical TTFB Fix
Shared hosting, no cache 1.5 to 3s Upgrade to managed hosting
VPS with basic PHP stack 700ms to 1.5s Add Redis cache + Cloudflare
Static site with CDN 100 to 300ms Already ideal
Next.js or similar SSR + CDN 200 to 600ms Ideal for dynamic content

If your TTFB is over 1.5s, no amount of frontend optimisation will save you. Fix the hosting first, then worry about LCP and INP.

Metric 5: Bundle size

Bundle size is the total JavaScript, CSS, and image payload on mobile. Under 1.5MB is healthy, over 3MB is a red flag, over 5MB is a disaster.

The quick audit:

  • Open Chrome DevTools > Network tab
  • Reload the page on mobile emulation with cache disabled
  • Sum the transferred size of all JS, CSS, and image resources
  • Remove or defer anything not needed for above-the-fold content

The fix order for a failing performance score

If your performance sub-score is under 50, run this sequence:

  1. Fix TTFB (upgrade hosting or add caching) if over 1.5s
  2. Convert hero images to WebP and set dimensions
  3. Remove unnecessary third-party scripts (chat, heatmaps, old trackers)
  4. Defer non-critical JavaScript with defer or async
  5. Audit CLS on your top 5 pages and reserve space for async content

Expected score movement: 50 to 75 in two weeks if you follow the order. The last 75 to 90 points require more granular work (code splitting, critical CSS inlining, third-party script replacements) and pair well with a technical SEO audit since many issues overlap.


Performance is the sub-score where effort and result are most predictable. You measure, you fix, you re-measure. There is no mystery: the thresholds are public, the metrics are standardised, and the fix order is the same for most sites. Clear the Core Web Vitals bar, then stop and spend your energy on content and E-E-A-T where the compounding is greater.

💡
The single highest-leverage LCP fix for content sites: convert every hero image to WebP with a max width of 1600px. This one change moves LCP on most WordPress and Shopify sites from 4s to under 2s.
⚠️
Do not try to optimise performance before measuring with field data. PageSpeed Insights shows lab data which can mislead. Google Search Console > Core Web Vitals is the real ranking signal, and it updates every 28 days. Fix, wait 28 days, measure, iterate.

Want to know where your site stands?

bloomwise audits your site in 2 minutes and gives you an SEO score with priorities to fix.

Get started

Questions fréquentes