Why is a WordPress site slow?
Many slow WordPress sites come down to one of three root causes: cheap or overloaded hosting, a heavy page builder or multipurpose theme, or large images and scripts that nobody trimmed.
Plugins that promise instant speed can only partly fix the second and third. The twelve causes below are grouped by where they live, so you can see which apply to you.
Before touching anything, measure. Run the home page and one inner page through PageSpeed Insights on mobile, note the numbers, and keep a screenshot. Our guide on reading a speed test report explains which figures matter. Test from a phone on mobile data as well: in Bangkok, many visitors arrive on 4G or 5G in a BTS carriage or a condo lobby, not on office fibre.
Hosting and PHP (causes 1 and 2)
1. Slow or overloaded hosting
Every page starts with the server building it. On a crowded shared plan, that step alone can take a second or more before the browser receives anything. Look for "server response time" or "time to first byte" in your speed report: if it is slow even on a simple page, no amount of front-end tuning will fix it. A better plan, or a host with servers closer to your visitors, is the fix.
2. An old PHP version
WordPress runs on PHP, and newer PHP versions are generally faster as well as safer. Many sites still run a version that no longer receives security support. Check the PHP version in your hosting panel or under Tools, Site Health in WordPress, and compare it with the currently supported list on php.net. Upgrading is often a single setting, but test on staging first, because old plugins can break on a newer PHP.
No page caching (cause 3)
3. Every visit builds the page from scratch
Without caching, WordPress queries the database and assembles each page for every single visitor. Page caching saves a ready-made copy and serves that instead, which cuts server work dramatically. Many hosts include server-level caching; otherwise a well-known caching plugin does the job.
Caching has limits. It helps the server respond faster, but it does not shrink a 4 MB page or remove a slow chat widget. Carts, checkouts and account pages on a WooCommerce store must also be excluded from the cache, or customers see each other's baskets.
Themes and page builders (cause 4)
4. Page builder and multipurpose theme bloat
Drag-and-drop builders and "do everything" themes are convenient because they ship code for every possible layout, animation and widget. The cost is that much of that code loads on pages that use none of it, wrapped in many nested layers of HTML. The result is a heavy page that is slow to render on a mid-range phone.
Optimisation plugins can defer some of those scripts and combine some files, which helps a little. They cannot remove the builder's structure from the page. This is the honest line between tuning and rebuilding: if the builder is the weight, the only real fix is a lighter theme.
Plugins (cause 5)
5. Too many plugins, or a few heavy ones
The number of plugins matters less than what each one loads. A small plugin that adds one setting costs almost nothing. A slider, a social feed or a form plugin that loads its scripts and styles on every page, even pages without a form, adds weight to the whole site.
Go through the list and ask of each plugin: do we still use it, does it load on pages that do not need it, and is there a lighter way to do the same thing? Deactivate one at a time on a staging copy of your site and re-test to find the worst offenders. Some SEO plugins also add front-end output; our guide to SEO WordPress settings covers which features are worth keeping.
Images and fonts (causes 6 and 7)
6. Unoptimised images
Photos uploaded straight from a camera or phone are often several megabytes each and far wider than any screen needs. Resize them to the largest size they display at, compress them, and serve a modern format such as WebP. Our full guide to image optimization covers sizes and tools.
7. Heavy web fonts
Thai web fonts usually carry both Thai and Latin glyphs, so their files tend to be larger, and bilingual sites often load a Thai font and an English font in several weights. Limit the weights you actually use, host the fonts yourself, and subset them to the characters each language needs. Setting fonts to show fallback text while loading also stops blank text on slow connections.
Third-party scripts and no CDN (causes 8 and 9)
8. Chat widgets, pixels and maps
Every outside script is code your site does not control, downloaded from another server. Live chat widgets, advertising pixels, analytics tags beyond what a lean GA4 setup needs, embedded Google Maps, review badges and video embeds are the usual culprits. Keep the ones that earn their place, load them after the page is usable, and replace embedded maps with a static image that links to the map. A simple LINE or WhatsApp link button costs almost nothing compared with a full chat widget.
9. No CDN
A content delivery network keeps copies of your images, styles and scripts on servers in many locations, so visitors download them from nearby. It also absorbs traffic spikes. For many small sites the simplest route is putting Cloudflare in front of your site, which also handles basic caching and security.
Database and background tasks (causes 10 to 12)
10. Database bloat
Over the years the database collects post revisions, expired temporary data (transients), spam comments and, on WooCommerce stores, old customer sessions. A bloated database makes every uncached page slower and backups larger. Limit revisions, clear expired data and clean spam on a schedule, with a backup taken first.
11. Slow external calls and WP-Cron
Some plugins contact outside services while the page is loading: licence checks, currency rates, stock feeds, social counts. If that service is slow, your page waits. WordPress also runs scheduled tasks, called WP-Cron, triggered by visitor traffic, so a heavy task can land on a customer's page view. Moving cron to a real server schedule and removing slow calls from page loads fixes both.
12. Sliders and video heroes
A full-width slider with five large photos, or an autoplaying background video, is often the heaviest thing on the home page and the first thing a mobile visitor waits for. One strong, compressed image with a clear headline usually loads faster and reads better.
In what order should you fix them?
Work from the cheapest, highest-impact fixes towards the expensive ones, and re-test after each step so you know what helped. Plugin-level fixes cover images, caching, fonts, database cleanup and script delays. Hosting changes need a migration. Builder bloat needs code or a rebuild. For more reading on this topic, browse our articles on SEO, speed and analytics.
- Compress and resize imagesUsually the quickest win, and safe to do on the live site.
- Turn on page cachingUse your host's cache or one caching plugin, never two at once, and exclude cart and checkout.
- Update PHPTest on staging, then switch in the hosting panel.
- Trim plugins and third-party scriptsRemove what you do not use and delay chat widgets and pixels.
- Reduce and subset fontsFewer weights, self-hosted, Thai and English subsets.
- Add a CDN and clean the databaseModerate effort, steady gains.
- Review hostingIf server response is still slow, move to a better plan or host.
- Replace the builder or themeThe biggest job, and the only fix for builder bloat.
When is a rebuild the real fix?
If your speed report still shows a heavy page after images, caching and plugins are sorted, and the site is built on a page builder or a multipurpose theme, you have reached the limit of tuning. At that point a lighter custom theme without a page builder is usually cheaper over time than paying for one optimisation round after another. We compare both routes in template vs custom website.
If you would rather hand the diagnosis over, our service for making a slow site fast starts with measurement and tells you which of the twelve causes apply. For keeping it fast afterwards, see what shapes the website maintenance cost for a site like yours.

