Your website is slow. You know it because you feel it when browsing, your visitors leave before the page loads, or Google PageSpeed Insights gives you a discouraging score of 20 or 30. But why is your site so slow, and more importantly, how can you fix it?
As we explain in our article on why fast sites rank better on Google, speed is not optional. It's a ranking factor, a conversion determinant, and a fundamental quality signal. In this article, we identify the 8 most common causes of a slow website and offer concrete solutions for each.
1. Cheap Web Hosting
The Problem
This is the number one cause of slow websites, yet the most underestimated. A shared hosting at $3 or $5 per month means your site shares a server with hundreds, if not thousands, of other sites. CPU, RAM, and bandwidth resources are shared. When a neighbor has a traffic spike, your site slows down.
The Time to First Byte (TTFB) — the time it takes for the server to respond to the first request — is often 1 to 3 seconds on cheap shared hosting. This means your page cannot physically load in less than 1 to 3 seconds, no matter what other optimizations you make.
The Solution
- Managed WordPress Hosting: Kinsta, WP Engine, or Cloudways offer servers optimized for WordPress with built-in cache, CDN, and a TTFB of 200 to 400 ms. Budget: $30 to $100/month.
- VPS (Virtual Private Server): DigitalOcean, Linode, or Vultr offer VPS from $5 to $20/month with dedicated resources. Requires server administration skills.
- Serverless Hosting: for Next.js sites, Vercel offers optimized hosting with a global CDN and a TTFB often below 100 ms. The free plan is sufficient for many sites.
2. Unoptimized Images
The Problem
Images account for 50 to 75% of the total weight of a web page on average. A photographer or designer uploading an image directly from their device or Photoshop can easily add an image of 3 to 10 MB. Multiply by 5 or 10 images per page, and your page weighs 30 to 50 MB. On a 4G mobile connection at 10 Mbps, it takes 24 to 40 seconds just to download the images.
The most common issues with images:
- Inappropriate Format: JPEG and PNG are old formats. WebP offers 25 to 35% more compression, and AVIF 50% more than JPEG, for equivalent quality.
- Excessive Dimensions: an image of 4000 x 3000 pixels displayed in a container of 800 x 600 pixels wastes 96% of the pixels.
- No Lazy Loading: all images on the page load at the same time, even those not visible.
- No Compression: images are served at 100% quality while 80% is sufficient for most web uses.
The Solution
- Convert to WebP: for WordPress, use our H1Site WebP Converter plugin which automatically converts all your images to WebP. It's free, open source, and works in one click. For Next.js, the <code><Image></code> component converts automatically.
- Resize Before Upload: resize your images to the maximum display size. A hero image of 1200 px wide is sufficient for most sites.
- Enable Lazy Loading: add <code>loading="lazy"</code> to all images below the fold. WordPress does this natively since version 5.5.
- Compress to 80% Quality: the visual difference between 80% and 100% is imperceptible, but the weight gain is 40 to 60%.
- Use srcset: serve images of different sizes according to the viewport. The browser chooses the appropriate size.
3. Too Many Plugins (WordPress)
The Problem
Each installed WordPress plugin potentially adds CSS, JavaScript, database queries, and PHP hooks that run on every page load. A typical WordPress site with 30 to 50 plugins easily loads 20 to 30 additional CSS and JavaScript files.
Some plugins are particularly resource-intensive:
- Page Builders (Elementor, Divi, WPBakery): they add 300 to 800 KB of CSS and JavaScript to each page, even if you only use a few elements.
- Sliders (Revolution Slider, LayerSlider): a slider can add 500 KB to 1 MB of resources for a feature that most users ignore.
- Social Plugins: social sharing widgets and Instagram/Facebook feeds load heavy external scripts.
- Heavy Form Plugins: some form plugins load their assets on all pages, not just the contact page.
The Solution
- Plugin Audit: list all your plugins and evaluate which ones are truly necessary. Deactivate and remove those no longer used.
- Replace with Native Code: many plugins can be replaced with a few lines of code. A simple share button doesn't need a plugin.
- Limit to 15-20 Plugins: it's a rule of thumb, but it works. Each additional plugin measurably degrades performance.
- Load Assets Conditionally: plugins like Asset CleanUp or Perfmatters allow you to disable a plugin's CSS and JavaScript on pages where it's not used.
4. No Cache Configured
The Problem
Without cache, each visit triggers the full cycle: PHP execution, MySQL queries, HTML assembly, downloading all resources. A visitor returning 5 minutes later goes through the entire process from scratch.
There are several levels of cache, and most sites use none:
- Page Cache: the generated HTML is stored and served directly without executing PHP or MySQL.
- Browser Cache: static files (CSS, JS, images) are stored locally in the visitor's browser.
- Object Cache: results of frequent MySQL queries are stored in memory (Redis, Memcached).
- CDN Cache: pages and resources are distributed on servers worldwide and served from the nearest server.
The Solution
- WordPress: install WP Rocket (paid but excellent) or LiteSpeed Cache (free on LiteSpeed hosting). Enable page cache, browser cache, and minification.
- Cache Headers: configure HTTP <code>Cache-Control</code> headers for static files. A <code>max-age</code> of 1 year for CSS, JS, and immutable images (with cache busting via hash in the filename).
- CDN: Cloudflare offers a free plan that includes a global CDN, Brotli compression, and an SSL certificate. Configuration takes 15 minutes.
- Object Cache: if your host supports Redis, enable it. For WordPress, the Redis Object Cache plugin connects WordPress to Redis automatically.
5. Heavy and Unoptimized JavaScript
The Problem
JavaScript is the main culprit for the perceived slowness of a website. Unlike images that download and display progressively, JavaScript must be downloaded, parsed, compiled, and executed before producing a visible result. A 1 MB JavaScript file has a much greater impact than a 1 MB image.
Common sources of excessive JavaScript:
- SPA Frameworks (React, Angular, Vue) without SSR: a JavaScript bundle of 500 KB to 2 MB that must fully load before the page displays.
- Unused Libraries: jQuery loaded when the site only uses one function, or moment.js loaded to format a single date.
- Third-Party Scripts: Google Tag Manager, Facebook/Google Ads pixels, chatbots, review widgets — each third-party script adds hundreds of KB and dozens of network requests.
- No Code Splitting: all site JavaScript is loaded on every page, even if the page only uses a fraction.
The Solution
- Audit with Lighthouse: the 'Reduce unused JavaScript' tab precisely identifies unused scripts and their weight.
- Defer and Async: add <code>defer</code> or <code>async</code> to non-critical scripts. Use <code>defer</code> for scripts that must execute in order, <code>async</code> for independent scripts.
- Code Splitting: with Next.js, code splitting is automatic per page. For other frameworks, use dynamic <code>import()</code> to load modules on demand.
- Replace Heavy Libraries: use lightweight alternatives. Day.js (2 KB) instead of Moment.js (72 KB). Preact (3 KB) instead of React (40 KB) for simple sites.
- Defer Third-Party Scripts: load Google Analytics, chatbots, and ad pixels after user interaction or after a 3 to 5-second delay.
6. Unoptimized Database
The Problem
WordPress stores everything in its MySQL database: posts, pages, comments, options, transients, revisions, and metadata for each plugin. Over time, the database grows and queries slow down.
Common issues:
- Post Revisions: WordPress saves every version of each post. A post edited 50 times has 50 revisions in the database. Multiply by 100 posts.
- Expired Transients: temporary data stored by plugins that are never cleaned up.
- Autoloaded Options: the wp_options table contains data automatically loaded on each request. Poorly coded plugins store megabytes of data there.
- Comment Spam: thousands of spam comments stored in the database.
The Solution
- Limit Revisions: add <code>define('WP_POST_REVISIONS', 5);</code> in <code>wp-config.php</code> to limit to 5 revisions per post.
- Regular Cleanup: use WP-Optimize or Advanced Database Cleaner to delete revisions, expired transients, spam comments, and orphaned tables.
- Optimize Tables: regularly run <code>OPTIMIZE TABLE</code> on MySQL tables to reorganize data and free up space.
- Redis Object Cache: Redis stores results of frequent queries in memory, eliminating repetitive MySQL queries.
7. No CDN (Content Delivery Network)
The Problem
If your server is in Montreal and a visitor is in Vancouver, the request must travel 4,700 km. The speed of light in fiber optics is about 200,000 km/s, which gives a round trip of ~47 ms just for physical latency. In practice, with routers and intermediate nodes, it's 60 to 100 ms per round trip. If your page requires 20 HTTP requests, this easily adds 1 to 2 seconds.
For a visitor in Europe or Asia, latency is even worse: 200 to 400 ms per round trip.
The Solution
- Cloudflare (Free): Cloudflare's free plan includes a global CDN with over 300 points of presence, Brotli compression, an SSL certificate, and basic DDoS protection. Setup in 15 minutes via a DNS change.
- Host's CDN: many managed hosts (Kinsta, WP Engine, Vercel) include a CDN in their offer.
- Dedicated CDN: for advanced needs, StackPath, KeyCDN, or BunnyCDN offer performant CDNs starting at a few dollars per month.
8. A Heavy and Overloaded WordPress Theme
The Problem
WordPress 'multipurpose' themes like Avada, BeTheme, or Flavor are designed to do everything: blog, e-commerce, portfolio, landing page, directory. To offer this versatility, they load a massive amount of CSS, JavaScript, and features of which you only use 5%.
A typical multipurpose theme adds 500 KB to 1.5 MB of resources to each page. It's equivalent to 10 to 30 plugins in terms of performance impact.
The Solution
- Lightweight Themes: GeneratePress (~30 KB), Astra (~50 KB), and Kadence are performant themes that load only what's necessary.
- Custom Theme: a theme developed specifically for your site loads exactly what it needs, nothing more. It's the most performant option.
- Migrate to Next.js: for businesses wanting the best possible performance, migrating from WordPress to Next.js eliminates all theme, plugin, and PHP issues. It's a bigger investment, but the result is a natively fast site. We compare the two in our article Next.js vs WordPress.
How to Diagnose Your Site
Before starting optimization, you need to understand exactly what slows down your site. Here is the diagnostic process we use at H1Site:
- Google PageSpeed Insights: enter your URL and analyze performance scores and recommendations. Focus on Field Data if available.
- GTmetrix: offers a detailed view of the loading waterfall. Identify the heaviest and slowest resources.
- Chrome DevTools: the Network tab shows each HTTP request with its time and weight. The Performance tab shows long JavaScript tasks.
- Query Monitor (WordPress): this free plugin displays all SQL queries, executed hooks, and scripts loaded by each plugin. Essential for identifying problematic plugins.
The Case for a Complete Redesign
Sometimes, incremental optimizations are not enough. If your site accumulates several of these issues — cheap hosting, heavy theme, 40 plugins, unoptimized images, no cache — the time and cost of optimizations may exceed that of a complete redesign.
A redesign on modern technology like Next.js structurally eliminates the majority of these issues. The result is a site that scores 90+ on PageSpeed without particular effort, scales automatically, and costs less to maintain over time.
To learn more about specific technical optimizations, check out our guide on how to improve Core Web Vitals.
Conclusion
A slow website is not a fate. In the vast majority of cases, the causes are identifiable and correctable. Whether you choose to optimize your existing site or rebuild it on a more performant base, the investment is worth it: more traffic, more conversions, and a better experience for your visitors.
At H1Site, we have been diagnosing and optimizing websites for years. If you want a professional look at your site's performance, contact us for a free audit. We will identify the issues and propose a concrete and prioritized action plan.
Also read
H1Site
Web Agency Vaudreuil