I ran a speed test on a client’s website last month. A restaurant in Fuengirola, beautiful photos, great menu, totally unusable on mobile. The homepage took 11 seconds to load. Eleven. Their hosting was in Texas, their images were uncompressed 4MB originals straight from their photographer, and they had 23 WordPress plugins installed, including three that did essentially the same thing.

After an afternoon of work, the same site loaded in 1.9 seconds. No redesign, no new content, no budget beyond the hosting change. Just the kind of straightforward optimization that every small business website needs but almost none actually get.

Here’s everything I did, in the order that matters most.

Start with what’s actually slow

Before you fix anything, you need to know what’s broken. Go to PageSpeed Insights (pagespeed.web.dev), enter your URL, and run the test. You’ll get scores for both mobile and desktop, plus a list of specific issues.

The scores themselves are less important than the diagnostics underneath. A score of 45 with one giant problem is easier to fix than a score of 65 with twenty small problems. Look at the “Opportunities” section, Google sorts them by estimated time savings. The top item on that list is your priority.

For most small business websites I audit on the Costa del Sol, the biggest speed killers are almost always the same three things: oversized images, too many plugins, and cheap hosting. If you fix just these three, you’ll solve 80% of speed problems.

Images: the biggest win by far

Images are responsible for the majority of page weight on most small business sites. According to the HTTP Archive, images account for nearly half of a typical web page’s total weight.[1] A typical business website has 10-30 images per page. If those images aren’t optimized, they’re probably 500KB-3MB each. That’s potentially 30-90MB of images on a single page. On a mobile connection, that’s catastrophic.

Convert to WebP format. WebP images are 25-35% smaller than JPEG at the same quality.[2] If your site is on WordPress, install a plugin like ShortPixel or Imagify. They’ll automatically convert your existing images and serve WebP to browsers that support it (which is all modern browsers). This alone typically reduces total image weight by 30%.

Resize before uploading. Your photographer delivers images at 6000×4000 pixels. Your website displays them at 1200×800 maximum. Uploading the full-size image means the browser downloads a 4MB file and then shrinks it to fit, wasting bandwidth and processing power. Resize images to their display size before uploading, or use WordPress’s responsive image srcset feature properly. Maximum width for most sites: 1920px for full-width heroes, 1200px for content images.

Implement lazy loading. Lazy loading means images below the fold don’t load until the visitor scrolls down to them. This dramatically reduces initial page load time because the browser only fetches what’s immediately visible. WordPress has native lazy loading since version 5.5,[3] but many themes override it or don’t implement it correctly. Check that your images have the loading="lazy" attribute (but NOT on the first visible image, that should load immediately).

I worked with a real estate agency in Estepona that had property listings with 20+ photos per page. Before optimization: 8.5 second load time, 45MB page weight. After converting to WebP, resizing, and implementing lazy loading: 2.3 seconds, 3.2MB. Same photos, same quality that visitors can perceive, dramatically different performance.

Hosting: you get what you pay for

I’ve said this before and I’ll keep saying it: if you’re paying less than €20/month for hosting, you’re probably sharing a server with 500 other websites, at least some of which are running sketchy code that slows everyone down. And that server is probably in the US.

For small businesses in Spain, I recommend managed hosting with servers in Europe (Frankfurt, Amsterdam, or Paris). The difference in Time to First Byte (TTFB) between a €3/month shared host in Texas and a €40/month managed host in Frankfurt is staggering, often 800ms vs 80ms. That’s a 720ms head start before anything else even loads.

What to look for in hosting: SSD storage (not HDD), at least 1GB RAM for WordPress, PHP 8.2+, HTTP/2 or HTTP/3 support, server-level caching, and European data centers. If your host doesn’t offer these, it’s 2026, time to switch.

What to avoid: Any hosting that advertises “unlimited everything” for €2.99/month. GoDaddy, Bluehost, and HostGator economy plans. Any hosting where you can’t specify your server location. Free hosting of any kind for a business website.

Switching hosts sounds scary but it’s typically a 2-4 hour process with zero downtime if done correctly. The speed improvement is usually immediate and dramatic. I’ve never had a client regret upgrading their hosting.

Plugins: less is dramatically more

The average WordPress site I audit has 25-35 plugins. The average WordPress site that loads in under 2 seconds has 10-15. That’s not a coincidence.

Every plugin adds code that needs to load, database queries that need to run, and potentially external requests that need to complete. Some plugins are worse than others, social sharing plugins, slider plugins, and page builder plugins tend to be the heaviest offenders.

Here’s my plugin audit process: deactivate every plugin. Test your site speed. Then activate them one by one, testing speed after each activation. You’ll quickly find the 2-3 plugins that are adding the most load time. Then decide: do you actually need that plugin, or is there a lighter alternative?

Common plugins I remove during speed optimizations:

Slider/carousel plugins, sliders are bad for conversions anyway. Replace with a single strong hero image. Your visitors don’t wait for slide 3.

Social sharing buttons, these plugins load JavaScript from Facebook, Twitter, Pinterest, etc. Each one is an external request that blocks page rendering. For a small business site, simple HTML share links work fine and load instantly.

All-in-one SEO/security/performance suites, these try to do everything and end up doing nothing well while adding significant overhead. Use focused, lightweight plugins for each specific need.

Contact form plugins with excessive features, you need a name, email, and message field. Not a drag-and-drop form builder with conditional logic, payment integration, and survey functionality. WPForms Lite or Contact Form 7 are lightweight. Gravity Forms with 15 add-ons is not.

Caching: the speed multiplier

Caching stores a pre-built version of your pages so the server doesn’t have to generate them from scratch for every visitor. Without caching, every page view triggers PHP execution, database queries, and HTML assembly. With caching, the server just serves a static file. The difference can be 10x faster response times.

For WordPress, the simplest effective caching setup: install WP Super Cache or W3 Total Cache. Enable page caching. Enable browser caching. That’s it for most sites. If your hosting provider offers built-in caching (like LiteSpeed Cache on OpenLiteSpeed servers), use their solution instead, it’s more efficient because it works at the server level.

Browser caching tells visitors’ browsers to store static files locally so they don’t re-download them on every visit. A returning visitor with browser caching enabled might load your site in 0.5 seconds instead of 2 seconds because images, CSS, and JavaScript are already stored on their device.

Object caching (Redis or Memcached) stores database query results in memory. This is particularly valuable for WooCommerce sites or sites with complex database queries. If your host supports Redis, enable it, it’s a free speed boost for database-heavy operations.

The CDN question

A Content Delivery Network puts copies of your static files on servers around the world. When someone in London visits your Spain-hosted site, they get the images and CSS from a server in London instead of Spain. This matters more for sites with international audiences.

For most small businesses in Spain serving primarily Spanish or European customers: Cloudflare’s free plan is all you need. It adds a CDN, basic security, and automatic HTTPS. Setup takes 15 minutes, it’s free, and it typically shaves 200-500ms off load times for visitors outside your server’s country.

If your audience is purely local (a restaurant in Málaga, a dentist in Marbella), a CDN provides minimal benefit because your visitors are already close to your server. But Cloudflare’s free plan has enough other benefits (DDoS protection, automatic HTTPS, DNS management) that it’s worth setting up regardless.

Code optimization: the technical stuff

After images, hosting, plugins, and caching, we’re into more technical territory. These optimizations individually make smaller differences but collectively add up:

Minify CSS and JavaScript. Remove whitespace and comments from code files to reduce their size by 10-30%. Most caching plugins include this feature. Enable it, but test your site afterwards, occasionally minification breaks something.

Defer non-critical JavaScript. JavaScript that isn’t needed for the initial page render should load after the page is visible. This prevents “render-blocking resources”, one of the most common PageSpeed Insights warnings. The defer attribute on script tags tells the browser to load the script without blocking page rendering.

Preload critical resources. Fonts, hero images, and above-the-fold CSS can be preloaded so the browser fetches them immediately instead of waiting until it discovers them during page rendering. This improves Largest Contentful Paint (LCP), one of the three Core Web Vitals.[4]

Reduce external requests. Every Google Font, analytics script, social embed, and third-party widget is an external HTTP request that the browser has to wait for. Audit your external requests and remove what you don’t need. Host Google Fonts locally instead of loading them from Google’s servers. Load analytics scripts asynchronously.

Before and after: what to expect

Realistic speed improvements from a full optimization on a typical small business WordPress site:

Starting point: 6-10 second load time, PageSpeed score 25-45, failing Core Web Vitals.

After image optimization: 3-5 second load time. This single change makes the biggest difference.

After hosting upgrade: 2-3 second load time. TTFB drops from 500ms+ to under 200ms.

After plugin cleanup and caching: 1.5-2.5 second load time. PageSpeed score 75-90.

After code optimization: 1.2-2 second load time. PageSpeed score 85-95. Passing Core Web Vitals.

Total cost: €0-80 depending on whether you change hosting. Total time: 3-6 hours for someone who knows what they’re doing. The ROI is enormous, faster sites get better search rankings, lower bounce rates, and higher conversion rates. Google has explicitly stated that page speed is a ranking factor,[5] and they mean it. Research shows that a 1-second delay in page load time can reduce conversions by 7%.[6]

The maintenance part nobody talks about

Speed optimization isn’t a one-time thing. Every new plugin you install, every unoptimized image you upload, every theme update that adds features, they all chip away at your speed gains.

Monthly speed maintenance checklist: run PageSpeed Insights and note your scores. Check for plugin updates (outdated plugins can be slower and less secure). Review your plugin list and deactivate anything you’re not using. Verify your caching is working (check response headers for cache hits). Test on mobile, not just desktop.

Set a reminder to run this check on the first of every month. It takes 15 minutes and prevents the gradual speed decay that I see on virtually every site that gets optimized once and then ignored.

Your website speed is one of the few things in digital marketing where the fix is clear, the cost is low, and the impact is immediate. If your site is slow, stop reading and go fix it. Everything else, content, design, marketing, works better when it loads fast.

Sources

  1. HTTP Archive – Page Weight Report – Data on the composition of web page weight, including the share attributed to images.
  2. Google Developers – WebP – Google’s documentation on WebP format, including compression comparisons with JPEG and PNG.
  3. WordPress Core – Lazy-loading images in 5.5 – Official announcement of native lazy loading support in WordPress 5.5.
  4. web.dev – Web Vitals – Google’s documentation on Core Web Vitals metrics including LCP, INP, and CLS.
  5. Google Search Central – Page Experience Ranking – Google’s announcement that page experience signals, including Core Web Vitals, are used as a ranking factor.
  6. Cloudflare – Website Performance and Conversion Rates – Research on the relationship between page load time and conversion rates.