A static site is simple to publish, but simplicity does not remove the need for a release check. The useful checks are small enough to run on every release and specific enough to fail for a real reason.
Build a clean artifact
Use a pinned generator version and build into a disposable output directory:
hugo version
hugo --gc --minify --destination public
The exact command depends on the project, but the important property is that the output is reproducible from the tracked source. Do not edit generated HTML by hand after the build.
Check the artifact, not only the source
Inspect the generated tree and verify that expected entry points exist:
test -s public/index.html
test -s public/404.html
test -s public/robots.txt
test -s public/sitemap.xml
find public -type f -print | sort
Then search for accidental placeholders, local paths, and development-only hosts:
rg -n 'localhost|127\.0\.0\.1|TODO|example\.com|/Users/' public --glob '!notes/a-release-checklist-for-a-static-site/**'
An intentional example in an article should be clearly fenced as an example. A host name or private path in a link is usually a release mistake.
Exercise the public routes
Serve the artifact locally and request the paths a visitor can reach:
hugo server --bind 127.0.0.1 --port 1313 --disableFastRender
curl -I http://127.0.0.1:1313/
curl -I http://127.0.0.1:1313/notes/
curl -I http://127.0.0.1:1313/resources/
curl -I http://127.0.0.1:1313/missing-page/
Confirm that the 404 route returns a 404 status in the production server. A pretty error page with a 200 status still breaks monitoring and caches.
Record the result
Keep the source commit, generator version, and checksum of each downloadable resource in the release record. This makes it possible to compare a live file with the source that produced it without relying on memory.
The downloadable version of this checklist is in the Resources section.
Sources
- Hugo command reference, checked 2026-08-22.
- curl manual, checked 2026-08-22.
- Static-site release checklist, downloadable companion resource.