gohugoio/hugo · error

no sites to build

Error message

no sites to build

What it means

Emitted during site construction (hugolib/site.go:412) when, after iterating the configured languages/configs, the resulting sites slice is empty. Hugo cannot build anything without at least one site, so it fails fast instead of producing empty output.

Source

Thrown at hugolib/site.go:412

		pub, err := publisher.NewDestinationPublisher(
			firstSiteDeps.ResourceSpec,
			s.conf.OutputFormats.Config,
			s.conf.MediaTypes.Config,
		)
		if err != nil {
			return nil, err
		}

		s.publisher = pub
		s.relatedDocsHandler = page.NewRelatedDocsHandler(s.conf.Related)
		// Site deps end.

		sites = append(sites, s)

	}

	if len(sites) == 0 {
		return nil, errors.New("no sites to build")
	}

	sitesVersionsRoles := make([][][]*Site, len(sites))
	for i := 0; i < len(sites); i++ {
		sitesVersionsRoles[i] = make([][]*Site, len(versionsSorted))
		for j := range versionsSorted {
			sitesVersionsRoles[i][j] = make([]*Site, len(rolesSorted))
		}
	}

	siteVersionRoles := map[types.Ints2][]roles.Role{}
	siteRoleVersions := map[types.Ints2][]versions.Version{}
	// i = site, j = version, k = role
	for i, v1 := range sitesVersionsRoles {
		for j, v2 := range v1 {
			for k := range v2 {
				var vrs *Site
				if j == 0 && k == 0 {

View on GitHub ↗ (pinned to 8a468df065)

Solutions

  1. Check disableLanguages in your config — ensure at least one defined language is not disabled.
  2. Verify the [languages] section defines at least one language and keys aren't misspelled.
  3. Run `hugo config` to inspect the merged configuration (environment overlays may disable languages unexpectedly).

Example fix

# before (hugo.toml)
[languages.en]
[languages.fr]
disableLanguages = ["en", "fr"]
# after
disableLanguages = ["fr"]
Defensive patterns

Strategy: validation

Validate before calling

cfg, err := allconfig.LoadConfig(...)
if err != nil { return err }
if len(cfg.LanguagesDefaultFirst) == 0 {
    return fmt.Errorf("config defines no languages/sites")
}

Prevention

When it happens

Trigger: NewHugoSites/site setup where every configured language is filtered out — e.g. disableLanguages listing all defined languages, or a languages config block that resolves to zero buildable languages.

Common situations: Multilingual configs where disableLanguages accidentally includes every language (often via environment-specific config merging), a typo making the languages map empty, or module/config mounts pulling in a config that disables the only language.

Related errors


AI-assisted analysis of gohugoio/hugo@8a468df065 (2026-07-31). Data as JSON: /data/errors/e337ab51006c9e32.json. Report an issue: GitHub ↗.