It was fast when it launched
Nobody launches a slow website on purpose. The site that takes six seconds to load today was probably quick on launch day. What changed is not the design or the hosting. It is what accumulated in the two years since: photos, plugins and database rows, each added for a reason, none removed.
Speed decay is the normal life cycle of a WordPress site that nobody maintains. Here are the three culprits that account for nearly all of it, in the order we find them.
Culprit 1: the media library
Every photo uploaded from a phone or camera at full size, four thousand pixels wide and several megabytes, and then placed on a page at four hundred pixels wide. WordPress generates smaller versions, but only if the theme asks for them, and older themes often serve the original. A gallery page with twelve such photos is forty megabytes before anything else loads.
How you know: the home page or a gallery is slow on a phone, and the network tab in the browser shows image files measured in megabytes.
The fix: compress and resize the existing library in bulk, convert to WebP, make sure the theme requests appropriately sized versions, and lazy-load anything below the fold. Then set the platform to do this automatically on upload so it does not recur. Usually an afternoon, and usually the single largest speed win on an inherited site.
Culprit 2: plugin accumulation
Sites gain plugins the way drawers gain cables. One for a contact form, one for a slider, one for social icons, one for a pop-up that ran for a campaign in 2023, three for SEO that overlap, two for caching that fight each other. Each loads its own scripts and styles on every page whether or not the page uses them. Several run queries on every request. A few have been abandoned by their authors and are quietly out of date.
How you know: more than fifteen active plugins, several you cannot explain, and page source that references dozens of script files.
The fix: an audit. For each plugin, ask what it does, whether anything still uses it, and whether the theme or a lighter plugin could do the job. Remove the dead ones, replace the heavy ones, and confirm the remaining ones only load where they are needed. Half a day, and it also removes most of the site's security exposure, because abandoned plugins are how sites get hacked.
Culprit 3: the database
WordPress stores everything in a database, and it keeps things you would assume it throws away. Every saved revision of every page. Every spam comment ever received. Transients, short-lived cached values, that never expired. Options tables bloated by plugins that saved settings on every page load and never cleaned up, some flagged to load on every single request.
How you know: the admin is slow even when the public site is cached, the first uncached page load takes several seconds, and the database is hundreds of megabytes for a site with fifty pages.
The fix: clear post revisions beyond a sensible number, purge spam and trash, delete expired transients, and, the important one, find the autoloaded options that plugins left behind and stop them loading on every request. A developer with a profiler finds these in an hour. Then schedule the cleanup monthly so it does not regrow.
The two that are not culprits
Hosting. Owners often assume slow means the host is bad. Sometimes. More often the site is asking the host to do far too much work per page because of the three problems above, and moving hosts moves the problem. Fix the site first, then decide about the host.
The theme. Page-builder themes are heavy, and that is real, but a heavy theme on a clean site is usually tolerable. It is the theme plus the media plus the plugins plus the database that produces six seconds. Changing themes is a rebuild-sized job; the three fixes above are not.
How to check yours in five minutes
Load the site on a phone on mobile data and count. Open the browser's network tab on a desktop and sort by size: anything over 500 kilobytes is a candidate. Log into the admin and count the active plugins. Note how long the admin dashboard takes to load. That is enough to know which culprit you have.
What it costs to fix
The three fixes together are typically one to two days of work on a site of normal size, and the result is usually a site that loads in under two seconds on a phone, from one that took five or six. It is what the fix half of our diagnosis and fix covers, with before-and-after numbers you can check yourself. And it is what a care plan prevents from recurring, because someone is compressing the uploads, pruning the plugins and cleaning the database every month instead of once every two years.