---
title: "Perfect 100/100 Lighthouse score with Hugo and plain CSS"
description: "My Hugo homepage scored 100 in all four Lighthouse categories on mobile and desktop. I use plain CSS, system fonts and responsive images."
date: 2026-10-05
author: "Philipp D. Dubach"
categories:
  - "Tech"
keywords:
  - "Hugo Lighthouse 100"
  - "Hugo performance optimization"
  - "Lighthouse 100 mobile desktop"
  - "static website performance optimization"
  - "Hugo plain CSS starter"
  - "Hugo static site"
  - "plain CSS website"
  - "system fonts"
  - "deferred JavaScript"
  - "responsive images"
  - "srcset and sizes"
  - "image dimensions"
  - "Hugo asset minification"
  - "Hugo resource fingerprinting"
  - "immutable asset caching"
  - "Cloudflare R2 images"
  - "largest contentful paint"
  - "total blocking time"
  - "cumulative layout shift"
  - "Hugo starter template"
type: "Project"
canonical_url: "https://philippdubach.com/posts/hugo-lighthouse-100/"
source_url: "https://philippdubach.com/posts/hugo-lighthouse-100/index.md"
---

# Perfect 100/100 Lighthouse score with Hugo and plain CSS

*Philipp D. Dubach · Published October 5, 2026*


## Key Takeaways

- The homepage scored 100 in all four main Lighthouse categories on mobile and desktop on 5 October 2026.
- Static HTML, system fonts, deferred scripts and cached files keep the first page load small.
- The mobile test recorded a 1.5-second largest contentful paint, zero blocking time and zero layout shift.


---


![Mobile Lighthouse 13.5.0 report for the Hugo homepage: 100 in all four main categories, 1.5-second largest contentful paint, zero blocking time and zero layout shift.](https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=85,format=auto/lighthouse-homepage-mobile-cropped-2026-10-05-66e577f36e.png)

## My hugo blog setup

I use Hugo to build static HTML. Caddy serves the files from my Hetzner server, with Cloudflare in front. I describe the hosting and deployment in [The Tech behind this Site](/posts/the-tech-behind-this-site/).

The site uses plain CSS and fonts already on your device. Hugo [minifies](https://gohugo.io/functions/resources/minify/) the CSS and JavaScript and [changes their filenames](https://gohugo.io/functions/resources/fingerprint/) when the contents change. I cache these files for a year. After an update, your browser requests the new filename. One script handles the menu, theme switch and image viewer. It loads with `defer`.

My images are in Cloudflare R2. The Hugo image shortcode sets `srcset` and `sizes` so your browser can choose an image that fits the reading column and screen. I set each image's width and height so the page leaves room before it loads. Most images load as you approach them on the page. I load MathJax only for equations and the audio script only for posts with a player.

I use native buttons and dialogs, label the controls and keep keyboard focus visible. The layout fits narrow screens. Theme changes respect your reduced-motion setting.

Before publishing, the build checks the HTML, metadata, links, feeds and layout. If a check fails, the current version stays live.

![Desktop Lighthouse 13.5.0 report for the Hugo homepage: 100 in all four main categories, 0.4-second largest contentful paint, zero blocking time and zero layout shift.](https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=85,format=auto/lighthouse-homepage-desktop-2026-10-05-7eec0571bb.png)

You can find the layout, styles, image shortcodes and build checks in this [plain-CSS Hugo starter](https://github.com/philippdubach/hugo-plain-css-starter). It uses placeholder content.

---

## Frequently Asked Questions


### Can a Hugo site score 100 in Lighthouse on mobile and desktop?

My Hugo homepage scored 100 for performance, accessibility, best practices and SEO on both devices on 5 October 2026. The mobile run recorded a 1.5-second largest contentful paint, zero blocking time and zero layout shift.


### How is this Hugo website optimized for performance?

I use Hugo to generate static HTML and minify the CSS and JavaScript. Fonts come from your device, the main script loads with defer, and static files are cached. Images have set dimensions, and MathJax loads only on pages with equations.



---

Canonical: https://philippdubach.com/posts/hugo-lighthouse-100/
This file is the canonical machine-readable variant of https://philippdubach.com/posts/hugo-lighthouse-100/. Author: Philipp D. Dubach (https://philippdubach.com/).
