SEO check

Page Load Time: What It Is, What Is Good and How to Reduce It

Learn how page load time is measured, which numbers pass our check, and the fixes that cut seconds off a slow page.

Free to use 15 min read Updated Oct 2026

What is page load time? The quick answer

Quick answer: Page load time is how long a page takes to finish loading in the browser, counted in seconds from the start of navigation until the load event ends. Our report wants 3.00 seconds or less on one real headless Chrome visit.

  • Pass: 3.00 seconds or less from navigation start to the end of the load event.
  • Warning: Above 3.00 seconds and up to 5.00 seconds, shown with an amber icon.
  • Fail: Above 5.00 seconds, or no usable timing could be read.
  • Fix: Trim the server response, shrink images and scripts, and cache the files that repeat on every visit.

Check my site free

The number comes from a single lab visit, so it is a lab reading, not what every visitor experiences.

Page load time defined: what the clock starts and stops on

Page load time is the number of seconds between the browser starting to navigate to your page and the window load event finishing. Navigation starts when someone types the address or follows a link. The load event fires once the HTML, stylesheets, scripts, images and frames that the page asks for at load time have arrived and been processed.

The MDN page load time definition from MDN Web Docs frames it as the span that begins at navigation start and ends as the load event starts. It also warns that the figure is imperfect, because it varies with the device, the network and distance from the server. Our report stops the clock at loadEventEnd, a few milliseconds after the load event begins. The W3C Navigation Timing specification exposes that moment through the PerformanceNavigationTiming entry, so the value we show agrees with what you can read yourself from the browser Performance API.

What the clock misses matters as much as what it counts. Lazy loaded images far below the fold, timer driven scripts and widgets that appear after a click all arrive too late. You will also see it called website load time or page loading time. It is the same measurement, and we use page load time throughout.

Page load time vs page speed, TTFB, FCP and LCP

Load time is easy to confuse with the other speed numbers, because each one marks a different moment in the visit. The table puts them side by side with the mark that counts as good.

MetricWhat it marksGood markStatus
TTFBFirst byte of the HTML arrives0.8 seconds or lessweb.dev guidance
FCPFirst text or image is painted1.8 seconds or lessweb.dev guidance
LCPLargest visible element is painted2.5 seconds or lessCore Web Vital
INPPage responds to a tap or click200 ms or lessCore Web Vital
CLSLayout moves around during the visit0.1 or lessCore Web Vital
Page load timeEverything needed for the load event has finishedNo Google thresholdNot a Core Web Vital

Google assesses these marks at the 75th percentile of real visits, so a single lab reading, ours included, cannot pass or fail a Core Web Vital. It can only point at a problem worth chasing.

Page load time is not a Core Web Vital, and the two can disagree. A page can paint its main content in 1.5 seconds and still log a long load time because a chat widget finishes late. The reverse happens too: a client side framework can render the hero text after an API call, long after the load event has fired, so the load time looks fine while LCP is slow.

Page speed is the umbrella word for all of them: read what page speed means for SEO for the broad view, and use our Largest Contentful Paint test page for the paint metric.

Why page load time matters for visitors and SEO

Visitors judge a slow page quickly. When nothing seems to happen they tap back or open another result, and a phone on a weak mobile connection makes every extra megabyte feel worse.

For search, be precise about what Google says. Google Search Central publishes Google page experience guidance, which states that page experience is not a single ranking signal and that relevance still comes first. Its ranking systems do favor content with good page experience, and Core Web Vitals are part of that picture. Our Core Web Vitals guide covers those metrics in detail.

The indirect effects are worth treating as expectations, not published rules. Google has said that a site which answers quickly can be crawled more heavily than one that struggles. Visitors who never have to wait are also more likely to keep reading, sign up or buy. Bounce rate in your analytics is a useful sign of that cost, though nothing Google publishes says it moves rankings.

How SEO Site Checker measures your page load time

Our audit opens your URL in a real headless Chromium browser, waits up to 20 seconds for the load event, and reads the timing the browser recorded.

The exact rule: page load time equals loadEventEnd minus the start of navigation, in seconds, rounded to two decimals. Up to 3.00 passes, above 3.00 and up to 5.00 is a warning, and above 5.00 fails.

This is a lab test of one cold visit from our server, so expect it to differ from what your visitors see. Run it yourself with the free SEO score checker.

What the browser measures

The load event waits for stylesheets, scripts written into the page (async ones included), images and iframes, and for anything those scripts add before it fires. Timers, fetch calls made after load and clicks do not hold it back. In our window of about 1280 by 720 pixels, a lazy image near the top is fetched early and counts, while images far down the page usually wait for scrolling and stay out.

Pass, warning and fail ranges

Only a pass adds to your score, because the score is passed checks divided by total checks, so an amber warning and a red fail both leave the point unearned. A 6 second result points at something structural, such as a slow server or a heavy script bundle, so read the waterfall before polishing small things.

Mobile devices, slow networks, warm cache visits and real user data are not tested, so a pass here says nothing about them.

What you see in the report

The row shows an icon, the time followed by Seconds, a short message, and a How to Fix button on a warning or a fail. The button opens the same steps you will find further down this page.

One wrinkle: the message text compares your time with a fixed 2.5 second reference, while the icon follows the 3 and 5 second rules. A result between 2.51 and 3.00 seconds therefore shows a green tick beside a message calling the page slower than that reference, and the tick is the verdict.

Two situations stop us from timing your real page. If the page does not finish loading within 20 seconds, the audit returns an error such as Unable to fetch page instead of a number. That can mean the page is too slow, or that our server could not reach it because of a DNS problem, a firewall rule or a country block. Open the URL in a private window to rule out an outage, check firewall and bot rules for blocks on data center addresses, and look in the Network panel for a request that never completes.

If a bot protection screen answers in place of your page, we time that screen and show a banner saying so. Allow the checker's requests in your firewall or CDN rules, or test again with the protection relaxed for a few minutes, otherwise the number describes the challenge page and not your site.

What is a good page load time?

There is no single ideal page load time, so treat these ranges as working guidelines, not Google thresholds.

Load timeVerdictWhat to do
Under about 2 secondsExcellentProtect it as you add scripts
Up to 3 secondsGood, passes our checkKeep an eye on it after each release
3 to 5 secondsWorth improvingWork through the fixes below
Above 5 secondsNeeds workStart with the server and the images

Google sets its good marks per metric, at the 75th percentile of real visits. LCP of 2.5 seconds, INP of 200 ms and CLS of 0.1 are the three Core Web Vitals, and the official Core Web Vitals thresholds are on web.dev. The marks for FCP (1.8 seconds) and TTFB (0.8 seconds) come from separate web.dev guidance on those metrics. They are not Core Web Vitals, and the linked page does not state them.

Context changes what is acceptable. A heavy web app, a media site and a five page brochure site have different budgets, and a visitor on a congested mobile network needs a lighter page than someone on fiber. Average load times in statistics articles vary by source, device and year, so treat them as background and aim to cut a measurable chunk from your own time.

How to check page load time

You can read the number four ways, from no effort to very precise. Use more than one, because each tells you something different.

  1. Run the free report. Enter your address in our page load time checker and read the Page Load Time row.
  2. Use the Chrome DevTools Network panel. Open DevTools, switch to Network, tick Disable cache, reload the page and read the summary bar at the bottom, then study the waterfall chart for the slowest requests. DOMContentLoaded shows when the HTML was parsed, without waiting for images, and Load shows when the load event fired. Pick a profile such as Fast 4G or Slow 4G in the throttling dropdown to see how a slower connection changes the Load figure.
  3. Read it from the console. Once the page has fully loaded, paste the snippet below into the Console. It reads the navigation entry and divides by 1000 to give seconds. If you run it before the load event has finished, you get 0.
  4. Combine lab and field data. Run Lighthouse in DevTools or open PageSpeed Insights. Both work as a website speed test with lab data, and PageSpeed Insights also shows Chrome UX Report field data when your site has enough traffic, but that data covers only Chrome users over a rolling 28 day window, so it does not replace your own monitoring. Trust field data for how people really fare, and lab data to find causes.
JavaScript
const nav = performance.getEntriesByType('navigation')[0];
console.log(((nav.loadEventEnd - nav.startTime) / 1000).toFixed(2) + ' seconds');

The snippet uses the same two values our report does. Test three times and note the median, on mobile and on desktop, for the home page, a typical product or article, and your slowest template.

Why your page load time changes between tests

Two tools rarely agree, and two runs of one tool can differ. Picture one run from a data center that reads 2.4 seconds, and a second run a minute later that reads 3.6 because an ad call answered slowly and the consent banner script finished last.

Rule of thumb: compare like with like. Use the same tool and settings, run several tests, and judge the trend, not one reading.

  • Location and connection. A data center on fast fiber loads a page quicker than a phone on 4G.
  • Cache state. Repeat visits reuse stored files, so a cold lab run often reads slower than what many real visitors get.
  • Server and third parties. Shared hosting load, ad calls, consent banners and chat widgets finish at different times from one minute to the next.
  • What gets timed. A bot protection screen can be the thing that loads, and logged in pages differ from the public one.

How to reduce page load time: fixes in order of impact

Most slow pages share a handful of causes: a slow server, unoptimized images, large JavaScript bundles, too many HTTP requests, long redirect chains, heavy web fonts and uncached files. Open the Network waterfall, sort by size and by time, and fix the largest or slowest items first.

Speed up the server response

Turn on page caching, run a current PHP version if your site uses PHP, trim slow database queries and host close to your visitors. A TTFB under 0.8 seconds is the web.dev good mark, and a late first byte delays everything after it. Our article on how hosting speed affects rankings explains the trade offs. Cut redirect chains too, so links point straight at the final URL, since each hop adds a round trip.

Shrink and modernise images

Resize each image to its displayed size, compress it, serve WebP or AVIF where you can, and always set width and height. The free Image Compressor can shrink your images and convert them to WebP or AVIF, and it needs no account.

HTML
<img src="/images/team.webp" alt="Our team at the studio" width="800" height="450">

Minify, defer and remove scripts

Minify CSS and JavaScript, defer anything that is not needed for the first view, and delete plugins and tags nobody uses. Audit third party scripts one at a time, since one tag manager can pull in a dozen more files. The CSS Minifier is a quick way to shrink a stylesheet.

HTML
<script src="/js/app.min.js" defer></script>

Clear render blocking files

Inline the small amount of CSS the top of the page needs and load the rest later. Preload your key font and add font-display: swap to its @font-face rule so text shows while the font downloads. The preload tag needs crossorigin even for a font on your own domain, otherwise the browser fetches the file twice. The render blocking resources page goes deeper on blocking CSS and JavaScript.

HTML
<link rel="preload" href="/fonts/body.woff2" as="font" type="font/woff2" crossorigin>

Cache files and use a CDN

Browser caching lets repeat visitors reuse files. Add gzip compression or Brotli for text files, and put static files behind a CDN such as Cloudflare, which also serves them over HTTP/2. Our CDN usage test shows whether your site already uses one.

Give a file a one year lifetime only if its name changes with its content, such as app.3f9c1.css. For those, send Cache-Control: public, max-age=31536000, immutable from your build or CDN. Stable names like /images/team.webp need a shorter lifetime, so the Apache sample below uses one month for images and one week for CSS and JavaScript. Expiry only applies to the MIME types you list, and the JavaScript type depends on your server's mime.types file: older setups send application/javascript and current ones text/javascript, so the sample lists both.

Text
<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/css text/javascript application/javascript
</IfModule>
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/webp "access plus 1 month"
  ExpiresByType image/avif "access plus 1 month"
  ExpiresByType image/jpeg "access plus 1 month"
  ExpiresByType image/png "access plus 1 month"
  ExpiresByType image/svg+xml "access plus 1 month"
  ExpiresByType text/css "access plus 1 week"
  ExpiresByType text/javascript "access plus 1 week"
  ExpiresByType application/javascript "access plus 1 week"
</IfModule>

If your server runs Nginx instead of Apache, a comparable setup is below. It turns on gzip, gives images 30 days and CSS and JavaScript seven. Put the gzip lines in the http or server block of your config, keep the location blocks inside the server block, and reload with nginx -s reload. Brotli needs a module on either server, so most people get it from their host or CDN.

Text
gzip on;
gzip_types text/css text/javascript application/javascript image/svg+xml;
location ~* \.(avif|webp|jpe?g|png|svg)$ {
  expires 30d;
}
location ~* \.(css|js)$ {
  expires 7d;
}

Lazy load below the fold

Add loading="lazy" to images and iframes that start offscreen, but never to the main image at the top, as in <img src="/images/map.webp" alt="Office map" width="600" height="400" loading="lazy">. Total page weight drives load time, so see our guide to web page size for what a sensible budget looks like.

Retest and keep a budget

Measure after each change, not after five, so you know which fix paid off. Ticking Disable cache shows the cold load our report sees.

Rerun the report and the DevTools check each time, compare with your first reading, and write down a target time and a maximum page weight so tuning becomes a habit.

Reducing page load time on WordPress, Shopify and other platforms

The table lists the highest impact changes for common platforms.

PlatformHighest impact changesWhere to make them
WordPressPage caching plugin, image optimization plugin, current PHP versionTools, Site Health shows the recommended PHP version, and you switch it in the host panel
ShopifyRemove unused apps and their leftover code, compress product images, limit font familiesOnline Store, Themes, Edit code, then search theme.liquid for snippets from apps you uninstalled
Wix and SquarespaceFewer apps, smaller media files, lighter animations and embedded videosSite Speed in the Wix dashboard, and embedded video blocks in Squarespace
Plain HTML on Apache or NginxCompression, cache headers, modern image formats, a CDNServer configuration files

Page load time checklist and performance budget

Copy this list into a ticket or release checklist and tick it off after each deploy, so a slow build is caught before visitors see it.

  • Fast first byte. The server answers in under 0.8 seconds with a page cache on.
  • Light images. Every image is resized, compressed, in a modern format and has width and height set.
  • Lean scripts. CSS and JavaScript are minified, non critical scripts are deferred and unused plugins are gone.
  • Cached files. Static files have long cache lifetimes and go out compressed or through a CDN.
  • A written budget. A target load time and a maximum page weight are checked after every release.

How to Fix

The short version, the same steps you see when you click How to Fix in your report.

Why this fails: The page took longer than 3 seconds to finish loading in our test browser, counted from navigation start to the end of the load event on one cold desktop visit. Up to 3.00 passes, 3.01 to 5.00 warns and above 5.00 fails.

How to fix it:

  1. Open the Chrome DevTools Network panel, reload and sort by size and time to find the biggest delay.
  2. Compress and resize images, use WebP or AVIF, and add width and height.
  3. Minify CSS and JavaScript, defer scripts that are not needed for the first view, and remove unused plugins and tags.
  4. Turn on page caching and gzip or Brotli compression.
  5. Set cache lifetimes on static files and serve them through a CDN: a month for images and a week for CSS and JavaScript.
  6. Lazy load images below the fold, but not the main image at the top.
HTML
<img src="/img/team.webp" alt="Team" width="800" height="450" loading="lazy">
<script src="/js/app.min.js" defer></script>

Use the Apache block in .htaccess, or the Nginx block in your server config:

Text
<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/css text/javascript application/javascript
</IfModule>
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/webp "access plus 1 month"
  ExpiresByType image/jpeg "access plus 1 month"
  ExpiresByType image/png "access plus 1 month"
  ExpiresByType text/css "access plus 1 week"
  ExpiresByType text/javascript "access plus 1 week"
  ExpiresByType application/javascript "access plus 1 week"
</IfModule>
Text
gzip on;
gzip_types text/css text/javascript application/javascript;
location ~* \.(webp|jpe?g|png)$ { expires 30d; }
location ~* \.(css|js)$ { expires 7d; }

Platform shortcuts:

  • WordPress: add a caching plugin and an image optimization plugin.
  • Shopify: remove unused apps and compress theme and product images.
  • Wix: cut apps and heavy media.

Re-test: Open DevTools, tick Disable cache in the Network panel, reload the page, wait for it to finish, then run const n = performance.getEntriesByType('navigation')[0]; console.log((n.loadEventEnd - n.startTime) / 1000) in the Console. Confirm the result is 3 or lower. Your connection can differ from our test browser, so run the report again with the free SEO check and look for the green tick.

Re-test my website

Frequently Asked Questions

What is page load time?
It is the time from the start of navigation until the browser finishes the load event, counted in seconds. It covers the HTML and every file the page needs at load, such as images, stylesheets and scripts. Content added later by scripts, lazy loading or a user interaction is not part of the number.
What is a good page load time?
As a working guide, 3 seconds or less passes our check and under 2 seconds is excellent. Google sets its good marks per metric, for example 2.5 seconds for LCP, so judge the load event against your own type of site and device instead of chasing one universal number.
What is the average page load time?
There is no single average worth trusting, because published figures vary with the source, the year, the device and the industry, and mobile pages usually load slower than desktop ones. Use any average as background and set your target from your own pages.
Does page load time affect SEO?
In part. Load time itself is not a named ranking signal, but Google says its ranking systems use Core Web Vitals and favor content with good page experience, while relevance still comes first. Slow pages also lose visitors before they read a word, so speed is worth fixing even where it does not move rankings.
How do I check page load time?
Run a free SEO report and read the Page Load Time row, or open Chrome DevTools, go to the Network panel, tick Disable cache, reload and read the Load time in the bar at the bottom. Lighthouse and PageSpeed Insights add lab data and, when your site has enough traffic, real user data.
How can I reduce page load time?
Find the biggest delay in the waterfall first, then fix in order of impact. Speed up the server, compress and resize images, minify and defer scripts, clear render blocking files, cache static files and use a CDN, and lazy load images below the fold.
What is the difference between page load time and response time?
Response time, usually measured as TTFB, is how long it takes for the first byte of the HTML to arrive, which includes redirects and connection setup as well as the server's own processing. Page load time includes that wait plus downloading and processing every resource until the load event ends, so a slow response is only one possible part of a slow load.
Why does my page load time change from test to test?
Tests differ in location, device, connection, cache state and server load, and third party scripts finish at different times. Even the same tool gives slightly different numbers on each run. Compare like with like, run several tests and look at the median instead of a single reading.

See how your site scores right now

Paste your address into the free report, then use the How to Fix button on anything that needs work.

Free to use. Results in under a minute for most sites.