
本指南教你如何用 Hugo 这个写在 Go 里的静态网站生成器,在 30 分钟内完成从安装、选主题、写文章、本地预览到 Nginx 或 CDN 上线部署的全套流程。Hugo 是 Jamstack 生态里编译速度最快的工具,一千篇 Markdown 文章可以在几百毫秒内编译成静态 HTML,让本地写作和持续部署都很顺手。和需要 PHP、MySQL 的 WordPress 不一样,Hugo 输出纯静态文件,没有数据库、没有运行时,托管成本几乎为零、被攻击面也小得多。本指南帮助你把一台空白服务器或者本地 macOS / Linux / Windows 设备配好 Hugo,挑一个体面的主题,理清楚 content/、layouts/、config.toml 这几个核心目录的关系,最后通过 rsync、GitHub Actions 或 Cloudflare Pages 把网站推上线,并解决中文站点常见的字体、目录与 SEO 配置问题。
为什么选 Hugo 而不是别的静态生成器
Jamstack 这几年涌现了一堆静态站点生成器,Hexo、Jekyll、Eleventy、Astro、Next.js SSG 各有各的拥趸。Hugo 的核心优势集中在三件事:
- 编译速度:一千篇文章 600 毫秒,Hexo 同等规模需要 30 秒以上
- 单一二进制:不依赖 Node.js 或 Ruby 运行时,跨平台分发就一个
hugo文件 - 内置功能完整:分页、分类、多语言、RSS、Sitemap、图片处理、Shortcode 都不用装插件
如果你的站点是文档型、博客型、营销页这三类,Hugo 是稳妥的选择。如果你需要复杂的前端交互组件,Astro 或 Next.js SSG 更合适。本指南聚焦在博客和文档场景。
选择 Hugo 还有一个常被忽略的好处:本地开发反馈循环很短,改标题、调 CSS、换图浏览器瞬间刷新,对长期维护的博客也友好,Markdown 纯文本格式让几年后换工具也只需改改 frontmatter。
安装 Hugo 与初始化项目
macOS 用 Homebrew、Linux 用包管理器或直接下二进制、Windows 推荐 Scoop。建议装 extended 版本,因为大部分主题依赖 SCSS 支持:
## macOS
brew install hugo
## Ubuntu / Debian
sudo apt install hugo
## 验证
hugo version
## hugo v0.140.x extended
新建一个站点很简单:
hugo new site my-blog
cd my-blog
git init
初始化完得到的目录结构里,content/ 放 Markdown 文章,layouts/ 放模板,static/ 放图片等静态资源,config.toml(或 hugo.toml)是核心配置。先打开 hugo.toml,把 baseURL、languageCode = "zh-cn"、title 写好,方便后面调试。
安装主题与第一篇文章
Hugo 的主题生态很大,比较出名的中文友好主题有 PaperMod、LoveIt、hugo-theme-stack。以 PaperMod 为例:
git submodule add https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod
echo 'theme = "PaperMod"' >> hugo.toml
写第一篇文章用 hugo new 命令,它会读 archetypes/default.md 模板自动生成 frontmatter:
hugo new posts/hello-world.md
打开生成的文件,把 draft: true 改成 false 才会被编译进生产环境。Markdown 正文部分支持代码块、表格、脚注,以及 Hugo 特有的 Shortcode(比如 {{< youtube ID >}} 直接嵌入视频)。
本地预览与构建
hugo server 启动一个开发服务器,默认监听 1313 端口,文件改动会实时热更新:
hugo server -D
## 访问 http://localhost:1313/
-D 表示包含 draft 文章。开发模式下 Hugo 会把 CSS、JS 和 HTML 都保存在内存里,不写到磁盘,避免污染版本库。
确认无误后用 hugo 直接编译生产版本,输出到 public/ 目录:
hugo --minify
ls public/
--minify 会压缩 HTML、CSS、JS 与 JSON,减少 20% 到 40% 的体积。中文站点建议在 hugo.toml 里把 hasCJKLanguage = true 打开,否则字数统计和摘要会按拉丁文断词,出来的 description 全是乱的。
部署到生产环境的三种主流姿势
第一种是 rsync 到自己的 Nginx 服务器,最灵活也最便宜。把 public/ 同步过去再让 Nginx 指向那个目录就行:
rsync -avz --delete public/ user@server:/var/www/blog/
服务器上的 Nginx 配置可以参考 Nginx 反向代理与负载均衡实战配置教程 改一改,把 root 指到 /var/www/blog,再补上 gzip 与 cache-control 头。如果你还没有合适的 VPS,可以看 美国 VPS 部署完整教程指南 里 1 核 2G 配置足够跑普通博客。
第二种是 GitHub Actions 加 Cloudflare Pages 或 Vercel。在仓库根目录建 .github/workflows/deploy.yml,推送即构建即部署,免费额度对个人博客绰绰有余。如果面向中国大陆访客建议在 Cloudflare 前面再叠一层国内 CDN,参考 Cloudflare CDN 中国大陆加速优化指南 的配置思路。
第三种是 Netlify 或者 Vercel 直连仓库一键托管,几乎零运维,缺点是国内访问要靠它们的边缘节点,速度不太可控。
部署完成后建议立刻配置 HTTPS,用 Let’s Encrypt 加 acme.sh 自动续签即可。HTTP/2 与 Brotli 压缩也建议打开,对静态资源加载速度提升明显。
中文站点常踩的几个坑
中文 Hugo 站点和英文版有几个差别需要注意:
hasCJKLanguage = true必须打开,否则summary与字数都不对- 永久链接
permalinks建议用英文 slug 而不是中文标题,避免 URL 转义后丑陋且影响 SEO - 图片建议放
static/images/并启用 Hugo 的 image processing 生成 webp,加载速度差距很大 - RSS 模板默认是 Atom,国内一些阅读器解析不好,可以重写
layouts/_default/rss.xml为 RSS 2.0 - 中文搜索可以接 Algolia 或自托管的 PagefindUI,原生
_search模板对中文分词不友好
如果你的博客有用户登录或评论模块,记得 SSH 入口要做好加固,参考 Linux SSH 安全加固与 Fail2Ban 防护实战 至少把暴力破解挡掉。
性能与 SEO 调优清单
静态网站本身就快,但还是有一些细节值得做:
- 在
hugo.toml里启用minify与enableGitInfo,自动写入文章 lastmod 给搜索引擎 - 用
image.resources把封面图压缩到合理尺寸,1280×720 webp 一般 30 KB 以内 - 配置
robots.txt与sitemap.xml(Hugo 自带,但要在hugo.toml把enableRobotsTXT = true) - 给关键页面加 OpenGraph 与 Twitter Card 元标签,Hugo 主题大多内置,需要在 frontmatter 里写
images: - 文章列表页与详情页都开启浏览器缓存,相关思路可以借鉴 WordPress W3 Total Cache 性能调优实战
正式上线后用 PageSpeed Insights 跑一遍,移动端目标 90 分以上,桌面端 95 分以上对 Hugo 来说基本没难度。
总结
总结一下,Hugo 是目前最适合个人和团队博客的静态站点方案:一个二进制、几分钟初始化、热更新本地预览、Markdown 写作、生产编译亚秒级、部署成本接近零。本指南覆盖了从安装、选主题、写文章、本地预览、构建到生产部署的完整链路,并指出了中文站点必须注意的字体、链接与 SEO 配置。建议你按这个顺序练一遍:先在本地跑通 hello world,再切到自己的真实内容,最后接持续部署。如果你需要稳定可控的国内访问,可以考虑把 Hugo 输出托管到 Hostease 的 Linux VPS 上,再叠一层 CDN,整体延迟和成本都比纯 SaaS 方案更可控。