/ โ† Page Speed Fixes / Check your page speed
In this guide
  1. The tools for checking page speed
  2. Field data and lab data: the key difference
  3. What the page speed scores and timings mean
  4. Why your page speed results vary
  5. When PageSpeed Insights is not working
  6. Checking speed from the command line and DevTools
  7. The fix, step by step
  8. Edge cases worth knowing
  9. Keeping your page speed checked
  10. Questions and answers

The tools for checking page speed

There is no single page speed number. Different tools measure different things, and the first step is knowing which one answers your question.

ToolWhat it measuresBest for
PageSpeed Insights (pagespeed.web.dev)Field data from real Chrome users plus one Lighthouse lab testA quick check of any public URL
Search Console Core Web Vitals reportField data grouped across your whole siteSeeing which templates fail for real visitors
Lighthouse in Chrome DevToolsA lab test run on your own computerTesting changes, staging sites and pages behind a login
Performance panel in Chrome DevToolsA detailed recording of one page loadFinding exactly what is slow
WebPageTestLab tests from chosen locations, devices and connectionsComparing runs and seeing a filmstrip of the load
curlServer response timingsChecking the server on its own

For most small sites the right routine is: PageSpeed Insights to check a page, Search Console to see the whole site, and DevTools when you need to find and test a fix. The page speed guide covers the wider picture.

Field data and lab data: the key difference

PageSpeed Insights shows two quite different things on one screen, and confusing them causes most of the frustration.

Field data: what real visitors experienced

The top section, Discover what your real users are experiencing, comes from the Chrome User Experience Report. It covers real Chrome visits over the previous 28 days and reports the 75th percentile, meaning three in four visits were at least that fast. This is the data Google uses for the Core Web Vitals assessment, and it is what counts for search. It changes slowly, so a fix you make today takes weeks to show fully.

You can switch between This URL and Origin, which is the whole domain. A page with too few visits shows no URL data and falls back to the origin, or shows nothing at all.

Lab data: one simulated test

The lower section, Diagnose performance issues, is a single Lighthouse run on Google's servers. On mobile it emulates a mid-range phone on a slow 4G connection with a slowed processor, which is why mobile scores are usually much lower than desktop. The lab test is repeatable enough to diagnose problems, but it is not what your visitors experienced.

๐Ÿ’ก When field and lab disagree, trust the field data for whether you have a problem and use the lab data to work out why.

What the page speed scores and timings mean

The big number in a circle is the Lighthouse performance score, from 0 to 100. It is a weighted blend of five lab metrics, and it is not used by Google for ranking.

Performance scoreRating
90 to 100Good
50 to 89Needs improvement
0 to 49Poor

The timings matter more than the score. These are the thresholds for a good result at the 75th percentile:

MetricMeasuresGoodPoorWhere
Largest Contentful Paint (LCP)When the main content appears2.5 s or lessOver 4 sField and lab
Interaction to Next Paint (INP)How quickly the page responds to taps and clicks200 ms or lessOver 500 msField only
Cumulative Layout Shift (CLS)How much the layout jumps0.1 or lessOver 0.25Field and lab
First Contentful Paint (FCP)When anything first appears1.8 s or lessOver 3 sField and lab
Time to First Byte (TTFB)How quickly the server starts responding0.8 s or lessOver 1.8 sField
Total Blocking Time (TBT)How long scripts block the main thread during loadUnder 200 ms in labOver 600 msLab only

LCP, INP and CLS are the three Core Web Vitals. A page passes the Core Web Vitals assessment when all three are good in the field data. TBT stands in for INP in the lab, because a lab test has no real person tapping the screen. If your page fails, the Core Web Vitals assessment failed guide shows where to start, and the LCP, INP and CLS guides cover each metric.

When people ask for a page's load time, the most useful single answer is its field LCP: the moment most visitors see the main content.

Why your page speed results vary

Run the same URL three times and you may see scores of 62, 71 and 58. That is normal, and the causes are mostly outside the page:

Run a lab test three to five times and use the middle result. Do not compare a single run before a change with a single run after it. Field data does not have this problem, because it already averages thousands of visits, but it reacts slowly.

When PageSpeed Insights is not working

If PageSpeed Insights shows an error instead of results, the message usually tells you what went wrong.

MessageLikely causeWhat to check
FAILED_DOCUMENT_REQUESTThe page could not be loaded at allDNS, SSL certificate, server down, firewall
ERRORED_DOCUMENT_REQUEST with a status codeThe server returned an error such as 403 or 500Bot protection, security plugins, server errors
NO_FCPNothing was painted on screenA blank page, a page hidden until scripts run, a challenge page
NO_LCPNo largest content element was recordedSee the NO_LCP guide
Page loaded too slowly to finish within the time limitThe load took longer than Lighthouse allowsVery slow server, endless redirects, scripts that never finish
No field data shownToo few Chrome visits in the last 28 daysNormal for new or quiet pages; use the origin data or lab data

The most common cause on small sites is bot protection. Firewalls, Cloudflare challenge settings and security plugins can block or challenge the test because it is an automated visitor. Check what the server returns with:

curl -sI -A "Mozilla/5.0 (Linux; Android 11) AppleWebKit/537.36 Chrome-Lighthouse" https://example.com/

A 200 is what you want. A 403, 503 or a challenge page means a security rule is stepping in. Relax that rule for testing, or test the page in DevTools Lighthouse from your own browser instead. Also confirm the URL is public, uses https without certificate warnings, and does not redirect in a loop.

Checking speed from the command line and DevTools

To see how long the server takes before the browser does anything, use curl:

curl -o /dev/null -s -w 'dns %{time_namelookup}s\nconnect %{time_connect}s\ntls %{time_appconnect}s\nfirst byte %{time_starttransfer}s\ntotal %{time_total}s\n' https://example.com/

The first byte figure is your TTFB from where you are. Run it several times; if it is regularly over about 0.8 seconds, the server is the bottleneck. The high TTFB guide covers server-side fixes.

To run Lighthouse yourself, open the page in an incognito window, open DevTools with F12, choose the Lighthouse panel, select Mobile and the Performance category, and start the page load test. To run it from a terminal with Node.js installed:

npx lighthouse https://example.com/ --only-categories=performance --view
npx lighthouse https://example.com/ --only-categories=performance --preset=desktop --view

PageSpeed Insights also has a free API, useful for checking a list of pages:

curl -s "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://example.com/&strategy=mobile" | jq '.lighthouseResult.categories.performance.score'

Regular use of the API needs a free API key from Google Cloud. On WordPress and Shopify, platform-specific causes of slow results are covered in the WordPress page speed and Shopify page speed guides.

The fix, step by step

Step 1

Run PageSpeed Insights on key pages

Open pagespeed.web.dev and test one public URL from each template: home, a product or service page, a category and a blog post. Leave the Mobile tab selected, because Google uses the mobile experience and most visitors are on phones. Wait for both sections to load. Note the Core Web Vitals assessment result at the top and the performance score lower down for each URL. You now have a baseline for every important template to compare against later.

Step 2

Read the field data first

In the top section, check whether the Core Web Vitals assessment says Passed or Failed, then read LCP, INP and CLS at the 75th percentile. Switch between This URL and Origin to see whether the issue is the page or the whole site. If no field data is shown, the page has too few Chrome visits, so rely on Search Console and lab data. Write down which of the three metrics fail on which templates.

Step 3

Check the Search Console report

Open the Core Web Vitals report in Search Console and view the mobile report. It groups similar URLs and shows which groups are poor, need improvement or are good, with the failing metric for each group. Click a group to see example URLs. Compare this with your PageSpeed Insights notes. You know this step is done when you know which templates fail for real visitors across the site, not only on the pages you tested.

Step 4

Run repeated lab tests

For each failing template, run the lab test three to five times, in PageSpeed Insights or in DevTools Lighthouse from an incognito window, and use the middle result. Look at the LCP, TBT and CLS timings rather than the overall score. Record the median values. This gives you a steady lab baseline that you can compare after each change, without being misled by the normal variation between single runs of the same page.

Step 5

Check the server response time

Run curl -o /dev/null -s -w with the time_starttransfer variable against the slow page several times from your own connection, and compare it with the TTFB in the field data. If the first byte regularly takes more than about 0.8 seconds, the server, caching or hosting is the first thing to fix, because every other timing waits for it. Confirm caching is working by checking that repeat requests come back faster.

Step 6

Read the diagnostics

Scroll to the Diagnostics section of the lab report. Expand items such as Largest Contentful Paint element, render-blocking requests, unused JavaScript and image delivery. Each lists the files responsible and an estimated saving. Focus on the items linked to your failing field metric: LCP diagnostics for a slow LCP, long main-thread tasks for poor INP, layout shift sources for CLS. List the top three changes with the biggest estimated savings for that template.

Step 7

Fix a test that will not run

If PageSpeed Insights shows an error such as FAILED_DOCUMENT_REQUEST, ERRORED_DOCUMENT_REQUEST or NO_FCP, check the URL loads publicly over https without a certificate warning. Use curl -sI with a Lighthouse user agent to see the status code. A 403 or challenge page means bot protection is blocking the test; relax the rule or test from DevTools instead. Re-run PageSpeed Insights and confirm the full report loads.

Step 8

Retest after each change

Make one change at a time, clear any server and CDN cache, then repeat the three to five lab runs and compare the median with your baseline. Keep changes that improve the failing metric and undo those that do not. Field data will follow over the next 28 days as new visits are collected. In Search Console, use Validate fix on the Core Web Vitals issue once the lab results are consistently good.

Edge cases worth knowing

Keeping your page speed checked

Questions and answers

1. How do I check my page speed?

Check page speed by entering the page URL at pagespeed.web.dev, Google's PageSpeed Insights, and reading the mobile results. The top section shows field data from real Chrome visitors, including the Core Web Vitals assessment, and the lower section shows a Lighthouse lab test with a performance score and diagnostics. For your whole site, open the Core Web Vitals report in Search Console. For testing changes or private pages, run Lighthouse from the DevTools panel in Chrome.

2. What is a good page speed score?

A Lighthouse performance score of 90 to 100 is rated good, 50 to 89 needs improvement and 0 to 49 is poor. The score is a lab measure and Google does not use it for ranking. What matters more is passing the Core Web Vitals assessment in field data: LCP of 2.5 seconds or less, INP of 200 milliseconds or less and CLS of 0.1 or less for at least three in four visits. A page can score 70 and still pass.

3. Why is PageSpeed Insights not working for my site?

PageSpeed Insights usually fails because it cannot load the page, most often because bot protection, a firewall or a security plugin blocks or challenges the automated test. Other causes are an expired SSL certificate, a server error, a redirect loop or a page that paints nothing until scripts run. The error code points to the cause. Check the URL with curl to see the status code, relax any challenge rule for testing, or run Lighthouse in DevTools from your own browser instead.

4. Why does my page speed score change every time?

Your page speed score changes because each lab run is a single test, affected by server load, caching, network conditions and third-party scripts that load differently each time. Variation of several points between runs is normal. Run the test three to five times and use the middle result, and compare medians before and after any change. Field data in PageSpeed Insights does not jump around in the same way, because it already summarises 28 days of real visits.

5. Why is my mobile page speed score lower than desktop?

Your mobile score is lower because the mobile lab test emulates a mid-range phone on a slow 4G connection with a slowed processor, while the desktop test uses a fast connection and a full-speed computer. The same page therefore takes much longer on the mobile test. This is deliberate, since many visitors use phones on imperfect connections. Focus on the mobile results, because Google uses the mobile experience and most small business traffic now comes from phones.

6. What is a good page load time?

A good page load time is when the main content appears within 2.5 seconds for at least three in four visitors, which is the good threshold for Largest Contentful Paint. There is no single official load time figure, because a page loads in stages: the server responds, content starts painting, the main content appears, and the page becomes responsive. Aim for a first byte under about 0.8 seconds, first content under 1.8 seconds and the main content under 2.5 seconds.

7. Why does PageSpeed Insights show no field data?

PageSpeed Insights shows no field data when the page, or the whole site, has not had enough Chrome visits in the past 28 days for the Chrome User Experience Report to publish figures. This is common for new pages, small sites and pages with little traffic. Try the Origin view for site-wide data, use the lab results to diagnose problems, and check the Core Web Vitals report in Search Console, which groups similar pages together and may have enough data for the template.

Check page speed across your templates

The page speed checker on aiwebpageseo.com tests your key pages on mobile and desktop, shows field and lab timings side by side, and points to the files slowing each template, so you know which fix to make first.

Open Page Speed Fixes โ†’
๐Ÿ’ฌ Got a problem?
Related Guides: All Page Speed Fixes  ·  How to fix page speed  ·  Core Web Vitals assessment failed  ·  Fixing a high TTFB  ·  Page speed guide  ·  Learning Hub

About aiwebpageseo

aiwebpageseo.com is a data-driven SEO and AEO (Answer Engine Optimisation) platform providing a free suite of technical SEO tools. Rather than relying on AI-theorised assumptions, the platform analyses live URL performance, delivering objective diagnostics, page speed metrics, CLS debugging, and site crawl data alongside actionable technical tutorials.