跳到正文
v0.6.5

Frontmatter 参考

Frontmatter 位于 Markdown 或 MDX 文件顶部。通用页面字段适用于全部内容;hero 和 features 只用于各语言首页。

未知字段可以被解析,但不影响 Canofold 行为,也不会自动写入公开 AI 索引。ai/pages.json 仅保留 title、description、createdAt、updatedAt、order、group、subgroup、tags 和 owner。

通用页面字段

普通内容页通常只需要标题、描述和排序:

yaml
---title: API 鉴权seoTitle: API 鉴权与请求签名|Acme Docsdescription: 配置服务端 API Token 和请求签名order: 20---
表格
titlestring第一个标题或空页面标题、侧栏和默认 SEO title
seoTitlestring由 title 和站点标题生成仅覆盖浏览器与搜索结果标题,不改变页面标题、侧栏、搜索或 AI 数据
descriptionstring空SEO、搜索结果和确定性摘要
createdAtISO 8601 日期无保存内容创建时间并写入公开页面元数据
updatedAtISO 8601 日期可确认的 Git 内容提交时间;否则不显示固定页脚“最后更新”时间并写入公开页面元数据
groupstring一级目录名顶级分区的兼容/显示覆盖字段
subgroupstring二级目录名第一层嵌套分组的兼容/显示覆盖字段
ordernumber最后页面、侧栏和上下篇顺序
collapsedbooleanfalse目录 index.md 对应分组的初始折叠状态
layoutdocument | playgrounddocument使用标准文档布局,或为可编辑源码/预览页启用 Playground 布局
statuspublished | draftpublished草稿可在 dev 预览和 check 检查,不进入生产构建
sidebarbooleantrue是否出现在侧栏,不影响路由生成
searchbooleantrue是否进入搜索索引
aibooleantrue是否进入 AI 输出
tagsstring[]空写入 ai/pages.json
ownerstring空写入 ai/pages.json
translation.sourceHashsha256:<64 位十六进制>无译文复核时对应的默认语言源页内容指纹,仅用于 check;未填写时状态为“未知”

本地 dev 可以预览草稿首页;发布前,每个版本和语言仍必须有已发布的首页。若首页仅有 status: draft,check 和正式构建都会失败。

导航字段

各级目录的 index.md 是分组名称和折叠状态的权威来源。同一目录声明不同的 group 或 subgroup 会使构建失败。

group 和 subgroup 不会把内容树限制为两层。递归导航应使用各级目录的 index.md;这两个字段主要用于兼容旧内容或覆盖显示名称。

日期字段

需要明确指定更新时间时填写 updatedAt。日期使用 YYYY-MM-DD,带时间时必须包含 Z 或 +08:00 这样的时区偏移。未填写时,Canofold 使用完整 Git 历史中该文件最近一次内容提交的时间;工作区文件未提交、仓库为浅克隆或无法获取 Git 历史时,不显示“最后更新”,不会以检出时间或浅克隆边界提交的时间冒充内容更新时间。需要在 CI 中显示 Git 日期时,应检出完整历史(例如 GitHub Actions 的 actions/checkout 配置 fetch-depth: 0),或显式填写 updatedAt。

译文复核指纹

翻译完成并与默认语言源页核对后,运行 canofold check --json,从 translationStatus 中找到目标语言页面的 sourceHash,将它写入该译文的 translation.sourceHash。之后源页标题、描述或正文改变,check 会报告译文过期。未记录指纹或缺少源页时显示 unknown,不会根据文件时间推断译文是否过期。重新复核译文后再更新指纹;不要只为消除告警而复制新值。

首页字段

每种语言的首页都由该语言根目录的 index.md 配置。默认语言使用 docs/index.md,其他语言使用 docs/{locale}/index.md。canofold.config.ts 只保存站点级配置,不保存首页文案。

yaml
---title: Acme DocsseoTitle: Acme Docs|从接口定义生成可部署的文档站hero:  accent: 从接口定义生成可部署的文档站  tagline: 在仓库中维护内容和配置,构建结果可以直接部署。  image: /banner.png  imageAlt: Acme 文档构建流程  actions:    - text: 快速开始      link: /guide/getting-started/      primary: true      icon: rocketfeatures:  - image: /feature/api.png    title: 接口参考    details: 从版本化内容生成可搜索的接口文档。---

页面结构

表格
titlestringHero 主标题首页唯一的可见主标题
seoTitlestring不直接显示仅覆盖浏览器与搜索结果标题;适合为简短品牌名补充产品定义
descriptionstring不直接显示SEO description 和搜索摘要
hero.accentstring主标题下方一句话说明首页的核心信息
hero.taglinestringAccent 下方用一到两句话补充产品定义或使用范围
hero.imagestringHero 右侧首页主视觉;省略后使用单栏布局
hero.imageAltstring不直接显示图片的替代文本;纯装饰图片可写空字符串
hero.actionsarrayHero 按钮组按数组顺序从左到右显示
featuresarrayHero 下方首页能力卡片

hero.image 和 actions[].link 接受以 / 开头的站内路径或 HTTPS URL。其他协议会使检查和构建失败。

Hero 按钮

表格
textstring是按钮文案
linkstring是站内绝对路径或 HTTPS URL
primaryboolean否使用主按钮样式;一个首页最多设置一个
iconstring否使用 Canofold 内置 Lucide 图标

能力卡片

表格
titlestring是卡片标题
detailsstring是一句能力说明
imagestring否使用 {docsDir}/public/ 中的图片,例如 /feature/api.svg
iconstring否使用与按钮相同的内置图标

同时填写 image 和 icon 时优先显示 image;两者都省略时显示纯文本卡片。

图片与内置图标

以 / 开头的图片路径映射到 {docsDir}/public/。例如 /banner.png 对应 {docsDir}/public/banner.png,/feature/api.svg 对应 {docsDir}/public/feature/api.svg。

按钮和能力卡片也可以使用 Canofold 内置的 Lucide 图标,不需要安装图标包。可用值为 ai、box、code、file、file-code、gauge、globe、layers、rocket、search、sparkles 和 terminal。

首页字段会在内容扫描阶段校验。类型错误、未知子字段、不支持的图标或多个主按钮都会使检查和构建失败。