Performance checks

Triggers and fixes for oversized HTML, slow server responses, and poor Core Web Vitals (LCP, INP, CLS) from real-user data.

Updated 8 October 2026View as Markdown

Two performance checks are measured by the SEOFix crawler on every HTML page and are recheckable. The three Core Web Vitals checks come from real-user field data in Google's PageSpeed Insights for a sample of pages, and are re-verified by a later full audit.

Crawler measurements

These run on every URL that answers 200 with text/html.

PAGE_TOO_LARGE — Page too large

  • Severity: warning. Recheckable: yes.
  • Trigger: the HTML response body is larger than 3,000,000 bytes (about 3 MB), measured after decompression. SEOFix downloads at most 5 MB of a page.
  • Details: size_bytes.
  • Why it matters: very large HTML is slow to download and parse, and crawlers may truncate it.
  • How to fix: bring the HTML below 3 MB. Common causes: very long lists rendered in full (paginate or load more on demand), large inline JSON state from a JavaScript framework (send only what the page needs), inline images as base64 data: URIs, and inlined SVG sprites or CSS repeated on every page.

SLOW_PAGE — Slow page load

  • Severity: warning. Recheckable: yes.
  • Trigger: SEOFix's request took more than 3,000 ms from sending the request to receiving the whole response.
  • Details: response_time_ms.
  • Why it matters: slow responses hurt user experience and reduce how much of the site search engines crawl.
  • How to fix: bring the response under 3 seconds. Cache rendered pages (page cache or CDN), optimise slow database queries, avoid calling slow external APIs while rendering, and stream or paginate large pages. If only a few pages are slow, look at what they have in common (a large category, a heavy query).

Core Web Vitals

On full audits where Core Web Vitals sampling is enabled, SEOFix asks Google's PageSpeed Insights for the field data (Chrome UX Report, mobile) of up to 20 pages: the shallowest and most linked first. It checks the 75th percentile of real users. Pages without field data in Google's dataset report nothing. Previews and rechecks never sample Core Web Vitals.

Details (all three): p75 (the measured 75th percentile), threshold.

Code Metric Flagged when p75 is above Good target
CWV_POOR_LCP Largest Contentful Paint 4,000 ms 2,500 ms or less
CWV_POOR_INP Interaction to Next Paint 500 ms 200 ms or less
CWV_POOR_CLS Cumulative Layout Shift 0.25 0.1 or less

For CLS, p75 and threshold are reported multiplied by 100, as PageSpeed Insights returns them: p75: 31 means a CLS of 0.31, and the threshold is 25.

Field data reflects past real visits, so after a fix it takes time for these numbers to move.

CWV_POOR_LCP — Poor Largest Contentful Paint

  • Severity: warning. Recheckable: no (needs a full audit).
  • Trigger: p75 LCP is above 4,000 ms.
  • Why it matters: real users wait over 4 seconds for the main content. This is a poor Core Web Vitals score and hurts rankings.
  • How to fix: speed up the largest element. Serve the hero image in a modern format at the right size and preload it; do not lazy-load it; remove render-blocking CSS and JavaScript from the head; improve server response time (see SLOW_PAGE).
<link rel="preload" as="image" href="/img/hero-1200.webp" fetchpriority="high">
<img src="/img/hero-1200.webp" width="1200" height="600" alt="Dubai Marina at night" fetchpriority="high">

CWV_POOR_INP — Poor Interaction to Next Paint

  • Severity: warning. Recheckable: no (needs a full audit).
  • Trigger: p75 INP is above 500 ms.
  • Why it matters: the page responds sluggishly to clicks, taps and typing.
  • How to fix: break up long JavaScript tasks, defer or remove non-critical scripts (third-party tags, widgets), avoid heavy work in input handlers, and reduce main-thread work during hydration.

CWV_POOR_CLS — Poor Cumulative Layout Shift

  • Severity: warning. Recheckable: no (needs a full audit).
  • Trigger: p75 CLS is above 0.25.
  • Why it matters: content jumps around while the page loads, causing misclicks.
  • How to fix: reserve space for images, videos, ads and embeds with width and height attributes or CSS aspect-ratio; do not insert banners or content above existing content after load; load web fonts with font-display and matched fallback metrics.
<img src="/img/logo.png" width="160" height="40" alt="Example Jobs">
<div style="aspect-ratio: 16 / 9"><iframe src="https://www.youtube.com/embed/abc" title="Intro video"></iframe></div>

More in Issue reference

Still stuck? Email [email protected] with your site and what you expected to see.