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:
- Compress and convert hero images to WebP or AVIF. A 3MB PNG becomes a 200KB WebP with no visible loss.
- Set explicit width and height on every image to prevent reflow.
- Use
fetchpriority="high"on the main above-the-fold image so the browser prioritises it. - Preload custom fonts or switch to
font-display: swapso text is visible immediately. - 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:
- Audit third-party scripts and remove anything not business-critical. Live chat, analytics, tag managers.
- Defer non-critical scripts with
deferorasync. - Split long tasks using
requestIdleCallbackorscheduler.yield(). - Debounce expensive event handlers (input, scroll, resize).
- 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:
- Fix TTFB (upgrade hosting or add caching) if over 1.5s
- Convert hero images to WebP and set dimensions
- Remove unnecessary third-party scripts (chat, heatmaps, old trackers)
- Defer non-critical JavaScript with
deferorasync - 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.
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