Home
Guide Website Optimization 8 steps

A website speed checklist for small businesses

Most slow small-business sites are slow for the same handful of reasons. This is the checklist we run — on client sites, and on our own. Work through it in order, starting with measurement.

Measure before you touch anything.

Run the page through PageSpeed Insights and read the mobile result first. Phones tend to have slower processors and connections than desktops, so that’s where slow pages hurt most.

Look at the three Core Web Vitals. Google’s “good” thresholds are:

≤ 2.5sLCP · main content shows
≤ 200msINP · responds to a tap
≤ 0.1CLS · page holds still
  • Largest Contentful Paint (LCP): how fast the main content shows up.
  • Interaction to Next Paint (INP): how fast the page responds to a tap or click.
  • Cumulative Layout Shift (CLS): how much the page jumps around while it loads.

Write the numbers down. Without a before, you can’t prove an after.

Thresholds: web.dev/articles/vitals.

Fix the images.

Images are often the heaviest files on a page, and the easiest to fix.

  • Resize to the size it’s shown. A 4000-pixel photo in a 600-pixel slot is pure waste.
  • Serve modern formats. AVIF or WebP, with a JPEG fallback inside a <picture> element.
  • Set width and height on every image so the browser reserves the space. That removes one of the most common causes of layout shift.
  • Lazy-load what’s below the fold with loading="lazy". Never the hero.

On our own site, the About photo was a 320 KB JPEG. The AVIF we serve now is 52 KB. The homepage hero went from 188 KB to 25 KB.

Treat the hero as the priority.

The biggest thing above the fold is usually your LCP element — and the browser doesn’t know that unless you tell it.

  • Preload the hero image and give it fetchpriority="high".
  • Don’t lazy-load it, and don’t hide it behind a slider or a fade-in script.
  • If the hero is text, make sure the font it uses loads early (step 04).

Self-host your fonts.

Loading fonts from a third-party service adds a round trip to another server before your text can render.

  • Download the WOFF2 files and serve them from your own domain.
  • Use font-display: swap so text shows immediately in a fallback font.
  • Preload only the one or two weights used above the fold.
  • Cut the weights you don’t use. Every weight is another file.

We made exactly this move on our own site in August — and it’s the same one we describe in our LumID case study.

Audit every third-party script.

Chat widgets, trackers, heatmaps, review badges, embedded feeds. Each one costs load time, and it’s common to find a few nobody looks at anymore.

  • List every script the page loads.
  • For each one, name who uses its data and when they last did.
  • Remove the ones with no answer. Load the rest after the page is usable.

Cache what doesn’t change.

Logos, fonts, images, CSS — files that only change when you redeploy should be cached by the browser for a long time. On our site, everything under /assets/ is served with a one-year immutable cache, so a returning visitor downloads it once.

Your host or CDN usually has a setting for this. On Cloudflare Pages it’s a two-line _headers file.

Know what you can’t fix.

On some site builders, part of the page weight belongs to the platform, not to you. That’s worth knowing before you spend a week shaving kilobytes. Sometimes the fastest fix is owning the site outright.

Measure again — then keep measuring.

Re-run PageSpeed Insights and compare against step 01. Then check it monthly, and after every new plugin, widget or embed. Speed doesn’t break all at once. It erodes one script at a time.

We can run this on your site

Website Optimization is one of our three practices — senior-led, no junior hand-offs.

Tell us what you’re working on
See our work