{"record":{"id":"43d6300b0a7e7d0f","repo":"gohugoio/hugo","slug":"renderdeferred-w","errorCode":null,"errorMessage":"renderDeferred: %w","messagePattern":"renderDeferred: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"hugolib/hugo_sites_build.go","lineNumber":213,"sourceCode":"\n\tif prepareErr == nil {\n\t\tif err := h.render(infol, conf); err != nil {\n\t\t\th.SendError(fmt.Errorf(\"render: %w\", err))\n\t\t}\n\n\t\t// Make sure to write any build stats to disk first so it's available\n\t\t// to the post processors.\n\t\tif err := h.writeBuildStats(); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// We need to do this before render deferred.\n\t\tif err := h.printPathWarningsOnce(); err != nil {\n\t\t\th.SendError(fmt.Errorf(\"printPathWarnings: %w\", err))\n\t\t}\n\n\t\tif err := h.renderDeferred(infol); err != nil {\n\t\t\th.SendError(fmt.Errorf(\"renderDeferred: %w\", err))\n\t\t}\n\n\t\t// This needs to be done after the deferred rendering to get complete template usage coverage.\n\t\tif err := h.printUnusedTemplatesOnce(); err != nil {\n\t\t\th.SendError(fmt.Errorf(\"printPathWarnings: %w\", err))\n\t\t}\n\n\t\tif err := h.postProcess(infol); err != nil {\n\t\t\th.SendError(fmt.Errorf(\"postProcess: %w\", err))\n\t\t}\n\t}\n\n\tif h.Metrics != nil {\n\t\tvar b bytes.Buffer\n\t\th.Metrics.WriteMetrics(&b)\n\n\t\th.Log.Printf(\"\\nTemplate Metrics:\\n\\n\")\n\t\th.Log.Println(b.String())","sourceCodeStart":195,"sourceCodeEnd":231,"githubUrl":"https://github.com/gohugoio/hugo/blob/52c9bd7908b4d02d4d0ff8f82a888834d6ee10d2/hugolib/hugo_sites_build.go#L195-L231","documentation":"Sent via SendError when renderDeferred() fails. Deferred rendering handles content marked with the deferred render hook (e.g. RenderShortcodes / render-code blocks resolved after the main render). The %w is the deferred-render error.","triggerScenarios":"Raised at hugo_sites_build.go:213 when h.renderDeferred(infol) errors — a deferred template/hook fails to execute, or output writing for deferred content fails.","commonSituations":"A {{% shortcode %}} deferred render whose template errors; markdown render hooks referencing missing partials; an image/resource processed during deferred render that is missing or corrupt; version mismatch introducing a render-hook bug.","solutions":["Unwrap %w — it usually points to the deferred hook/shortcode template and line.","Fix the render hook / shortcode partial that errors during deferred rendering.","Verify resources referenced in deferred content exist (images, snippets).","Reproduce on a page using RenderShortcodes to isolate the failing template."],"exampleFix":"<!-- before: render hook with bad call -->\n{{ .Page.RenderString .Text | foo }}\n<!-- foo undefined -> renderDeferred error -->\n\n<!-- after -->\n{{ .Page.RenderString .Text }}","handlingStrategy":"try-catch","validationCode":"// Validate render-hook partials and shortcodes resolve before relying on deferred render.\nfor _, p := range deferredPartialNames { if _, err := layouts.Lookup(p); err != nil { return err } }","typeGuard":null,"tryCatchPattern":"if err := h.renderDeferred(l); err != nil {\n    // deferred render errors cite the hook/shortcode; log and continue if non-critical\n    h.Log.Errorf(\"renderDeferred: %v\", err)\n}","preventionTips":["Unit-test render hooks and shortcode partials in isolation.","Verify resources referenced in deferred content exist.","Keep RenderShortcodes usage consistent with the installed Hugo version."],"tags":["build","rendering","shortcodes","deferred","hugo"],"backgroundTag":null,"analyzedSha":"52c9bd7908b4d02d4d0ff8f82a888834d6ee10d2","analyzedAt":"2026-08-09T21:49:36.660Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}