Three Numbers That Predict WordPress Speed
You can spend a year tuning a WordPress site. Or you can look at three numbers, fix what they point at, and walk away. Most sites that feel slow are slow for a small set of repeating reasons, and most of those reasons show up in three measurements: time to first byte, the size of the homepage HTML, and the count of blocking requests before the first paint.
This is not a claim that nothing else matters. Images, fonts, hosting and caching all play a part. It is a claim about where to look first. If these three numbers are healthy, most other optimization work becomes optional. If one of them is bad, no amount of work elsewhere will hide it.
Why three numbers, and why these three
A page load is a chain. The browser asks the server for the page, waits for the first byte, downloads the HTML, discovers what else it needs, downloads and runs the blocking pieces, and only then paints. Each of the three numbers belongs to one link in that chain: the wait on the server, the weight of the document itself, and the work the browser must finish before it can show anything.
They also share a useful property: all three are cheap to measure, they are stable enough to compare from one month to the next, and each one has a short list of usual causes. That makes them a diagnostic, not a dashboard. You are not trying to collect more metrics; you are trying to find the one link in the chain that is broken.
Number one: time to first byte
Time to first byte (TTFB) is how long the browser waits between asking for the page and receiving the first piece of the response. Until that byte arrives, nothing else can happen: the browser cannot parse, the CDN cannot hand out assets, and the visitor looks at a blank tab. web.dev gives a rough guide that most sites should strive for a TTFB of 0.8 seconds or less, and it also explains why TTFB is not itself a Core Web Vital but feeds into the ones that are.
You can read your TTFB from PageSpeed Insights, from the network panel of your browser's developer tools, or from a command line request. Measure a page that is not served from a page cache as well as one that is, because the uncached number is what a first visitor, a logged-in user or a shopper at checkout will actually experience.
On WordPress, a slow TTFB almost always comes from one of three places:
- A slow database query hiding in a plugin. A search box, a related-posts widget or a custom field lookup can run an expensive query on every request. The free Query Monitor plugin shows queries per request and highlights the slow ones, which turns guessing into reading.
- An external call during page generation. If the page waits for a license check, a social counter or a remote feed before it can render, your server is only as fast as that third party on its worst day.
- An underpowered or overloaded host. When the same page is slow at every hour and every plugin has been ruled out, the machine itself may be the bottleneck.
The fix is rarely to "optimize WordPress". It is to find the slow query or the slow call, remove the plugin that causes it or replace it with something simpler, and measure again. Once TTFB sits comfortably within the guidance above, you can safely ignore a large share of the performance advice you will read online, because the platform itself is not what is holding you back.
Number two: homepage HTML size
The second number is the size of the HTML document itself, before any image, script or stylesheet. People forget to look at it because they assume the HTML is small. On long-lived WordPress sites it often is not. A page builder, a theme that renders every block even when it is hidden, a plugin that prints its whole interface into the page, or a pile of tracking snippets that somebody added for a campaign long ago can all inflate the document well beyond what the content needs.
Checking is easy. Open the homepage in a private window, choose "view source" and scroll. Then compare it with a short inner page on the same site. If the homepage is many times larger than a page with similar content, something is injecting markup. Look for large inline blocks of JSON, repeated hidden menus, inline styles pasted by a builder, and snippets from tools you no longer use.
There is no single magic threshold, so resist the urge to chase one. Track your own number instead. The useful question is "what is in this document that the visitor never sees?" and the answer is almost always found by removal, not by adding another optimization layer. Deleting a forgotten tracking snippet or switching off a feature that outputs a hidden widget costs nothing and makes the page smaller for every visitor.
Number three: blocking requests
A blocking request is anything the browser must download and run before it can paint the page: scripts loaded in the head without defer or async, stylesheets that must be processed before rendering, and third-party scripts loaded synchronously. Each one holds up the first paint, and they stack, because the browser may need to fetch one before it can discover the next.
The idea behind the cleanest sites is simple: defer what you can, load asynchronously what you must, and remove what you no longer need. The browser's developer tools can help in two ways. The network panel shows what loaded before the first paint, and the Coverage tab shows how much of each script and stylesheet was actually used on the page. A file that is mostly unused on the homepage is a candidate for loading only where it is needed.
Third-party scripts deserve special attention, because you do not control them and they tend to accumulate. A cookie banner added for one specific campaign, a chat widget nobody staffs, a heatmap tool from a redesign long finished, and two analytics products measuring the same visits can all still be loading on every page. Audit them once, ask who looks at the data each one produces, and remove the ones nobody can answer for.
An illustrative example
To see how the three numbers work together, imagine a blog that has run for years and now feels slow, with a homepage that takes several seconds to appear. The numbers here are deliberately left out, because this is a made-up scenario meant to show the order of work, not a measured case.
- Start with TTFB. Query Monitor shows that a search plugin runs an unindexed database query on every page render, even on pages without a search box. The plugin was popular when it was installed and has not been updated for a long time. Replace it with a simpler search and the wait for the first byte drops sharply.
- Then the document size. View source shows markup from several tracking snippets that belonged to campaigns which ended long ago. Remove them and the homepage HTML shrinks to a fraction of its former size.
- Finally the blocking requests. The homepage carries a carousel script and an animation library that run before the first paint. Defer the carousel, drop the animation library, and the page paints much earlier.
Notice what is missing from that list: no new caching plugin, no CDN reconfiguration and no theme rewrite. Each step was a subtraction.
Why not just add a caching plugin?
A page cache is valuable, and you should use one. But a cache hides a slow origin rather than curing it. The first visitor after the cache is cleared still waits for the slow page to be built. Logged-in users, shoppers with items in a cart and anyone who triggers a request that cannot be cached still pay the full price. If TTFB is poor, a cache turns a constant problem into an intermittent one, which makes it harder to notice and no less real. Fix the number, then cache on top of a healthy origin.
Measuring all three in ten minutes
- Run the homepage through PageSpeed Insights and note the server response time it reports.
- Repeat with one short inner page and one popular article.
- Open the homepage's view-source and compare its size with the inner page.
- In the network panel, filter by scripts and stylesheets and list everything that loaded before the first paint.
- Write the three numbers down with the date. Next quarter you will compare against them.
The discipline
Once a quarter, repeat that routine on your homepage and your three most visited articles. Look at the server response time, the document size and the number of blocking resources, and compare with last quarter. If a number got worse, find out what changed: a new plugin, a new script, a theme update. If it got better, write down what you did so you can repeat it.
Most performance problems on long-lived WordPress sites are accumulation problems: one tracking snippet, one heavy plugin, one extra stylesheet at a time. The cure has the same shape as the cause, and it is subtraction. Fix the three numbers, keep them honest every quarter, and you will rarely need to talk about WordPress performance at all.
Photo: https://kaboompics.com/ on Pexels