How does the test work?
Your browser talks straight to Cloudflare's speed test servers (the ones behind speed.cloudflare.com), at the Cloudflare data center nearest to your network. Nothing goes through this site.
First 16 empty requests measure the ping and jitter. Then the download: several requests in flight at once, every byte counted as it arrives, for 5 to 10 seconds; the speed is the average after the first 30% (when the connection has ramped up), and the test stops early once the speed has settled. The upload works the same way the other direction. During both, a small request every 0.4 s measures the ping while the line is full.
Why is it lower than my plan, or than other speed tests?
Wi-Fi is the usual reason: test over a cable, close to the router, with other devices idle, to see what the line itself does.
The browser reaches the test server over a single HTTP/2 or HTTP/3 connection (several requests share it), while Ookla's app opens many separate connections. On a short path to a nearby data center the two agree; the farther away the server, the more one connection loses. Ookla also often tests to a server inside your ISP's own network, which looks better than any route that leaves it.
In mainland China, Cloudflare's data centers are abroad, so this measures your international bandwidth, often far below the plan's speed.
What is ping under load (bufferbloat)?
When the line is full, routers and modems queue packets in big buffers. Everything waiting behind a download, a game's packets or a call's audio, gets delayed: that's bufferbloat.
The test measures the ping during the download and the upload. A rise of up to 30 ms is fine; over 100 ms you'll feel it in calls and games whenever someone uploads photos or a backup runs. Smart queue management (SQM: fq_codel or CAKE) in the router fixes most of it, at the cost of a little top speed.
I use a proxy or VPN: whose speed is this?
The proxy's. With a proxy or VPN on, the browser reaches the test server through it, so the numbers are your line to the proxy node, the node's own bandwidth and its route to Cloudflare. That's handy for comparing nodes.
To test your own line, add the direct rules (button next to the progress bar): only speed.cloudflare.com goes direct, nothing else changes. Clash/Mihomo, Surge, Shadowrocket, Quantumult X, Loon, sing-box and Xray are supported, most of them by a rule set that stays up to date. The exit shown under the heading (city, network, IP) tells you which way the test went, and the page warns when it looks like a proxy.
How much data does a test use?
Each direction runs for 5 seconds if the speed settles, at most 10, so a test moves 5 to 10 seconds of your top speed each way: on a 100 Mbps line about 100 to 250 MB in all, on 1 Gbps 1 to 2.5 GB. The page shows how much the test used. On a metered or mobile plan, test sparingly.
Why doesn't it start on its own?
Because a speed test uses a lot of data, the page waits for you to press Start. If you test often, turn on "Test when the page opens" next to the progress bar; the choice is remembered in this browser.
Do you collect my data?
No. The test runs between your browser and Cloudflare's servers; this site never sees the results. Cloudflare sees your IP address, as with any website. The share link and image are made in your browser and carry only the numbers. The code is open source on GitHub.