How we test and grade website speed

Global Website Speed Test loads your page in a real headless browser from 8 AWS regions at the same time, records the full connection timeline twice (cold and warm cache), and turns the results into an A+ to F grade. This page documents exactly how.

How a test runs

  1. You submit a public URL. The site checks it (HTTP/HTTPS only, no private or local addresses) and opens a test session.
  2. Your browser asks all 8 regional probe servers to start at the same time. Each probe runs in an AWS data center and uses its own network path to your server.
  3. Each probe launches headless Chromium (driven by Playwright) with a fresh profile and loads the page until the load event — the first visit, with an empty cache. It records the browser's Navigation Timing and Resource Timing entries.
  4. It then launches the browser again on the same profile and loads the page a second time — the repeat visit. The HTTP cache is warm, but DNS lookups and connections start fresh, just like a returning visitor opening your site the next day.
  5. Results are stored on our server as each region returns, and the grade is calculated on the server from those stored numbers — never from values sent by a browser. A page that does not reach its load event within 45 seconds, or a region that does not answer within 120 seconds, is marked as failed.

Test regions

RegionAWS regionRepresents
Seoulap-northeast-2South Korea, East Asia
Tokyoap-northeast-1Japan, East Asia
Singaporeap-southeast-1Southeast Asia, India
Sydneyap-southeast-2Australia, Oceania
Virginiaus-east-1US East, Latin America
Oregonus-west-2US West, Canada
Frankfurteu-central-1Central and Eastern Europe
Londoneu-west-2UK, Western Europe

What each metric means

MetricDefinition
DNSTime to resolve the domain name to an IP address (domainLookupEnd − domainLookupStart).
TCPTime to open the TCP connection. In the timeline we show the TCP handshake and the TLS handshake as separate segments.
TLSTime for the HTTPS handshake (connectEnd − secureConnectionStart): one round trip with TLS 1.3, two with TLS 1.2.
TTFBTime to first byte, measured from sending the HTML request to receiving the first byte of the response (responseStart − requestStart). It is reported separately from DNS, TCP and TLS, so it reflects how long your server or CDN needs to produce the page, plus one network round trip.
Load timeTime from the start of navigation to the end of the browser's load event (loadEventEnd): DNS, connection, HTML and every CSS, JavaScript, image and font file the page references.
TransferSum of the transferSize of the page's resources (excluding the HTML document itself). On a repeat visit, files served from the browser cache count as zero.
FilesNumber of resources (requests) the page loaded, excluding the HTML document.

From the 8 results we derive:

  • Origin — the region with the lowest TTFB, usually the one nearest your server. Its TTFB and load time are the "origin" values.
  • Average — the mean TTFB and load time across all regions that succeeded.
  • Worst — the highest TTFB and load time among the regions that succeeded.
  • Repeat-visit improvement — the share of regions where the repeat visit loaded faster than the first.

Letter grade (A+ to F)

A site receives the highest grade whose limits it meets in every column. Missing any D limit results in an F.

GradeOrigin TTFBOrigin loadAvg TTFBAvg loadWorst TTFBWorst loadRepeat faster
A+≤ 200 ms≤ 1.5 s≤ 800 ms≤ 2.5 s≤ 1.5 s≤ 3 s≥ 80%
A≤ 400 ms≤ 2.5 s≤ 1.2 s≤ 3.5 s≤ 2 s≤ 4 s≥ 60%
B≤ 800 ms≤ 3.5 s≤ 1.6 s≤ 4.5 s≤ 2.5 s≤ 5.5 s≥ 50%
C≤ 1.2 s≤ 4.5 s≤ 2 s≤ 5.5 s≤ 3 s≤ 6.5 s≥ 37.5%
D≤ 1.6 s≤ 6 s≤ 2.5 s≤ 7 s≤ 3.5 s≤ 8.5 s≥ 25%

Numeric score (0–100)

The score lets two sites with the same letter be compared. Each input is scaled linearly between a "full marks" and a "zero" value, weighted, and the total is then clamped to the band of the letter grade (A+ 90–100, A 80–89, B 70–79, C 60–69, D 50–59, F 0–49), so the number never contradicts the letter.

InputWeightFull marks atZero at
Average load time35%≤ 1.0 s≥ 7.0 s
Average TTFB25%≤ 200 ms≥ 2.5 s
Worst-region load time20%≤ 2.0 s≥ 8.5 s
Origin TTFB10%≤ 100 ms≥ 1.6 s
Repeat-visit improvement10%100% of regions0%

Leaderboard rules

The leaderboard is opt-in: a site is listed only when the person running the test ticks the leaderboard box or presses "Add to leaderboard" within 24 hours of the test. To stop empty or placeholder pages from topping the ranking, a test must also show a real, finished website:

  • at least 10 files loaded on the first visit (median across regions),
  • at least 100 KB transferred on the first visit (median across regions),
  • at least 6 of the 8 regions loaded the page successfully.

Sites are ranked by score, then by average load time, and the top 200 are shown. The leaderboard is monthly: it starts empty on the 1st of every month at 00:00 UTC, a test counts toward the month it was run in, and within a month each site (hostname, ignoring www.) keeps only its most recent qualifying test. Past months stay readable as a final-ranking archive at /leaderboard/YYYY-MM.

Daily statistics

The homepage shows today's totals in UTC: the number of distinct sites tested, tests completed, the average of each test's 8-region average load time, and the fastest and slowest test averages. Statistics include every completed test, but individual URLs are only ever shown publicly when the tester opted in to the leaderboard.

Limitations

  • Lab data, not field data. Probes run on fast data-center networks without CPU or bandwidth throttling. Real visitors on mobile networks will usually see slower times; use field data such as the Chrome UX Report for Core Web Vitals.
  • Run-to-run variation. Network routes and server load change constantly. Differences of 10–20% between runs are normal; re-test before drawing conclusions.
  • Bot protection. Firewalls, CAPTCHAs or geo-blocking can stop some regions from loading the page. These regions are shown as failed.
  • Cross-origin sizes. Browsers may report zero bytes for third-party files that do not send a Timing-Allow-Origin header, so transfer sizes can be lower than the true page weight.

Data we keep

For each test we store the URL, the per-region measurements and a salted hash of the requester's IP address (used only for rate limiting: 20 tests per IP per hour). See the privacy policy for details.