
Hugo 前置参数(Front Matter)中的 title 字段原生不解析 Markdown,但可通过模板函数 markdownify 在页面渲染时动态转换,实现如删除线、斜体等富文本效果。
hugo 前置参数(front matter)中的 `title` 字段原生不解析 markdown,但可通过模板函数 `markdownify` 在页面渲染时动态转换,实现如删除线、斜体等富文本效果。
在 Hugo 中,Front Matter(无论是 TOML、YAML 还是 JSON)仅作为元数据解析,其内容(包括 title)被当作纯字符串读取,不会经过 Markdown 解析器处理。因此,即使你在 TOML 中写 title = "Grab it for <s>$100</s> $40" 或 title = "Hello *world*",Hugo 也不会自动将 <s></s> 渲染为删除线,也不会将 *world* 转为斜体——HTML 标签会被原样输出(可能被转义),而 Markdown 语法则完全无效。
✅ 正确做法:在模板层启用 Markdown 渲染
你需要在对应布局文件(如 layouts/_default/single.html、layouts/posts/single.html 或 layouts/partials/header.html)中,将原本直接输出 .Title 的地方改为:
<h1>{{ .Title | markdownify }}</h1>markdownify 是 Hugo 内置的模板函数,它会将字符串作为 Markdown 源码解析,并安全地转换为 HTML(自动转义潜在危险标签,同时保留合法内联 HTML,如 <s></s>、<em></em> 等,前提是未禁用 unsafe 模式)。
⚠️ 注意事项:
- 确保你的 Hugo 版本 ≥ 0.18(
markdownify自此版本引入); - 若标题中含用户可控内容,
markdownify默认已做 XSS 防护(不执行<script></script>,过滤危险属性),但建议避免在title中嵌入复杂 HTML; - 若使用 Goldmark(Hugo 默认解析器,v0.60+),需确认
markup.goldmark.renderer.unsafe = true(在config.toml中)才能保留原始 HTML 标签(如<s></s>);否则 Goldmark 会过滤掉非白名单 HTML。配置示例:
[markup.goldmark.renderer] unsafe = true
? 小技巧:你也可以结合其他函数增强可读性,例如自动转义后再 Markdown 化(更安全):
<h1>{{ .Title | htmlUnescape | markdownify }}</h1>这样,即使 Front Matter 中写了 title = "Buy <s>$100</s> $40",也能正确还原并渲染。
总结:Hugo 不在 Front Matter 层支持 Markdown,但通过 {{ .Title | markdownify }} + 合理配置 Goldmark,即可优雅实现标题富文本,兼顾语义、安全与灵活性。


















