A meaningful WordPress benchmark doesn't just measure a speed score: it distinguishes between the loading experience in the browser and the site's responsiveness under load. For a fair comparison of hosting providers, you need a consistent website configuration, documented cache settings, and a fixed testing plan. The result applies to the tested configuration and the measurement period. It does not automatically show which provider is the fastest for each website. Repeated runs, accurate results, and transparently reported errors make the results verifiable.
What a WordPress Benchmark Tells You
A WordPress Benchmark It starts with a specific question: Does a particular page load quickly under specified conditions? To do this, a browser loads HTML, images, scripts, and other resources and renders the page. The result reflects the interaction of these components, not just the speed of the hosting server.
A second question concerns the Response Behavior Under Load: How do response times and errors change when requests matching a specific profile are received? A single page view does not answer this question. Conversely, an HTTP load test does not immediately show how quickly a browser renders the entire page.
For a public blog post, a page cache can deliver pre-rendered HTML; a CDN can serve resources or responses closer to the measurement location. At the same time, themes, plugins, images, and external scripts all affect the result. The article explains what other factors can slow down a page: Hidden Performance Killers in WordPress.
Two comparative questions can help assess the impact of hosting. When it comes to Stack Comparison You should configure the website and settings as much as possible and document any remaining differences. When comparing packages, review the available configurations, including their respective caches and services. This provides a practical basis for a purchasing decision, but it does not isolate pure server performance.
Therefore, make a note of which page, which plan, and which environment are associated with each result. A benefit for the blog post being tested may differ when viewed from a logged-in account. The measurement applies to the documented conditions and time period; it does not constitute a general “test winner” nor a performance guarantee.
Understanding Browser Measurement and Field Data
A WordPress speed test using Lighthouse provides a Laboratory image of the page under specific measurement conditions. The browser profile, device or emulation, network profile, measurement location, and tool version should therefore be included in the log. This is the only way to determine later whether two runs are actually comparable.
The Lighthouse Performance Score is a weighted average of several metrics. It can fluctuate due to changes in content and testing conditions, and it obscures which individual metrics have changed. Repeat the test using the same profile and document the individual values for all runs, rather than just selecting the best score.
One of the key metrics is LCP: It describes when the largest relevant content element is visibly loaded. CLS measures unexpected layout shifts during use. INP describes responsiveness to interactions; it requires interactions that have actually been recorded and is not determined solely by a simple page load.
The Chrome UX Report, or CrUX for short, provides any available Field data from visits by participating real users. These experiences depend, among other things, on their devices and networks. They are not available for every page and address a different question than a lab test conducted under controlled conditions.
For each metric, indicate whether it comes from the lab or the field. For example, a simple HTTP request can capture status and response time, but it does not automatically simulate a browser’s rendering and interactions. Therefore, LCP, CLS, and INP cannot be interpreted as a browser experience based on such a request.
Distinguishing Between Cache Levels Correctly
A Page Cache can store pre-rendered HTML for repeated requests. An object cache, on the other hand, stores application data that WordPress needs during processing. In addition, the browser can reuse resources that have already been loaded locally; a CDN can cache content at an additional level outside the original server.
With a warm page cache, you repeatedly access a public page after a documented warm-up period. This is relevant for frequently visited content, but says little about how expensive it is to generate that content dynamically. Keep track of which URLs have been warmed up and which cache rules and CDN settings were in effect.
For an uncached request, you must use the Cache bypass Verify it thoroughly instead of just accepting it. A registered session may follow different rules and deliver personalized content. Check the actual response: A fast response is of little value if it delivers incorrect or outdated content.
A first visit in a new browser state does not necessarily indicate a cold server or CDN cache. Similarly, a CDN miss does not automatically mean that the application cache has been cleared. Cache headers can provide clues, but depending on the provider, they may not confirm the status of every level involved; therefore, be sure to document the available settings and verification methods as well.
Without a suitable persistent extension, the WordPress object cache is generally limited to the current request. The constant WP_CACHE On its own, it does not activate either Redis or an automated caching solution. The article on explains the role that Redis and Memcached can play as persistent object caches: Redis and Memcached in WordPress Hosting.
Prepare for Comparison and Approval
To compare hosting providers, you'll first need a comparable website status. Create a cleaned-up copy with the same content, the same database, theme, and plugins, including their versions. Remove or replace personal data and production login credentials in such a way that the test site still reflects the desired use case.
Use the same PHP and database versions, as well as relevant settings, whenever possible. Make a note of any differences that cannot be eliminated or that are part of the purchased package. A comparison of the respective standard packages answers a different question than a comparison of stacks that are as closely aligned as possible: The result cannot be readily attributed solely to server performance.
Before the first run, document a measurement plan. It must be specific enough that another person can understand the setup and identify any deviations if the process is repeated. The following checklist distinguishes between the characteristics of the hosting service, the website, and the measurement process.
- Pricing plans, resource limits, server locations, and software versions for both environments.
- Test URLs and page types, login status, cookies, and test accounts used.
- CDN, page cache, and object cache, including rules, warm-up phase, and scheduled bypass.
- Measurement location, tool version, browser and device profile, network conditions, times, and repetitions.
- Load profile, responsibilities, agreed-upon test window, and specific termination thresholds.
For load tests, you'll need to set up the Release Consult with all responsible parties and, if applicable, the hosting provider before generating traffic. Clarify who to contact, resource limits, and the procedure for handling disruptions. Exclude third-party services without their consent; in particular, prevent actual payments, orders, and notifications. Check in advance whether the test copy actually prevents such transactions.
Metrics Framework for Typical Pages
Choose the tool based on the question, not on the best possible individual value. A Measurement Concept assigns a page type and a cache state to each row. The table shows which results can be obtained using the respective approaches and where their applicability ends.
| Question and Page Type | Tool | cache status | Measured variable | Detection Limit |
|---|---|---|---|---|
| How does a public blog post load? | Lighthouse in the browser | Document Warm-Up and Cache Rules | Lab Metrics and Performance Score | Measurement under specified laboratory conditions |
| How do published pages respond to load? | HTTP Load Test | Measure the warm or verified bypass separately | Response Times, Rates, and Errors | No rendering or user experience in the browser |
| How do real users experience a website? | CrUX field data, if available | Real-world conditions that are not individually controlled | Aggregated Experience Metrics | Based on actual visits and the available data |
For a public blog post, measure the same representative URL multiple times using a fixed browser and network profile. Note whether the CDN and page cache are enabled and how the page was preloaded before the runs. This allows you to evaluate the loading experience of this public page—not necessarily that of a logged-in session.
A dynamic search or account view is assigned its own test suite with shared test data and, if necessary, a test account. Don't just check the status code: The response must match the search query or the logged-in account and be up to date. Also verify whether a scheduled Cache bypass actually works; a cookie alone does not prove that.
If the response times vary, that does not necessarily mean the cause has been identified. Application logic, database accesses, a persistent object cache, and the hosting environment can all contribute to the result. Document the differences in the structure and then investigate them systematically, rather than treating a single slow query as proof of a specific bottleneck.
Gradually Increase Load During Testing
Start with a few individual requests on an explicitly approved test page. Check the status and content, and make sure there are no unintended side effects. Only then should you proceed to a separately coordinated load test, such as for approved product views in a store. Real orders, payments, and notifications are not permitted.
Plan a gradual load including the starting level, duration, and increments. Agree in advance on measurable termination thresholds for errors, response times, or other available performance metrics, as well as a point of contact for termination. Stick to the explicitly permitted workflows; a product view does not provide any insight into an untested checkout process.
In the closed-load model, a virtual user instance waits for its current iteration to end before beginning the next one. If the application slows down, this can cause the offered load to decrease. This model is suitable for processes where this very waiting period is part of the problem; however, it does not maintain a fixed arrival rate.
A open load model In contrast, it schedules new iterations regardless of whether previous ones have been completed. To do this, the load generator must have sufficient capacity and available virtual user instances. If it cannot start iterations, the test will not achieve the planned profile; therefore, document these iterations that were not started as well.
Record both the target rate and the actual rate achieved. Iterations per second correspond to requests per second only if each iteration generates exactly one request. In addition, record response time distribution, errors, and timeouts, as well as the verification of correct content: High throughput with erroneous responses does not constitute a successful stress test.
Evaluate Measurement Series in a Traceable Manner
A series of measurements is only meaningful when considered in the context of its scope. Therefore, for each page tested and each load step, record the number of requests evaluated as well as the number of errors and timeouts. Distinguish successful responses from failed ones without omitting failures from the report: A low response time accompanied by many errors does not indicate a reliably fast service.
The Median describes the median value of the sorted successful measurements. The 95th percentile, or p95 for short, additionally indicates a threshold below which approximately 95 percent of these measurements lie. With a small number of queries, p95 depends heavily on individual observations; therefore, always specify the sample size and interpret differences with caution.
For each run, also record the load model and the actual rate achieved. A configured rate alone does not indicate whether the generator was able to start all planned iterations. The following template remains blank until the measurement is taken; each run is given its own log.
| Information | Measurement Run |
|---|---|
| Location and Rates | |
| Date and Time | |
| Software and Tool Versions | |
| Test location and URL tested | |
| Load Profile and Cache Status | |
| Achieved Rate and Iterations Not Started | |
| Sample size, median, and p95 | |
| Errors, Timeouts, and Anomalies |
Save the raw data, test script, and configuration along with the log. This makes it possible to verify later which queries were included in the analysis and whether two sets of results are even comparable. Don’t just select the fastest run after the fact: If the results overlap significantly, the observed difference may fall within the margin of variation.
In addition to key metrics, also note any anomalies in the content, such as an unexpected login page instead of the expected account view. A technically successful status does not necessarily prove that the correct page was delivered. Such discrepancies should be documented separately from the error description and can render a set of measurements unusable for the planned decision.
Narrow down the causes and measure again
Start troubleshooting with the response you received: Do the content, login status, and tested URL match? Then check the documented cache status and the testing environment. Different cookies, a different testing location, or a changed CDN rule can cause two runs to differ, even though the performance of the actual application stack has not changed.
Only then can available operational data help narrow down the problem: resource utilization and queues can indicate bottlenecks, while application or database information can point to resource-intensive processing. A single slow HTTP metric does not identify the cause. WordPress cites software, configuration, and content—in addition to hosting—as factors that influence performance.
For a before-and-after comparison, intentionally change only one setting—such as enabling a persistent object cache. Keep the website status, test page, load profile, and measurement location as consistent as possible; also document the cache warm-up process for each scenario. Without a suitable persistent implementation, the WordPress Object Cache is limited to individual requests, so its actual integration must be verified.
Run multiple tests before and after the change, spacing them out over time. This will help you determine whether a difference occurs repeatedly or might simply coincide with normal fluctuations. When doing so, compare not only the median and p95 but also errors, response content, and the achieved rate; otherwise, an apparent acceleration might be due to changes in test conditions.
Even a careful comparison cannot account for every factor. With shared hosting, other users and infrastructure that isn’t visible to you can influence the results. If you lack resource or queue data, explicitly note this gap and state a suspected cause as a hypothesis rather than as a proven finding.
Putting Hosting Results into Perspective
Base your hosting decision on the pages and workflows that are important to your website. A public blog post with a warm page cache can generate a different load than a logged-in account view. Good cache hits on public pages therefore do not indicate fast personalized responses or a reliable checkout process.
Before making a comparison, define which response times, error rates, and load profiles are acceptable for the respective process. Then verify whether the documented measurement series meet these requirements under the agreed-upon conditions. This includes correct content and stable operation; a high request rate alone is not a sufficient basis for decision-making.
Set virtual users They are not the same as real visitors who are present at the same time. Their behavior is determined by the test script and the load model: In the closed model, an instance waits for the end of its iteration before beginning the next one. Therefore, without an appropriate behavioral model, it is not possible to derive a real visitor count from their number.
Report the results along with the pricing plan, website status, tested URLs, cache and CDN rules, measurement location, and time period. Also specify whether you compared stacks that were as similar as possible or the complete packages offered by each provider. In a package comparison, configuration differences can influence the results; such a comparison does not automatically isolate pure server performance.
If the data sets overlap significantly or if the environment cannot be adequately controlled, „no statistically significant difference has been demonstrated“ is a valid and helpful conclusion. This does not mean that both options are equally fast under all conditions. It simply means that the test in question does not support the desired distinction.
For operational monitoring, save the measurement profile and repeat selected browser and load measurements after major changes or at agreed-upon intervals. Compare new results only with corresponding previous data sets, and document changes to content, versions, and cache rules. Load tests still require an approved time window and agreed-upon termination thresholds.
Sources and Current State of Knowledge
Status of the research:
Research status: November 4, 2026. This article describes a test setup without any test results of its own; tool versions and hosting configurations must be documented for each run.
https://developer.wordpress.org/advanced-administration/performance/optimization/
https://developer.chrome.com/docs/lighthouse/performance/performance-scoring
https://developer.chrome.com/docs/crux/guides/pagespeed-insights?authuser=889162768
https://developer.wordpress.org/reference/classes/wp_object_cache/
https://developer.wordpress.org/advanced-administration/wordpress/wp-config/
https://grafana.com/docs/k6/latest/testing-guides/load-testing-websites/
https://grafana.com/docs/k6/latest/using-k6/scenarios/concepts/open-vs-closed/
https://grafana.com/docs/k6/latest/testing-guides/api-load-testing/




