{"id":"595d8067fcc002aa","repo":"gohugoio/hugo","slug":"http-aliases-not-supported-q","errorCode":null,"errorMessage":"http* aliases not supported: %q","messagePattern":"http\\* aliases not supported: %q","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"hugolib/page__meta.go","lineNumber":762,"sourceCode":"\t\t\t// lower case names:\n\t\t\tfor i, s := range o {\n\t\t\t\to[i] = strings.ToLower(s)\n\t\t\t}\n\t\t\tpm.pageConfig.Outputs = o\n\t\tcase \"draft\":\n\t\t\tdraft = new(bool)\n\t\t\t*draft = cast.ToBool(v)\n\t\tcase \"layout\":\n\t\t\tpcfg.Layout = cast.ToString(v)\n\t\t\tpcfg.Params[loki] = pcfg.Layout\n\t\tcase \"weight\":\n\t\t\tpcfg.Weight = cast.ToInt(v)\n\t\t\tpcfg.Params[loki] = pcfg.Weight\n\t\tcase \"aliases\":\n\t\t\tpcfg.Aliases = cast.ToStringSlice(v)\n\t\t\tfor i, alias := range pcfg.Aliases {\n\t\t\t\tif strings.HasPrefix(alias, \"http://\") || strings.HasPrefix(alias, \"https://\") {\n\t\t\t\t\treturn fmt.Errorf(\"http* aliases not supported: %q\", alias)\n\t\t\t\t}\n\t\t\t\tpcfg.Aliases[i] = filepath.ToSlash(alias)\n\t\t\t}\n\t\t\tpcfg.Params[loki] = pcfg.Aliases\n\t\tcase \"sitemap\":\n\t\t\tpcfg.Sitemap, err = config.DecodeSitemap(ps.s.conf.Sitemap, hmaps.ToStringMap(v))\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"failed to decode sitemap config in front matter: %s\", err)\n\t\t\t}\n\t\t\tsitemapSet = true\n\t\tcase \"iscjklanguage\":\n\t\t\tisCJKLanguage = new(bool)\n\t\t\t*isCJKLanguage = cast.ToBool(v)\n\t\tcase \"translationkey\":\n\t\t\tpcfg.TranslationKey = cast.ToString(v)\n\t\t\tpcfg.Params[loki] = pcfg.TranslationKey\n\t\tcase \"resources\":\n\t\t\tvar resources []map[string]any","sourceCodeStart":744,"sourceCodeEnd":780,"githubUrl":"https://github.com/gohugoio/hugo/blob/8a468df065a75c1c7cf9f6850f32148746590ea5/hugolib/page__meta.go#L744-L780","documentation":"The `aliases` front matter field creates redirect stub pages inside the site's publish directory, so each alias must be a site-relative path. Hugo rejects aliases starting with http:// or https:// because it cannot write a redirect page at an external domain.","triggerScenarios":"Front matter contains `aliases: [\"https://old.example.com/post\"]` or any alias entry with an http(s) prefix; raised while decoding the aliases list during page metadata setup.","commonSituations":"Migrations from another domain where users paste full old URLs as aliases hoping for cross-domain redirects, or copying canonical URLs from a browser into the aliases list.","solutions":["Use only the path portion: `aliases: [\"/old-post/\", \"/2019/old-post/\"]`.","For redirects from a different domain, configure them at the old domain's server/CDN (e.g. Netlify _redirects, nginx), not in Hugo aliases."],"exampleFix":"# before\n---\naliases:\n  - https://example.com/old-url/\n---\n# after\n---\naliases:\n  - /old-url/\n---","handlingStrategy":"validation","validationCode":"// Validate aliases before build\nfor _, a := range aliases {\n    if strings.HasPrefix(strings.ToLower(a), \"http\") {\n        return fmt.Errorf(\"alias %q must be relative\", a)\n    }\n}","typeGuard":"func validAlias(a string) bool {\n    return !strings.HasPrefix(strings.ToLower(a), \"http\")\n}","tryCatchPattern":"if err := site.Build(); err != nil {\n    if strings.Contains(err.Error(), \"aliases not supported\") {\n        // convert absolute alias URLs to site-relative paths\n    }\n    return err\n}","preventionTips":["Aliases are site-internal redirects — use relative paths like `/old-path/`","For redirects to external domains, use server-level redirects (Netlify _redirects, nginx), not Hugo aliases","Lint front matter aliases arrays for `http` prefixes in CI"],"tags":["hugo","front-matter","aliases","redirects"],"analyzedSha":"8a468df065a75c1c7cf9f6850f32148746590ea5","analyzedAt":"2026-07-31T21:23:07.045Z","schemaVersion":2}