If you run a WordPress site and the Lighthouse score makes you avoid testing it, you're not alone. We audited 30 NZ small-business sites in May. The median performance score was 34/100. Twenty-seven of them shared the exact same five problems.

This isn't a "you need to migrate to React" post. WordPress is fine. The issues are almost always preventable with config changes, not rewrites.

Sin 1: 4MB hero images

The #1 problem on every slow site we audited: hero images shipped as 4MB JPEGs straight from the photographer. Modern browsers support AVIF and WebP — formats that ship the same visual quality at 10–20% of the file size.

// In your theme functions.php
add_filter('wp_image_editors', function($editors) {
  return ['WP_Image_Editor_Imagick', 'WP_Image_Editor_GD'];
});

// Then add  elements to your templates:
<picture>
  <source srcset="hero.avif" type="image/avif">
  <source srcset="hero.webp" type="image/webp">
  <img src="hero.jpg" alt="">
</picture>

Easier: install WebP Express or use a plugin like Smush Pro. The free tier is enough for most small sites.

Rule of thumb: no image above the fold should exceed 200KB. Above the fold is where every byte costs you LCP.

Sin 2: Render-blocking plugins

Each plugin adds CSS and JS that loads in the document head, blocking the page from rendering until it parses. The median audit site had 32 active plugins. Half were unused.

Audit them. Anything you don't use, deactivate and delete (deactivating still loads the plugin file). For the ones you keep, defer non-critical JS:

add_filter('script_loader_tag', function($tag, $handle) {
  if (in_array($handle, ['google-analytics', 'social-widgets'])) {
    return str_replace(' src', ' defer src', $tag);
  }
  return $tag;
}, 10, 2);

Sin 3: No edge caching

If your site lives on a single NZ server and your visitor is in Sydney, every request crosses the Tasman before it returns. Cloudflare's free tier solves this in 10 minutes.

Single biggest performance win for the lowest effort. Every site we work on goes through Cloudflare by default.

Sin 4: Fonts loaded the wrong way

Google Fonts via <link> tag adds three round-trips before your text renders. Self-host or preload:

<link rel="preload"
  href="/fonts/inter-var.woff2"
  as="font" type="font/woff2"
  crossorigin>

Combined with font-display: swap in your CSS, you'll see text instantly, even if the font is still loading.

Sin 5: Bloated themes

If you bought a $59 theme on ThemeForest, it ships with 12 sliders, a parallax library, an icon set you don't use, and a page builder. All of it loads on every page.

The hardest sin to fix because the answer is often "rebuild the theme". But if you can't, at minimum:

  1. Disable the page builder where you can
  2. Use a CSS dequeue plugin to strip unused styles
  3. Run Coverage in Chrome DevTools to see exactly what JS is unused

The results

On the 30 sites we audited, applying just sins 1–3 took median performance from 34 → 78. Three of them crossed 90. Total time invested: under 4 hours each.

If you want us to audit yours, drop us a note — we do free 30-minute teardowns of any NZ site.


Found this useful? Two new posts a month — subscribe to the newsletter.