跳转至

文章元数据

溪海莘发布于

给全站文章补上作者、日期和摘要,日期从 git 记录里推。

写着写着发现一个问题:文章页只有标题和正文,没有作者,也没有日期。读者不知道这是谁写的、什么时候写的、最近改没改。

于是给每个页面补了一段 front matter:

YAML
1
2
3
4
5
6
7
---
title: "Vim 学习笔记"
date: 2025-12-04
updated: 2026-07-24
author: "溪海莘"
description: "Vim 常用操作速查……"
---

日期从哪来

这些文章大部分没记写作日期。想了一圈,最可靠的时间线其实是 git 提交记录:

  • date第一次提交的日期,算作「文章发布」;
  • updated最后一次提交的日期,算作「最后修改」;
  • 两者同一天就不写 updated

我写了个一次性脚本,把 28 个页面的 front matter 全补上。作者一栏,原创的写我自己,转载和翻译的写原作者。

怎么显示出来

Material 不会自动显示这些字段,得自己动手。加了个构建钩子 hooks/page_meta.py,在渲染前把一段元数据插到正文第一个 H1 后面:

Python
1
2
match = H1_RE.search(markdown)
return markdown[:match.end()] + "\n\n" + block + "\n" + markdown[match.end():]

页面上就是标题下面一行小字——作者、发布于、更新于——再加一段摘要。没有 updated 就不显示「更新于」,整页没有 front matter 就整块不显示。

首页也吃这套数据

首页那个「最近更新」的列表,用的就是这些字段。这里定了个优先级。

排序上,先看 updated,没有再退到 date,最后才用 git 提交时间兜底。因为一篇老文章如果最近改过,应该重新冒到前面,而不是按发布日一直沉底。

摘要上,优先用作者写的 description,没写才从正文第一段截。毕竟 description 是我特意写给读者看的,机器截的那句经常不是重点。

一个附带的好处

description 会被 Material 顺手写进页面的 <meta name="description">。之前所有页面共用一句站点描述,现在每篇都有自己的,对搜索收录也好一点。