Why is my WordPress site slow?
A handful of causes account for almost every slow WordPress site. Here is what to check, roughly in order of likelihood.
A slow WordPress site almost always comes down to one or more of a short list of causes. Working through them roughly in order of likelihood is faster than guessing, and cheaper than paying for a bigger hosting plan before checking whether the site actually needs one.
No caching set up
By default, WordPress rebuilds each page from scratch on every visit — running database queries, assembling the theme, generating the HTML — every single time, for every visitor. A caching plugin stores the finished page and serves that stored copy to subsequent visitors instead, which is usually the single biggest speed improvement available and the first thing worth checking if none is currently active.
Unoptimised images
A handful of full-resolution photos, uploaded straight from a camera or phone without resizing or compression, can dwarf every other file on a page combined. This is one of the most common causes of a slow-loading site and one of the easiest to fix, since it does not require touching any code — just compressing and appropriately sizing images before or after upload.
A heavy or badly written plugin
Not every plugin costs the same. One that runs many database queries per page, loads scripts on every page regardless of whether they are needed, or calls out to a slow external service can measurably slow the whole site on its own — see finding the plugin that is slowing your site for how to identify it rather than guessing.
An old PHP version
Each major PHP release has generally improved performance over the last, sometimes substantially. A site still running an old PHP version is leaving that improvement on the table for no benefit — check and update the PHP version in your control panel, after confirming your theme and plugins support the newer version.
A database that has never been cleaned up
Years of accumulated post revisions, expired transients, spam comments and trashed items sit in the same database as everything else the site actively uses, and none of it is removed automatically. On an older site this can genuinely add measurable overhead to every query. See cleaning up and optimising the WordPress database.
A theme doing more than the site needs
Large, feature-heavy themes — particularly ones bundled with a page builder and dozens of demo layouts — load a correspondingly large amount of CSS and JavaScript, much of which a typical site never uses. A simpler, purpose-built theme is often noticeably faster purely because there is less to load in the first place.
Genuinely insufficient hosting resources
Occasionally the site itself is reasonably well optimised and the constraint really is the hosting plan — not enough memory or CPU allowance for the traffic and complexity of the site. This is worth confirming rather than assuming, since it is the most expensive fix and usually the least likely cause. Work through the items above first; upgrading a hosting plan without addressing an unoptimised site rarely delivers the improvement people expect.
Test the site's load time before making a change and again afterwards, using the same tool each time. This is the only way to know which change actually helped, rather than assuming based on how the site feels.
See speeding up a WordPress site for the full walkthrough of fixing each of these once you know which one applies.
Related reading
Measure first, then work through caching, images, plugins, PHP version and the database in the order that gives the biggest gain.
How to find the plugin that is slowing your siteA methodical way to find out which plugin is actually responsible before you start deactivating things at random.
How to clean up and optimise the WordPress databaseWhat actually accumulates in a WordPress database over time, and how to clear it out safely before optimising the tables.
A monthly WordPress maintenance checklistThe routine checks that keep a WordPress site from quietly accumulating problems, done monthly rather than only when something breaks.