From 6ac7d081d199325c098ac68281aeb6f8df97be52 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sun, 8 Feb 2026 16:20:24 +0100 Subject: [PATCH] hugolib: Don't render default site redirect for non-primary isHTML output formats When a custom output format has isHTML=true but no Path, renderDefaultSiteRedirect would derive intermediate redirect paths from homeLink (e.g. /en/foo.html), creating a spurious redirect at /en/ that overwrites the actual HTML content. Only render the default site redirect for the canonical "html" format or for formats with their own Path prefix (e.g. AMP). Fixes #14482 Co-Authored-By: Joe Mooring Co-Authored-By: Claude Opus 4.6 --- hugolib/alias_test.go | 66 ++++++++++++++++++++++++++++++++++++++++++ hugolib/site_render.go | 2 +- 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/hugolib/alias_test.go b/hugolib/alias_test.go index 320ca7dd7..2867ca10b 100644 --- a/hugolib/alias_test.go +++ b/hugolib/alias_test.go @@ -683,3 +683,69 @@ Home. "/guest/v1.0.0/en/p3 =>/guest/v1.0.0/en/foo/p1/|", ) } + +// Issue 14482 +func TestOutputFormatIsHTMLWithMultilangAliases(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +defaultContentLanguageInSubdir = true +disableKinds = ['page', 'section', 'rss', 'sitemap', 'taxonomy', 'term'] + +[languages.en] +[languages.de] + +[outputFormats.foo] +baseName = 'foo' +isHTML = false +mediaType = 'text/html' + +[outputs] +home = ['html', 'foo'] +-- content/index.de.md -- +--- +title: home de +--- +-- content/index.en.md -- +--- +title: home en +--- +-- layouts/home.html -- +Output format: html|Title: {{ .Title }} +-- layouts/home.foo.html -- +Output format: foo|Title: {{ .Title }} +` + + b := Test(t, files) + + b.AssertFileContent("public/en/index.html", `Output format: html|Title: home en`) + b.AssertFileContent("public/en/foo.html", `Output format: foo|Title: home en`) + b.AssertFileContent("public/de/index.html", `Output format: html|Title: home de`) + b.AssertFileContent("public/de/foo.html", `Output format: foo|Title: home de`) + b.AssertFileContent("public/index.html", ` + + /en/ + + + + + `) + + files = strings.ReplaceAll(files, "isHTML = false", "isHTML = true") + + b = Test(t, files) + + b.AssertFileContent("public/en/index.html", `Output format: html|Title: home en`) + b.AssertFileContent("public/en/foo.html", `Output format: foo|Title: home en`) + b.AssertFileContent("public/de/index.html", `Output format: html|Title: home de`) + b.AssertFileContent("public/de/foo.html", `Output format: foo|Title: home de`) + b.AssertFileContent("public/index.html", ` + + /en/ + + + + + `) +} diff --git a/hugolib/site_render.go b/hugolib/site_render.go index c482e61ce..2da329255 100644 --- a/hugolib/site_render.go +++ b/hugolib/site_render.go @@ -217,7 +217,7 @@ func pageRenderer( } } - if p.IsHome() && p.outputFormat().IsHTML && s.isDefault() { + if of := p.outputFormat(); p.IsHome() && of.IsHTML && s.isDefault() && (of.Path != "" || of.Name == "html") { if err = s.renderDefaultSiteRedirect(p); err != nil { if sendErr(err) { continue -- 2.39.5