A Complete Guide to Improving Your Google PageSpeed Score

A Complete Guide to Improving Your Google PageSpeed Score

Arafat Islam
August 24, 2026
4 min read

A low PageSpeed Insights score is frustrating precisely because the report gives you dozens of suggestions without much sense of priority. Some fixes move the needle enormously; others barely register. Here's how to actually prioritize your effort and get real improvement, not just chase a number.

Speedometer graphic representing website performance

Understand What's Actually Being Measured

PageSpeed Insights scores are built from several weighted metrics, primarily: Largest Contentful Paint (LCP), Total Blocking Time (TBT), Cumulative Layout Shift (CLS), and First Contentful Paint (FCP). TBT and LCP carry the most weight in the scoring formula, so if you're only going to fix a couple of things, start there — a small CLS fix won't move your score nearly as much as reducing your JavaScript execution time.

Reduce JavaScript Execution Time

Heavy JavaScript is the single most common cause of poor scores on modern websites. This usually comes from bloated third-party scripts — analytics tools, chat widgets, ad scripts, tracking pixels — that all execute on page load whether the user needs them immediately or not.

  • Audit every third-party script and remove ones you're not actually using.
  • Defer non-critical scripts so they load after the main content renders.
  • Load chat widgets, popups, and similar tools only after user interaction (scroll, click, or a short delay) rather than immediately.
  • Split large JavaScript bundles so the browser only downloads what's needed for the current page.

Optimize Images Properly

Unoptimized images remain one of the biggest, easiest wins available:

  • Convert to WebP or AVIF format.
  • Serve responsive images sized appropriately for different screen widths using srcset.
  • Lazy-load images below the fold (but not your LCP element — see our LCP guide for that nuance).
  • Compress aggressively; most visitors can't tell the difference between 100% and 80% JPEG quality, but the file size difference can be substantial.

Designer reviewing image assets on a screen

Eliminate Render-Blocking Resources

CSS and synchronous JavaScript loaded in the <head> block the browser from painting anything until they're downloaded and processed:

  • Inline critical above-the-fold CSS directly in the HTML.
  • Load the rest of your CSS asynchronously or defer it.
  • Add async/defer attributes to script tags that don't need to run immediately.

Minimize Main-Thread Work

Total Blocking Time measures how long the browser's main thread is too busy to respond to user input. Heavy JavaScript parsing, style recalculations, and large DOM sizes all contribute. Simplifying your DOM structure (fewer nested elements, less redundant markup) and reducing JS execution both help here directly.

Enable Text Compression and Caching

Small technical wins that add up:

  • Enable gzip or Brotli compression on your server for all text-based responses.
  • Set long cache lifetimes for static assets (CSS, JS, images) that don't change frequently, using proper Cache-Control headers.
  • Use a CDN to reduce latency for visitors far from your origin server.

Fix Layout Shift Issues

Even though CLS carries less weight in the score than LCP/TBT, it's often an easy fix: always specify width and height attributes on images and video embeds so the browser reserves space before the asset loads, and avoid injecting content (ads, banners) above existing content without reserving space for it first.

Re-Test in Context, Not Just Once

PageSpeed scores can vary run to run due to network conditions and server load variability. Test multiple times, and pay more attention to the field data (real user data from Chrome UX Report, shown as "Discover what your real users are experiencing") than the lab data alone, since lab tests are a single simulated run and can be misleading.

The Bottom Line

Chasing a perfect 100 score is usually not worth the effort-to-benefit ratio. Focus on the metrics that carry the most weight — JavaScript execution time and render-blocking resources — and you'll typically see the biggest score jump from the smallest number of changes.