Short cache busting fingerprints in Hugo Noted 2024-03-28 by Seirdy on his Website. Last updated 2024-03-28. Changelog I use a quick crypto.FNV32a-based fix for short cache-busting fingerprints that doesn’t directly rely on the unstable .Key method. Code snippet 1 (Go template): I use Hugo’s crypto.FNV32a to generate a short hash, then copy the resource to a new path with that fingerprint. {{ $resource := resources.Get . -}} {{- $target_path_formatStr := (replaceRE `(\.[^\.]*)$` ".%d$1" .) -}} {{- $cacheBuster := $resource.Content | crypto.FNV32a -}} {{- $target_path := printf $target_path_formatStr $cacheBuster -}} {{- return resources.Copy $target_path $resource -}} Code snippet 2 (Go template): You can see it used in my site’s head element. I invoke it using partialCached so the fingerprinting only happens once per resource: {{ $icon_svg := partialCached "cache-bust.html" "/favicon.svg" "/favicon.svg" }} {{- printf `<link rel="icon" sizes="any" href="%s" type="image/svg+xml" />` $icon_svg.RelPermalink | safeHTML }} Code snippet 3 (HTML): Here’s a snippet of the final rendered result: <link rel="icon" sizes="any" href="/favicon.2229316949.svg" type="image/svg+xml"/> Encoding it to a higher base and using alphanumerics could shave off 1-2 ch.