Hugo 静态网站构建实战手册

故障排除

排查 Hugo 常见问题:命令不可用、主题丢失、草稿不显示、样式异常、构建失败和部署路径错误

故障排除

Hugo 的问题通常集中在五类:版本不一致、主题没拉取、Front Matter 状态不对、资源路径错误、部署平台环境缺依赖。排查时先看终端报错,再按下面清单定位。

先收集信息

hugo version
hugo env
git status --short
git submodule status

构建时加详细输出:

hugo --gc --minify --verbose

开发预览:

hugo server -D -F -E --disableFastRender

如果问题只在模板中出现:

hugo --templateMetrics --templateMetricsHints

Hugo 命令不可用

现象:

hugo: command not found

或 Windows PowerShell:

The term 'hugo' is not recognized

处理:

hugo version

Windows:

where.exe hugo

macOS/Linux:

which hugo

如果找不到,重新安装 Hugo,并确认安装目录加入 PATH。安装后重新打开终端。

Hugo 版本过低

现象:

  • 模板函数不存在
  • 配置字段不生效
  • 主题要求更高版本
  • CI 报错但本地正常

处理:

hugo version

然后检查主题 README 的最低版本。CI 中固定版本,例如:

HUGO_VERSION=0.163.0

如果主题需要 SCSS,确认输出中包含 extended

主题找不到

现象:

Error: module "ananke" not found

或:

Unable to locate theme

检查:

ls themes

Windows:

Get-ChildItem themes

如果使用 submodule:

git submodule update --init --recursive

确认 hugo.toml

theme = 'ananke'

主题名要与 themes/ 下目录名一致。

文章不显示

常见原因:

  • draft: true
  • date 是未来时间
  • expiryDate 已过期
  • 文件放错目录
  • 列表模板过滤了 Section

开发时显示全部状态:

hugo server -D -F -E

正式发布前修改:

draft: false

如果是文档页不显示,检查 weight 和目录层级,确认是否有 _index.md

首页或栏目空白

检查内容路径:

content/posts/_index.md
content/posts/hello.md

检查模板过滤:

{{ where site.RegularPages "Section" "posts" }}

如果你的栏目叫 articles,模板还过滤 posts,列表自然为空。

Front Matter 报错

现象:

failed to unmarshal YAML

常见原因:

  • 冒号后没有空格
  • 中文引号
  • 数组格式错误
  • 日期格式错误
  • YAML 缩进错误

正确示例:

---
title: "我的文章"
date: 2026-06-10T10:00:00+08:00
draft: false
tags: ["Hugo", "Markdown"]
---

如果标题含冒号,建议加引号:

title: "Hugo: 从入门到部署"

样式没有生效

常见原因:

  • 没安装 Hugo Extended
  • 主题没有拉取
  • baseURL 错误
  • 资源文件放到 static/ 但模板用 resources.Get
  • 浏览器缓存旧文件

检查:

hugo version
hugo server -D --disableFastRender

查看浏览器 Network 面板,确认 CSS 请求是否 404。

如果模板中写:

{{ resources.Get "css/main.css" }}

文件必须在:

assets/css/main.css

不是:

static/css/main.css

Sass 或 PostCSS 构建失败

Sass 失败:

hugo version

确认是 Extended。若主题使用 Dart Sass,还要安装 Dart Sass。

PostCSS 失败:

npm ci
hugo --minify

检查:

package.json
postcss.config.js

CI 中也要执行 npm ci

图片处理失败

常见原因:

  • 图片不在 Page Bundle 或 assets/
  • 文件名大小写不一致
  • 模板匹配表达式写错
  • 原图格式不支持

Page Bundle 示例:

content/posts/demo/
├── index.md
└── cover.jpg

模板:

{{ with .Resources.GetMatch "cover.*" }}
  {{ $cover := .Resize "800x webp" }}
  <img src="{{ $cover.RelPermalink }}" alt="{{ $.Title }}">
{{ else }}
  {{ warnf "cover not found: %s" $.File.Path }}
{{ end }}

链接路径错误

现象:

  • 本地正常,线上 404
  • 部署到子路径后资源丢失
  • RSS 或 Sitemap 中地址不对

检查:

baseURL = 'https://example.org/'

如果部署到子路径:

baseURL = 'https://example.org/blog/'

模板里优先使用:

{{ .RelPermalink }}
{{ "images/logo.png" | relURL }}

避免写死:

<a href="/blog/posts/hello/">

构建输出目录不对

默认输出:

public/

构建:

hugo --destination public

部署平台发布目录应填:

public

不要填 contentlayouts 或项目根目录。

GitHub Pages 404

检查:

  • Pages Source 是否设置为 GitHub Actions
  • workflow 是否成功
  • artifact 上传路径是否是 ./public
  • 是否使用自定义域名
  • baseURL 是否正确

构建命令建议:

hugo --gc --minify --baseURL "${{ steps.pages.outputs.base_url }}/"

Netlify/Vercel/Cloudflare 构建失败

优先检查日志中的第一条错误。常见问题:

  • Hugo 版本过低
  • 未安装 Extended
  • 没执行 npm ci
  • Hugo Modules 缺 Go
  • 私有主题无法拉取
  • submodule 没初始化

环境变量示例:

HUGO_VERSION=0.163.0
HUGO_ENVIRONMENT=production

中文路径问题

中文标题可以保留,但 URL 建议使用英文 slug

---
title: "Hugo 部署指南"
slug: "hugo-deployment"
---

Git 显示中文路径时:

git config core.quotepath false

模板变量为空

with 保护:

{{ with .Params.cover }}
  <img src="{{ . }}" alt="{{ $.Title }}">
{{ end }}

给默认值:

{{ .Params.cover | default "/images/default-cover.jpg" }}

调试:

<pre>{{ debug.Dump .Params }}</pre>

或:

{{ warnf "Params: %#v" .Params }}

快速排查顺序

  1. 运行 hugo version,确认版本和 Extended
  2. 运行 hugo --gc --minify,看第一条错误
  3. 检查主题是否存在,submodule 是否初始化
  4. 检查 Front Matter 是否草稿、未来或过期
  5. 检查资源放在 assets/static/ 还是 Page Bundle
  6. 检查 baseURL 和部署平台发布目录
  7. 对比本地和 CI 的 Hugo、Node、Go 版本

下一步

继续阅读 最佳实践清单,把常见经验整理成日常工作流。

评论

0%