Hugo 实战技巧:为什么设定了「未来日期」文章没显示?教你用 GitHub Actions 实现全自动定时发布

明明在 Front Matter 里写了未来的日期,为什么到了那天文章还是没出现?本文为你揭秘静态网站生成器的原理,并手把手教你如何利用 Cloudflare 和 GitHub Actions 实现「睡后自动发文」。
08yt
Hugo 实战技巧:为什么设定了「未来日期」文章没显示?教你用 GitHub Actions 实现全自动定时发布
最近在撰写网站文章内容时,我遇到一个有趣的问题。我原本是想写好的文章,不一定今天马上发布,也许等一两天再发布。所以就遇到了hugo系统定时发布文章的问题。 我在文章的 Front Matter(头部配置)中,将日期设定为了未来的某一天: date: 2026-01-04 我的本意是希望 到了 1 月 4 号那天,这篇文章自动出现在首页 。结果日子到了,我刷新了无数次网站,文章却依然处于“隐身”状态。 这到底是为什么?难道 Hugo 坏了吗? 经过一番研究,我发现这其实是 静态网站生成器 (Static Site Generator) 的核心特性决定的。今天就来分享一下原理,以及我是如何用 GitHub Actions 完美解决这个问题的。 1. 原理揭秘:为什么它不会“自动”显示? 要理解这个问题,我们必须区分 “动态网站” (如 WordPress)和 “静态网站” (如 Hugo)。 WordPress (动态): 当你访问网页时,服务器会实时查询数据库。如果它发现有一篇文章的发布时间是“现在”,它就会立刻从数据库里把它捞出来展示给你。 Hugo (静态): Hugo 没有数据库。当你运行 hugo build 命令时,它就像印刷报纸一样,把那一瞬间的内容“打印”成 HTML 文件。 关键点来了: 当 Hugo 进行构建(Build)时,它会检查每篇文章的日期。 如果 文章日期 > 当前构建日期 ,Hugo 会认为这是一篇“未来文章”, 默认直接跳过,不生成它的 HTML 文件 。 所以,即使时间到了 2026 年 1 月 4 日,服务器上存放的依然是 1 月 3 日那是构建的旧版 HTML 。除非你重新运行构建命令,否则那篇文章永远不存在于服务器上。 2. 常见的(但不太完美)解决方案 方案 A:手动构建 (最原始) 等到日子到了,打开电脑,手动推送一次代码,或者去 Cloudflare 后台点一下“重新部署”。 缺点: 费人。万一你当时在睡觉、在旅游或者没网,文章就发不出来了。 方案 B:强制显示未来文章 (Build Future) 你可以在 hugo.yaml 中设置 buildFuture: true 。 缺点: 这会让文章 现在立刻 显示出来,不管日期是不是未来。这适合预览草稿,但不适合“定时发布”。 3. 终极方案:GitHub Actions 定时自动构建 🤖 我们要实现的是: 人可以睡觉,但代码必须自…