内容管理
学习 Hugo 的 Front Matter、栏目、分类标签、页面资源、短代码和中文内容写作组织方式
内容管理
Hugo 的内容通常使用 Markdown 编写,放在 content/ 目录中。内容管理的核心是三件事:把文件放在合适的栏目,写好 Front Matter,用清晰的分类和资源组织方式长期维护。
内容文件类型
Hugo 支持多种内容格式:
| 格式 | 扩展名 | 适用场景 |
|---|---|---|
| Markdown | .md、.markdown | 博客、文档、笔记,最常用 |
| HTML | .html | 需要完整控制 HTML 的页面 |
| AsciiDoc | .adoc | 复杂技术文档 |
| reStructuredText | .rst | Python 文档生态 |
| Org Mode | .org | Emacs 用户 |
日常建站优先使用 Markdown。
Front Matter
Front Matter 是文件顶部的元数据。Hugo 支持 YAML、TOML、JSON 三种写法。
YAML 写法
---
title: "Hugo 内容管理"
date: 2026-06-10T10:00:00+08:00
draft: false
description: "学习 Hugo 内容文件、分类和页面资源"
categories: ["Hugo"]
tags: ["内容管理", "Markdown"]
---
TOML 写法
+++
title = 'Hugo 内容管理'
date = 2026-06-10T10:00:00+08:00
draft = false
description = '学习 Hugo 内容文件、分类和页面资源'
categories = ['Hugo']
tags = ['内容管理', 'Markdown']
+++
本站文档通常使用 YAML 风格,和大多数中文教程一致。
常用 Front Matter 字段
| 字段 | 作用 | 示例 |
|---|---|---|
title | 页面标题 | "快速开始" |
date | 发布日期 | 2026-06-10T10:00:00+08:00 |
lastmod | 最后修改时间 | 2026-06-11 |
draft | 是否草稿 | true |
description | 页面描述,常用于 SEO | "Hugo 入门教程" |
slug | URL 片段 | "hugo-guide" |
weight | 排序权重 | 10 |
categories | 分类 | ["Hugo"] |
tags | 标签 | ["博客", "静态网站"] |
series | 系列 | ["Hugo 实战"] |
aliases | 旧链接跳转 | ["/old-url/"] |
featured_image | 封面图 | "/images/cover.jpg" |
具体字段还取决于主题。主题说明中列出的参数,通常也写在 Front Matter 中。
创建内容
推荐使用 Hugo 命令创建内容,这样会自动套用 archetype:
hugo new content posts/hello-hugo.md
hugo new content docs/guide/installation.md
hugo new content about.md
如果你手动创建 Markdown,也可以正常工作,只要 Front Matter 写对即可。
栏目与 Section
content/ 下的一级目录通常就是 Section:
content/
├── posts/
├── notes/
├── docs/
└── good-things/
对应 URL:
/posts/
/notes/
/docs/
/good-things/
Hugo 会根据 Section 查找模板。例如 content/posts/hello.md 通常会使用 layouts/posts/single.html 或 layouts/_default/single.html。
列表页内容
栏目首页使用 _index.md:
content/posts/_index.md
示例:
---
title: "文章"
description: "技术、生活和长期学习记录"
weight: 1
---
# 文章
这里是我的博客文章列表。
主题通常会把 _index.md 的内容显示在列表页顶部。
页面排序
文档类页面常用 weight 控制顺序:
---
title: "安装 Hugo"
weight: 2
---
常见排序规则:
- 文档教程:使用
weight - 博客文章:使用
date倒序 - 导航菜单:使用菜单项
weight
模板中可以这样排序:
{{ range .Pages.ByWeight }}
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
{{ end }}
草稿、未来内容和过期内容
草稿:
draft: true
未来发布日期:
date: 2030-01-01T10:00:00+08:00
过期时间:
expiryDate: 2026-12-31T23:59:59+08:00
开发时显示:
hugo server -D -F -E
对应含义:
-D显示草稿-F显示未来内容-E显示过期内容
正式构建默认不包含这些内容。
分类与标签
分类适合少量、稳定、互斥或半互斥的主题;标签适合更细、更自由的关键词。
推荐做法:
categories: ["技术"]
tags: ["Hugo", "静态网站", "Markdown"]
不要把分类和标签都写得太碎。长期维护时,分类建议控制在 5 到 12 个以内,标签可以更灵活。
Page Bundles 管理资源
当文章有封面图、图集、附件时,建议使用 Page Bundle:
content/posts/hugo-image-demo/
├── index.md
├── cover.jpg
├── step-1.png
└── demo.zip
内容中引用同目录资源:

[下载示例文件](demo.zip)
模板中处理封面:
{{ with .Resources.GetMatch "cover.*" }}
{{ $cover := .Fill "1200x630 webp" }}
<img src="{{ $cover.RelPermalink }}" alt="{{ $.Title }}">
{{ end }}
页面资源跟随文章移动,长期维护更不容易乱。
短代码 Shortcodes
短代码用于在 Markdown 中插入可复用组件。Hugo 内置了一些短代码,主题也可能提供自己的短代码。
常见用法:
{{< figure src="cover.jpg" title="封面图" >}}
自定义短代码放在:
layouts/shortcodes/notice.html
示例:
<div class="notice notice-{{ .Get "type" | default "info" }}">
{{ .Inner | markdownify }}
</div>
Markdown 中使用:
{{< notice type="warning" >}}
这里是一段提示内容。
{{< /notice >}}
摘要控制
Hugo 可以自动生成摘要,也可以手动指定分隔符:
这是文章开头,会出现在摘要中。
这里是正文的后续部分。
Front Matter 中也可以写:
summary: "这是一段手写摘要。"
优先级通常是手写 summary 高于 <!--more-->,再高于自动摘要。
别名与旧链接跳转
迁移站点时可以使用 aliases 保留旧链接:
---
title: "新的文章地址"
aliases:
- /old-post/
- /2024/old-post.html
---
Hugo 会为旧地址生成跳转页面。部署后,旧链接访问者会跳到新页面。
中文内容建议
- 设置
hasCJKLanguage = true - 标题尽量稳定,URL 使用
slug控制 - 中文标签不要无限扩散,定期合并同义标签
- 代码块加语言标识,方便高亮
- 图片写清楚
alt,利于可访问性和搜索 - 长文用二级、三级标题组织层级
示例:
```go
fmt.Println("Hello Hugo")
```
内容目录建议
个人博客可以这样组织:
content/
├── posts/ # 正式文章
├── notes/ # 短笔记
├── docs/ # 系列文档
├── photos/ # 相册
├── bookmarks/ # 书签
├── about.md
└── _index.md
技术文档可以这样组织:
content/docs/
├── _index.md
├── getting-started/
│ ├── _index.md
│ ├── installation.md
│ └── quick-start.md
├── guides/
└── reference/
发布前检查
- 标题、描述、日期是否完整
draft是否已经改为false- 图片路径是否正确
- 分类和标签是否统一
- 内链是否能打开
- 旧文章迁移是否配置
aliases - 本地执行
hugo --minify是否成功
下一步
继续阅读 模板系统,学习内容如何变成最终页面。
评论