761 字
4 分钟
内容集合与 Frontmatter:把写作变成数据

写博客最怕的不是没内容,而是内容写完了,页面却是空的。少一个冒号、日期格式不对、字段名拼错,都可能让文章悄悄消失。

Astro 的内容集合把这类问题从「发布后才发现」提前到了「构建时直接报错」。

Frontmatter 是文章的第一层结构#

title必填string

文章标题。归档、搜索、RSS 和分享卡片都会用到。

published必填date

发布日期,决定归档位置和列表排序。格式必须是 YYYY-MM-DD。

draft可选boolean
false

草稿开关。开启后只在开发环境可见,正式构建会被排除。

tags可选string[]
[]

标签数组,会进入标签聚合页。中文标签会直接作为展示文本。

::::

这些字段看起来简单,但它们共同决定了一篇文章在站点里的位置、可见性和关联关系。

一个最小但完整的例子#

src/content/posts/hello.md
title: 你好,新网站
published: 2026-10-31
description: 第一篇正式文章。
tags:
- 随笔
- 建站
category: 随笔
draft: false

只要 title 和 published 存在,文章就能被识别。其余字段都有默认值,不需要为了「填满模板」而写一堆空字段。

写作流程已经固定下来#

从新建到发布

  1. 生成骨架

    运行 pnpm.cmd new-post my-post,脚手架会按站点时区写好日期。

  2. 写正文

    文件名就是 URL slug,正文直接使用 Markdown 和自定义语法。

  3. 本地预览

    运行 pnpm.cmd dev,在浏览器里确认排版、图片和链接。

  4. 正式发布

    确认 draft 为 false,执行构建并部署 dist/。

这套流程的价值在于:写作时只需要关心内容,结构检查交给工具。

分类、标签和系列不是三套系统#

一开始我以为分类、标签、系列要分别维护,后来发现它们其实都从文章字段长出来:

  • tags 聚合出标签页;
  • category 聚合出分类页;
  • series 指向系列实体,seriesOrder 决定阅读顺序。

文章是唯一的数据源,其他页面都是它的投影。这样做的好处是不会出现「文章改了标签,标签页却没更新」的同步问题。

一点心得#

内容集合最容易被低估的地方,是它把「写作规范」变成了可以执行的代码。规范写在文档里,靠人记住;schema 写在代码里,构建时会替你检查。

对于一个人维护的博客来说,后者的价值更大——因为没有人会替你 review frontmatter。

第 5 篇,共 12 篇本文属于系列

内容集合与 Frontmatter:把写作变成数据
https://www.ycera.cn/posts/content-collections-frontmatter/
作者
初月_Yuechu
发布于
2026-10-24
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取