Initial assessment without passwords Quote before intervention One accountable specialist from start to finish

Measurement And Symptom Isolation

How to Build a Reproducible WordPress Performance Test Before Optimising

Create a repeatable WordPress performance baseline before changing cache, images or code. Define URLs, states, metrics, evidence and acceptance criteria.

WordPress performance work becomes unreliable when the test changes every time.

One person tests the homepage while logged in. Another tests a product page from a different country. Cache is warm in one run and purged in the next. A higher PageSpeed score is then credited to the latest plugin setting even though the conditions were not comparable.

A reproducible test does not need a laboratory. It needs a written journey, controlled variables and evidence that can be collected again after the change.

Begin with a business symptom

Choose the problem the test must represent:

  • new visitors wait for the main service message;
  • mobile users see the hero image late;
  • customers wait for checkout to recalculate;
  • administrators cannot process orders efficiently;
  • forms respond slowly after submission;
  • a specific page is slower than its peers.

“Improve the score” is not enough. It does not define whose experience matters or when the test is complete.

Select a small URL set

Include pages that represent distinct WordPress paths:

  • homepage;
  • primary service or landing page;
  • typical article;
  • heavy page;
  • WooCommerce product;
  • cart/checkout if in scope;
  • account or administrator screen if commercially important.

Do not test every URL initially. A small representative set makes changes easier to attribute. Expand after the method is stable.

For each page, write down why it is included.

Define visitor state explicitly

Record:

  • logged out, administrator or customer;
  • first or returning visit;
  • consent accepted, rejected or undecided;
  • cart empty or populated;
  • language and currency;
  • device class;
  • network condition;
  • geographic test location.

These states can change cache behaviour, scripts and server work. “Mobile test” is incomplete if one run is a new visitor and the next carries WooCommerce and consent cookies.

Separate cold and warm paths

Use at least two paths:

Clean browser visit

No existing browser cache or site cookies. This represents a new visitor but may still receive warm CDN or page cache.

Returning browser visit

Assets and connections may be reused. This represents repeat navigation.

If origin generation matters, add a controlled page-cache miss. Do not purge production caches repeatedly without assessing load and business impact.

Record cache headers for each run.

Choose metrics that match the symptom

For initial loading:

  • first-byte time;
  • Largest Contentful Paint;
  • Cumulative Layout Shift;
  • transferred bytes;
  • request count.

For interaction:

  • Interaction to Next Paint where field data is available;
  • main-thread task duration;
  • Ajax/REST response time;
  • time to visible feedback.

For WooCommerce or forms:

  • cart update time;
  • checkout recalculation time;
  • payment hand-off time;
  • form submission to confirmation;
  • server response and final status.

Do not use a page-load score to accept a checkout repair.

Use a simple test sheet

Create one row per run:

Field Example
Deployment release-2026-07-28
URL /services/wordpress-speed/
State logged out, clean browser
Device mobile simulation
Location London
Cache HTML HIT, browser cold
First byte 0.34 s
LCP 2.2 s
LCP element hero image
Function check menu and form pass
Notes consent rejected

Keep raw reports or screenshots where appropriate. The table is an index, not a substitute for the trace.

Record the deployed version

Tie the baseline to a code/content state:

  • Git commit;
  • deployment identifier;
  • plugin/theme version list;
  • WordPress/PHP version;
  • date and timezone.

Without this, a later result may include unrelated updates.

If Git is unavailable, export a version report and note recent configuration changes. Do not expose licence keys or credentials.

Measure server response independently

Use a low-volume command-line check:

curl -s -o /dev/null 
  -w 'status=%{http_code} dns=%{time_namelookup} connect=%{time_connect} first_byte=%{time_starttransfer} total=%{time_total}n' 
  https://example.com/page/

This does not render the page. It establishes whether WordPress begins responding consistently.

Run several samples and keep the median and range. Record cache status separately.

Save a browser waterfall

For each critical page:

  1. open developer tools;
  2. enable Preserve log if the journey navigates;
  3. set the agreed device/network condition;
  4. use the agreed cache state;
  5. reload and complete the journey;
  6. save the trace or HAR securely.

A HAR can contain URLs, headers and submitted data. Do not share it publicly without review. Never include passwords, payment data or customer information.

Add functional checks to every performance test

Performance changes frequently affect:

  • navigation;
  • consent;
  • forms;
  • sliders;
  • image galleries;
  • WooCommerce cart;
  • checkout;
  • analytics.

Write a short pass/fail list. A faster page with a broken form fails.

For analytics, use debug or test procedures that do not pollute production conversion and revenue reporting.

Control changes one at a time

Record one hypothesis:

The mobile LCP is late because the browser downloads a 2200-pixel hero before discovering the mobile candidate.

Then change the responsible image markup or asset. Repeat the same test.

Avoid enabling cache, minification, image conversion and JavaScript delay together. If the result improves, you will not know which change helped or which one introduced hidden risk.

Define acceptance criteria before the work

Useful criteria include:

  • median LCP below an agreed threshold under the specified condition;
  • first-byte time stable for cache misses;
  • transferred hero image below an agreed budget;
  • checkout recalculation completes within an agreed time;
  • no new console or PHP errors;
  • functional checklist passes;
  • no increase in layout shift.

Do not promise universal exact timings across every device and network. Define the controlled test and monitor real-user trends.

Keep a rollback route

For every change, record:

  • files/settings changed;
  • previous value;
  • backup or version;
  • rollback steps;
  • data migration involved;
  • cache purge required.

Test the rollback where risk justifies it. A backup that has never been restored is weaker evidence than a verified recovery route.

Re-run enough samples

One before and one after run can be misleading. Use several controlled runs, compare medians and keep outliers.

If one after-run fails badly, investigate it. Do not discard it only because the median improved. Reliability matters to leads and transactions.

Add real-user monitoring after the controlled repair

Laboratory tests prove repeatability. Real-user data checks whether the improvement reaches the actual audience.

Review by:

  • device;
  • page group;
  • country where useful;
  • new/returning state where privacy design permits;
  • Core Web Vitals trend;
  • business journey timing.

Collect only what is needed and respect consent. Performance monitoring should not become unnecessary visitor profiling.

A baseline protects against future regressions

Retain the test set after the repair. Run it:

  • before and after important plugin/theme updates;
  • after hosting or DNS migration;
  • after analytics/consent changes;
  • after redesigning a high-value template;
  • during recurring maintenance.

Update the baseline deliberately when the site’s intended design changes.

What to provide for a professional assessment

Send the symptom, representative URLs, visitor state, available reports and recent changes. State which business action must remain functional. Do not send passwords through the first contact.

If you need a reproducible WordPress performance baseline, we can define the test set, capture the server and browser evidence and agree acceptance criteria before optimisation. That makes the final result reviewable rather than dependent on one favourable score.

BEFORE YOU SEND THE REQUEST

Frequently asked questions.

Do you ask for passwords in the form?+

No. The public form never requests access. Secure credentials are requested only after the scope and quote are approved.

Who reviews the incident?+

The request goes to Jordi Ensenyat, founder of Code Barcelona and a WordPress specialist with more than 15 years of experience.

Is anything changed before the quote?+

No. Visible symptoms and scope are reviewed first. Intervention begins after approval and with a rollback path prepared.

Do you work internationally?+

Yes. WP Repair handles WordPress and WooCommerce incidents in English and Spanish through a remote service.

Assess my incident