从 Jekyll 迁移到 Hugo:一步步指南
# May 16, 2026对于许多长期使用 Jekyll 的用户来说,考虑迁移到 Hugo 通常是出于对性能和构建速度的追求。Hugo 以其极快的构建速度和简洁的开发流程,吸引了大量开发者。本指南将帮助你逐步完成从 Jekyll 到 Hugo 的迁移过程。
为什么迁移?
Jekyll 是一个久经考验的静态网站生成器,但随着网站规模的增大,其构建时间可能会显著增加。Hugo 使用 Go 语言编写,其并发特性使得它在处理大量内容时拥有压倒性的速度优势。如果你发现 Jekyll 的构建速度已经成为瓶颈,那么迁移到 Hugo 是一个值得考虑的选择。
迁移步骤
第一步:安装 Hugo
首先,确保你已经安装了 Hugo。你可以从 Hugo 官方网站 获取安装指南。
第二步:创建新的 Hugo 项目
在你的项目目录下,创建一个新的 Hugo 项目:
hugo new site my-new-site
cd my-new-site
第三步:复制内容文件
将你 Jekyll 项目中的内容文件(通常在 _posts 目录下)复制到 Hugo 项目的 content/posts 目录下。
# 假设你的 Jekyll 项目在上一级目录
cp ../your-jekyll-project/_posts/* content/posts/
注意: Jekyll 的内容文件通常以 YYYY-MM-DD-title.md 的格式命名。Hugo 也支持这种格式,但它也可以使用更灵活的文件名。
第四步:处理 Frontmatter
Jekyll 使用 YAML Frontmatter,而 Hugo 支持 YAML, TOML, JSON。你需要将 Jekyll 的 Frontmatter 转换为 Hugo 支持的格式。

Jekyll Frontmatter 示例:
---
layout: post
title: "My Awesome Post"
date: 2023-10-27 10:00:00 +0800
categories: [tech, web]
tags: [hugo, jekyll]
---
Hugo Frontmatter 示例 (TOML):
+++
date = 2023-10-27T10:00:00+08:00
title = "My Awesome Post"
categories = ["tech", "web"]
tags = ["hugo", "jekyll"]
+++
Hugo Frontmatter 示例 (YAML):
---
date: 2023-10-27T10:00:00+08:00
title: "My Awesome Post"
categories: ["tech", "web"]
tags: ["hugo", "jekyll"]
---
Hugo 的 date 字段通常期望 ISO 8601 格式。你可能需要编写一个脚本来批量转换你的 Frontmatter。
layout: post: 在 Hugo 中,这通常由文件所在的目录(例如content/posts/)决定,或者通过type参数指定。categories和tags: Hugo 将它们映射为categories和tags变量。
第五步:迁移主题
这是迁移中最具挑战性的部分。Hugo 和 Jekyll 的模板语言(Liquid vs Go Templates)有所不同。
- 寻找 Hugo 主题: 最简单的方法是寻找一个与你 Jekyll 主题风格相似的现成 Hugo 主题。访问 Hugo Themes 网站 查找。
- 手动重写主题: 如果找不到合适的主题,你需要手动将 Jekyll 的 Liquid 模板转换为 Hugo 的 Go Templates。这需要对两种模板语言都有一定的了解。
- 基础布局: 将
_layouts/default.html迁移到layouts/_default/single.html和layouts/_default/list.html。 - 页眉/页脚/导航: 将
_includes/中的文件迁移到layouts/partials/。 - 变量: Jekyll 的
{{ page.title }}对应 Hugo 的{{ .Title }},{{ site.title }}对应{{ .Site.Title }}。 - 循环: Jekyll 的
{% for post in site.posts %}对应 Hugo 的{{ range .Pages }}或{{ range where .Pages "Type" "post" }}。
- 基础布局: 将
第六步:迁移静态文件
将 Jekyll 项目中的静态文件(如图片、CSS、JS,通常在 assets 或 images 目录下)复制到 Hugo 项目的 static/ 目录下。
cp -r ../your-jekyll-project/assets static/
cp -r ../your-jekyll-project/images static/
Hugo 会自动处理 static/ 目录下的文件,将它们复制到网站的根目录。
第七步:配置 Hugo

在 Hugo 项目的根目录下创建 config.toml (或 config.yaml/config.json) 文件,并配置基本信息。
baseURL = "http://example.org/" # 替换为你的网站URL
languageCode = "en-us"
title = "My New Hugo Site"
# 如果使用主题,则需要配置主题
# theme = "your-hugo-theme"
[params]
# 这里可以添加主题相关的参数
description = "A blog migrated from Jekyll to Hugo."
# 导航菜单配置 (根据主题文档进行配置)
# [[menu.main]]
# name = "Home"
# url = "/"
# weight = 1
# [[menu.main]]
# name = "About"
# url = "/about/"
# weight = 2
第八步:本地测试
运行 Hugo 的本地服务器来预览你的网站:
hugo server -D
-D 参数会显示草稿状态的内容。检查所有页面是否正常显示,链接是否正确,样式是否一致。
第九步:部署
一旦你对本地预览满意,就可以构建你的网站:
hugo
这会在 public/ 目录下生成所有静态文件。然后,将 public/ 目录下的内容部署到你的托管平台。
常见迁移问题及解决方案
- 日期格式不匹配: Hugo 的
date字段通常需要 ISO 8601 格式。使用脚本转换YYYY-MM-DD HH:MM:SS为YYYY-MM-DDTHH:MM:SS+ZZ:ZZ。 - Markdown 渲染差异: 某些 Markdown 扩展在 Jekyll 和 Hugo 中可能渲染方式不同。检查并调整你的 Markdown 内容或 Hugo 的 Markdown 配置。
- 图片路径问题: 确保你的图片路径在 Hugo 中被正确解析。使用相对路径或 Hugo 的
relURL函数。 - Permalink 结构: Jekyll 的
_config.yml中的permalink设置需要映射到 Hugo 的config.toml中的uglyURLs或自定义的permalinks配置。
迁移是一个细致的过程,可能需要一些时间和耐心。但一旦完成,你将享受到 Hugo 带来的速度和效率提升。爱游戏平台也一直在探索和优化内容管理和网站构建的流程,以提供更优质的用户体验。