WordPress Performance

Fixing WordPress speed without breaking the site

WordPress slowness almost never has one cause, and most attempts to fix it are a plugin installed on top of the problem. The two questions that matter are where the time actually goes, and how to change things without a feature quietly stopping.

The problem

Optimisation without measurement is guesswork with a plugin attached

The standard approach is to install a caching plugin, a minification plugin and an image plugin, and see whether the number improves. Sometimes it does. When it does not, the site now has three more components, an unknown number of them interacting badly, and no record of which change did what. And the change that helped is often one that breaks something nobody checks for a fortnight.

  • The site is slow and nobody can say which part is slow
  • Caching, minification and image plugins are installed and the site is still slow
  • The admin area is slow, the front end is slow, or both, and they have different causes
  • Pages are fast for logged-out visitors and slow for logged-in ones, or the reverse
  • Speed varies unpredictably rather than being consistently poor
  • The site has slowed gradually over years as content and plugins accumulated
  • A previous optimisation round broke a feature or a plugin and nobody noticed until later
  • Traffic is expected to increase and the site needs to survive it
Who this is for

The people who usually bring us this problem

Someone whose WordPress site is slow and unfixed

The plugins have been tried and the site is still slow, and you want to know where the time goes.

Someone who has been burned by optimisation before

A previous round broke something, and you need changes made in a way that keeps the site working.

Someone preparing for growth

The site is acceptable now and will not be at the traffic you are planning for.

What it costs

What this costs while it goes unfixed

Engineering faults are rarely confined to the engineering layer. These are the commercial consequences we see most often.

The front end and the admin have different causes

They look like one problem and are usually two. Admin slowness is frequently the database, an enormous options table or an autoloaded payload assembled on every request; front-end slowness is frequently caching, object storage or the host. Treating them as one problem means fixing half of it.

Speed that depends on who you are is a clue, not a nuisance

Caching affects logged-out visitors and not logged-in ones, so a site that is fast for visitors and slow for editors has a caching problem rather than a general performance problem. That distinction narrows the cause faster than any tool, and it is usually the first thing to establish.

Each optimisation is a way the site can break

Minification breaks JavaScript that depends on exact syntax. Aggressive caching serves the wrong content to the wrong visitor. Image conversion breaks transparency or an animation. Deferring scripts breaks a form's validation. None of these are exotic and all of them are the reason people fear this work.

The measured number and the experienced one are different

A synthetic benchmark measures a cold cache from a fixed location. A reader on a phone on a mobile connection experiences something else. Improving the first without the second is possible, common, and disappointing.

What we do about it

Capabilities

Each of these is work we carry out, not an area we advise on.

Measurement before opinion

Establishing where the time actually goes before changing anything — server response, database queries, theme and plugin execution, assets, and the difference between a cold and a warm cache. Every later decision refers back to this, which is what makes the work reviewable instead of superstitious.

Server and hosting assessment

Whether the constraint is in WordPress at all. Shared hosting with no object cache, insufficient PHP workers or a throttled database is frequently the whole answer, and no amount of theme optimisation fixes a platform that cannot serve the request.

Database diagnosis

Slow and repeated queries, the autoloaded options payload, the post meta and term tables as they grow, orphaned rows left by removed plugins, and revision history that has never been pruned. WordPress databases accumulate all of these, and they degrade steadily rather than suddenly.

Plugin and theme cost attribution

Measuring what each plugin and the theme actually cost per request, so the expensive ones are known rather than assumed. The heaviest plugin is frequently not the obvious candidate, and the ones nobody suspects are where the time usually is.

Caching strategy

Page, object and fragment caching as three separate decisions with different failure modes, plus the cache exclusions that keep logged-in users, carts and forms correct. Caching is the single highest-leverage change and the single most common cause of a broken site, so it is designed rather than switched on.

Asset delivery

Images, fonts, CSS and JavaScript sized, compressed and delivered appropriately for the theme in use — including the parts a plugin cannot do correctly, such as fonts loaded by the theme and images referenced from content.

Change sequencing and rollback

One change at a time, measured, with the ability to reverse it. This is the whole answer to doing this without breaking the site: a change that is measured and reversible is safe, and a bundle of twelve is not, regardless of how good the twelve are.

Regression checks on real site behaviour

Forms submitting, the checkout completing, search returning results, editors able to publish, and the logged-in experience correct — checked after every change, not once at the end. The features that break are the ones nobody visits during testing.

How we work

Engineering methodology

The sequence is deliberate. The order is usually what determines whether the work holds or has to be repeated.

  1. Define what fast means before starting

    A metric, a device class and a page type. Without that, the work cannot be finished or judged, and 'faster' becomes a feeling that the next plugin is supposed to supply.

  2. Measure the reader's experience, not just the machine's

    A synthetic score and a real field measurement answer different questions. Both are taken, and the difference between them is usually the most informative thing in the assessment.

  3. Find the constraint before optimising anything

    One constraint binds at a time. Optimising the parts that are not binding produces a lot of change and no improvement, which is exactly the experience of installing plugins on a slow site.

  4. Change one thing at a time and measure after each

    Slower and it is the only reliable way to know what worked, what did nothing and what made things worse. It also makes a regression attributable, so it can be reversed in one step instead of untangled from a bundle.

  5. Exercise the site's real behaviour after each change

    Forms, checkout, search, publishing, the logged-in view. The changes that break things break the paths nobody walks during a performance review, and finding that out from a customer is not an acceptable outcome.

  6. Do not keep a change that did not help

    An optimisation that costs a component, a risk and an interaction and improves nothing is a net loss. Reverting it is the correct outcome and it happens often enough that it is planned for rather than treated as a failure.

Deliverables

What an engagement produces

Documentation is a deliverable, not an afterthought. On most of these engagements a large part of the value is a defect report precise enough for another team to act on.

Assessment

  • Where the time goes, measured per layer rather than estimated
  • Field data and synthetic results, and the difference between them
  • The binding constraint, named
  • Cost attribution per plugin and for the theme
  • Database findings: query patterns, autoloaded payload, orphaned data
  • What the hosting platform does and does not provide

Optimisation, sequenced

  • Changes in priority order by measured effect, not by effort
  • Each change measured and reversible independently
  • Caching designed with its exclusions, not switched on
  • Regression checks after each change, covering the site's real paths
  • Changes that do not help reverted and recorded as such

Handover

  • Before-and-after measurement on the same metric, device and page type
  • What was changed, what each change did, and what was rejected
  • What must not be changed together, and why
  • Ongoing monitoring so a regression is noticed rather than reported
  • The next constraint, if there is one, named for later
Under the hood

Architecture and technology

Where WordPress time goes

  • The web server and PHP execution, including PHP worker availability
  • The database: query count, query cost, and the autoloaded options payload
  • Plugin and theme code executed on every request
  • Object caching, or its absence
  • Page caching, and what is excluded from it
  • Assets: images, fonts, stylesheets and scripts as actually delivered
  • External calls made during a page render

Why speed work breaks a site

  • Minification altering JavaScript that depended on exact syntax
  • Caching serving a personalised or stateful page to the wrong visitor
  • Image conversion discarding transparency or an animation
  • Deferred scripts breaking validation, tracking or a third-party embed
  • Consolidated or deferred CSS changing a cascade order the theme relied on
  • Database cleanup removing rows a plugin still reads
Adjacent problems

If this is not quite your problem

These overlap at the edges. Sending you to the right page is more useful than having you work it out.

The site needs care, not a one-off fix

Updates, backups and monitoring as a routine rather than an intervention.

WordPress maintenance

The constraint is the server

Serving-path design, capacity and database configuration.

Server management

Speed is a search problem here

Field performance as it affects crawling, indexing and ranking.

Core Web Vitals optimisation

The problem is performance generally

The discipline below the platform, including application-level bottlenecks.

Website performance
Questions

Frequently asked

Will optimisation break our site?

Not if the work is sequenced and measured, which is the whole method rather than a promise attached to it. One change at a time, with the site's real behaviour exercised afterwards — forms, checkout, search, publishing, the logged-in view — and each change independently reversible. Most breakage in this work comes from applying a bundle of changes at once and then being unable to say which one did it. Where a change is inherently risky, that gets said before it is made rather than after it fails.

We already have caching and optimisation plugins. Why is it still slow?

Usually because the constraint is somewhere the plugins do not reach. If the database is assembling a large autoloaded payload on every request, page caching only helps the visitors who hit the cache. If the hosting platform limits PHP workers, no plugin changes that. If the slowness is in the admin, most caching plugins do nothing for it and some make it worse. The measurement step exists to answer this, and it is why the answer is not another plugin.

How fast can you make it?

We will not give a number before measuring, because the achievable result depends on the hosting platform, the database, the theme and the plugins — and on whether the site's editorial or e-commerce behaviour imposes constraints that rule out the strongest optimisations. What we will commit to is the measurement: the same metric, the same device class, the same page type, before and after, with the difference stated plainly. A target agreed beforehand is more honest than a figure invented to win the work.

Is the admin area worth optimising?

Often it is, and usually for a different reason. Admin slowness rarely matters to visitors, so it does not move a search metric, but it is the working environment for whoever runs the site. On a site with a large database or an oversized options payload it is often the first place the problem becomes visible, and it is frequently the cheapest thing to improve.

Do you need to change our hosting?

Only if the assessment finds the platform is the binding constraint and cannot be configured to stop being one. That is a real finding and it is better established than assumed: moving hosts is disruptive, and a site that moves platform without fixing a database problem arrives slow and with a migration to recover from. If the platform is adequate, the page will say so and the work stays inside WordPress.

Bring us the problem you have not been able to fix

Describe what is happening rather than what you think the cause is. If we are not the right people for it, we will say so.