← Field notes

How to hit 100/100 on PageSpeed Insights

performancepagespeedcore-web-vitals

A perfect PageSpeed score looks impressive, but chasing the number is the wrong goal. The right goal is a site that feels instant. The score is just the symptom. That said, the checklist below gets you both.

Ship almost nothing

Every script is a liability. Start with the assumption that JavaScript is optional and add it back only when an interaction genuinely needs it. A static page with one stylesheet and zero scripts will score 100 by default. The work is protecting that baseline.

Convert images before they ship

Images are where most sites lose the battle. Three rules:

  • Use WebP or AVIF, not JPEG and PNG.
  • Size images to what’s actually displayed — a 4000px photo in a 600px container is just wasted bytes.
  • Set width and height (or aspect-ratio) so nothing shifts when it loads.

Fix the LCP chain

Largest Contentful Paint is a chain: DNS, connection, server, then the asset itself. On a static site on a CDN, the first three links are nearly free. What’s left is making sure the LCP image or headline isn’t waiting on anything — preload the hero image, self-host fonts, and don’t render-block the first paint with a font stylesheet.

Don’t let third parties drag you down

Analytics, chat widgets, and embedded videos each add seconds and occasionally break the page. Load them deferred, behind user interaction, or not at all. The moment a third-party script enters the critical path, 100/100 is gone and it isn’t coming back.

The honest version

If the site is genuinely fast, a 100 is just documentation. If it isn’t, no amount of defer-and-lazy-load will make it feel fast. Fix the architecture first, measure second.