LighthousePerformanceQuick WinsCore Web VitalsTutorial

5 Quick Wins to Improve Your Lighthouse Performance Score

Five high-impact, low-effort changes that improve Lighthouse performance scores on almost any website — with code examples for Next.js, WordPress, and plain HTML.

PageSpeed Exporter··10 min read

A Lighthouse performance score below 70 is not unusual for sites that have grown organically — adding third-party scripts, larger images, and more features over time without dedicated performance work. The good news is that most sites have a handful of specific, fixable issues that account for the majority of the score deficit.

This guide covers five changes that reliably improve Lighthouse scores with minimal implementation effort. Each applies to a wide range of sites regardless of tech stack, delivers measurable impact quickly, and can be implemented in a few hours.

After reading this, export your full Lighthouse JSON from PageSpeed Exporter and feed it to an AI agent to get a site-specific prioritized list — these five wins are a good starting point, but your data will show you exactly which ones apply to your site and in what order to tackle them.


Why These Five?

Lighthouse's performance score is a weighted average of six metrics: FCP (10%), Speed Index (10%), LCP (25%), TBT (30%), CLS (15%), and TTI (10%). TBT and LCP together account for 55% of the score — fixes that reduce either of these have the highest scorecard impact.

The five wins below target the most common causes of poor TBT and LCP across real-world sites.


Win 1: Add fetchpriority="high" to Your Largest Contentful Paint Image

Impact on LCP: High Implementation effort: 10 minutes Risk: Very low

The Largest Contentful Paint element is almost always an or a CSS background image on the hero area of your page. The browser does not know this image is critical until it parses the HTML and discovers it — which means it may load it with normal priority, after other less-important resources.

Adding fetchpriority="high" tells the browser to prioritize this image in the resource loading queue, before stylesheets and scripts that have not yet been rendered.

Plain HTML:
<!-- Find your LCP image (usually the hero or first large image on the page) -->
<img
  src="/hero.jpg"
  alt="Hero"
  width="1200"
  height="630"
  fetchpriority="high"
  loading="eager"
>
Also add a preload hint in the :
<head>
  <link rel="preload" as="image" href="/hero.jpg" fetchpriority="high">
</head>
Next.js ( component):
import Image from 'next/image';

<Image
  src="/hero.jpg"
  alt="Hero"
  width={1200}
  height={630}
  priority  // This sets fetchpriority="high" and adds a preload tag automatically
/>
What to avoid: Do not add fetchpriority="high" to multiple images. Only the LCP element benefits — applying it broadly dilutes the browser's prioritization.

How to find your LCP element

Run an audit in PageSpeed Exporter and look at the largest-contentful-paint-element audit in the results. It will identify the exact element causing your LCP render time.


Win 2: Defer Non-Critical Third-Party Scripts

Impact on TBT: High Implementation effort: 30–60 minutes Risk: Medium — test on staging first

Total Blocking Time measures how much the main thread is blocked by JavaScript. Every script that executes during page load competes for the main thread and delays user interaction.

Third-party scripts — analytics, chat widgets, marketing pixels, A/B testing tools — are the most common culprits. They are added incrementally over time, and collectively they often block the main thread for hundreds or thousands of milliseconds.

Strategy: Any script that does not need to run before the user can interact with your page should be deferred or loaded asynchronously. Plain HTML:
<!-- Before: blocking -->
<script src="https://www.googletagmanager.com/gtm.js?id=GTM-XXXXX"></script>

<!-- After: defer until after HTML parsing -->
<script defer src="https://www.googletagmanager.com/gtm.js?id=GTM-XXXXX"></script>
For scripts that should only load after the page is interactive:
<script>
  window.addEventListener('load', function() {
    // Load Intercom, HubSpot, or other non-critical scripts here
    var s = document.createElement('script');
    s.src = 'https://widget.intercom.io/widget/YOUR_APP_ID';
    document.head.appendChild(s);
  });
</script>
Next.js