{"id":"585e8d71dd86f170","repo":"gohugoio/hugo","slug":"no-content-renderer-found-for-markup-q-page-s","errorCode":null,"errorMessage":"no content renderer found for markup %q, page: %s","messagePattern":"no content renderer found for markup %q, page: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"hugolib/page__meta.go","lineNumber":990,"sourceCode":"\t\t\t\tm.pageConfig.Title = strings.Replace(s.conf.C.CreateTitle(m.pathInfo.Unnormalized().BaseNameNoIdentifier()), \"-\", \" \", -1)\n\t\t\t} else {\n\t\t\t\tm.pageConfig.Title = strings.Replace(m.pathInfo.Unnormalized().BaseNameNoIdentifier(), \"-\", \" \", -1)\n\t\t\t}\n\t\tcase kinds.KindStatus404:\n\t\t\tm.pageConfig.Title = \"404 Page not found\"\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (m *pageMeta) newContentConverter(ps *pageState, markup string) (converter.Converter, error) {\n\tif ps == nil {\n\t\tpanic(\"no Page provided\")\n\t}\n\tcp := ps.s.ContentSpec.Converters.Get(markup)\n\tif cp == nil {\n\t\treturn converter.NopConverter, fmt.Errorf(\"no content renderer found for markup %q, page: %s\", markup, ps.getPageInfoForError())\n\t}\n\n\tvar filename string\n\tvar path string\n\tif m.f != nil {\n\t\tfilename = m.f.Filename()\n\t\tpath = m.f.Path()\n\t} else {\n\t\tpath = m.Path()\n\t}\n\n\tdoc := newPageForRenderHook(ps)\n\n\tdocumentLookup := func(id uint64) any {\n\t\tif id == ps.pid {\n\t\t\t// This prevents infinite recursion in some cases.\n\t\t\treturn doc\n\t\t}","sourceCodeStart":972,"sourceCodeEnd":1008,"githubUrl":"https://github.com/gohugoio/hugo/blob/8a468df065a75c1c7cf9f6850f32148746590ea5/hugolib/page__meta.go#L972-L1008","documentation":"When creating a content converter for a page, Hugo looks up a registered content renderer (goldmark, asciidocext, pandoc, rst, org, html) by the page's markup identifier. If ContentSpec.Converters.Get returns nil — the markup name is unknown or its external helper/config is unavailable — Hugo returns this error instead of rendering, naming the page for diagnosis.","triggerScenarios":"A page sets `markup: something` in front matter (or has a file extension) that doesn't match any registered converter, e.g. `markup: markdown2`, `markup: asciidoc` when security.exec doesn't allow the asciidoctor binary registration, or a typo like `mardown`.","commonSituations":"Typos in the markup front matter field, using .ad/.rst/.pandoc content without installing the external tool, version upgrades where a markup engine was removed (e.g. blackfriday removed in Hugo 0.100), or content copied from another site using a different engine.","solutions":["Fix the `markup` value in front matter to a supported identifier (markdown/goldmark, html, asciidocext, pandoc, rst, org) or remove it to use the extension-based default.","If using AsciiDoc/Pandoc/RST, install the external binary (asciidoctor, pandoc, rst2html) and allow it under security.exec.allow in the site config.","If upgrading from an old Hugo that used blackfriday, switch the content to goldmark-compatible markdown."],"exampleFix":"# before\n---\nmarkup: mardown\n---\n# after\n---\nmarkup: markdown\n---","handlingStrategy":"validation","validationCode":"// Verify markup format is registered before assigning it to content\nvalid := map[string]bool{\"markdown\": true, \"html\": true, \"goldmark\": true, \"asciidocext\": true, \"pandoc\": true, \"rst\": true, \"org\": true, \"emacs-org-mode\": true}\nif m, ok := fm[\"markup\"].(string); ok && !valid[strings.ToLower(m)] {\n    return fmt.Errorf(\"unknown markup %q\", m)\n}","typeGuard":"func markupSupported(m string) bool {\n    switch strings.ToLower(m) {\n    case \"\", \"markdown\", \"goldmark\", \"html\", \"org\", \"emacs-org-mode\", \"asciidocext\", \"pandoc\", \"rst\":\n        return true\n    }\n    return false\n}","tryCatchPattern":"if err := site.Build(); err != nil {\n    if strings.Contains(err.Error(), \"no content renderer found for markup\") {\n        // either fix the markup value/file extension, or install the external tool (asciidoctor, pandoc, rst2html)\n    }\n    return err\n}","preventionTips":["Match file extensions to renderers (.md, .html, .org, .adoc, .pandoc, .rst) instead of overriding `markup` in front matter","External-format renderers (asciidoc, pandoc, rst) require the external binary installed AND allowed via security.exec config","Check `hugo config` / docs for supported markup identifiers before setting `markup` explicitly"],"tags":["hugo","markup","content-renderer","goldmark"],"analyzedSha":"8a468df065a75c1c7cf9f6850f32148746590ea5","analyzedAt":"2026-07-31T21:23:07.045Z","schemaVersion":2}