# SuBlog 内容丰富化方案 ## 目标 在不显著增加维护成本的前提下,让博客从“文章列表”升级为“有结构的个人知识库”。 核心原则: - 保持一个主要内容源:`content/posts` - 优先做自动聚合页面,不新增需要长期手动维护的数据源 - 先增强现有文章,再考虑项目、收藏、短笔记等独立内容类型 - 每个阶段都能独立上线,不做大而全改造 ## 当前判断 当前项目已经具备比较完整的博客基础: - 文章目录结构清晰:`content/posts//index.md` - frontmatter 已支持标题、日期、描述、封面、标签、置顶等字段 - 文章列表页已经有搜索、标签过滤、分页 - 文章详情页已经有目录和评论 因此下一步不建议马上新增 `notes`、`projects`、`bookmarks` 等内容系统。它们看起来丰富,但会引入额外维护负担,时间久了容易荒掉。 更合适的方向是:继续围绕 `posts` 做结构增强。 ## 推荐内容模型 继续使用现有文章目录: ```text content/ └── posts/ └── / ├── index.md └── img/ ``` 在文章 frontmatter 中增加少量可选字段: ```yaml title: 文章标题 published: 2026-07-15 updated: 2026-07-15 description: 文章描述 image: /posts/example/img/cover.jpg tags: - Go - Docker pinned: false series: Nuxt 博客开发 seriesOrder: 1 difficulty: 入门 ``` 字段说明: | 字段 | 是否必填 | 用途 | |------|----------|------| | `title` | 是 | 文章标题 | | `published` | 是 | 发布时间 | | `description` | 是 | 列表页和 SEO 摘要 | | `tags` | 是 | 标签筛选和内容聚合 | | `image` | 否 | 封面图 | | `pinned` | 否 | 首页或列表页置顶 | | `updated` | 否 | 展示最近更新 | | `series` | 否 | 归入某个系列 | | `seriesOrder` | 否 | 系列内排序 | | `difficulty` | 否 | 标记阅读难度 | ## 目录结构设计 建议新增的页面和工具尽量围绕现有目录展开: ```text pages/ ├── index.vue # 首页:增加最近文章、精选文章或系列入口 ├── posts/ │ ├── index.vue # 文章列表:保留现有搜索和标签过滤 │ └── [slug].vue # 文章详情:增加同系列上一篇/下一篇 ├── archive.vue # 归档页:按年月自动聚合文章 └── series/ ├── index.vue # 系列列表页 └── [name].vue # 系列详情页 utils/ └── content-ast.ts # 保持现有 AST 工具 composables/ └── usePostSearch.ts # 保持现有搜索逻辑 ``` 不建议第一阶段新增: ```text content/notes/ content/projects/ content/bookmarks/ ``` 这些目录可以等文章体系稳定后再加。 ## 页面能力设计 ### 首页 首页保持“个人名片优先”,内容入口作为补充,不要做成文章列表页的重复版本。 当前首页建议顺序: - 个人身份:头像、站点名、签名、网易云热评、不蒜子计数 - 个人入口:社交链接、常用页面导航、公告、小日历 - 内容入口:文章更新、归档入口、系列入口 视觉重点放在个人主页氛围上。首页头像由 `components/layout/AvatarOrbit.client.vue` 实现,使用 3D 技术栈图标环绕头像,图标需要保持正面朝向,环绕范围只略宽于头像,避免遮挡头像主体。 文章相关模块保持轻量: - 最近文章:展示最新 3 到 5 篇 - 精选文章:读取 `pinned: true` - 系列入口:展示有 `series` 的文章分组 不建议增加太多模块,避免首页维护和视觉负担过重。 ### 归档页 新增 `/archive` 页面。 数据来源:所有非草稿文章。 展示方式: - 按年份分组 - 年份下按月份分组 - 每篇文章显示标题、发布日期、标签 维护成本:低。页面完全由文章 frontmatter 自动生成。 ### 系列页 新增 `/series` 和 `/series/[name]`。 数据来源:文章 frontmatter 中的 `series` 字段。 展示方式: - `/series` 展示所有系列名称、文章数量、最近更新时间 - `/series/[name]` 按 `seriesOrder` 或发布时间排序展示文章 文章详情页可以增加: - 当前系列名称 - 同系列上一篇 - 同系列下一篇 维护成本:中低。只需要在相关文章里填写 `series` 和 `seriesOrder`。 ### 文章详情页 建议增强但不改变主体结构: - 显示 `updated` - 显示 `difficulty` - 如果属于系列,显示系列导航 这些信息都来自 frontmatter,不需要额外数据文件。 ## 实施阶段 ### 第一阶段:低成本增强 目标:快速增加内容层次,但不扩大内容源。 范围: - 增加 `updated`、`series`、`seriesOrder`、`difficulty` 字段支持 - 首页展示最近文章和置顶文章 - 文章详情页展示更新时间和难度 验收标准: - 不影响旧文章显示 - 未填写新字段的文章正常展示 - 首页内容入口更明确 ### 第二阶段:自动聚合页面 目标:让已有文章自动形成内容结构。 范围: - 新增 `/archive` - 新增 `/series` - 新增 `/series/[name]` - 文章详情页增加同系列上一篇/下一篇 验收标准: - 归档页能按年月正确分组 - 系列页能按系列正确聚合 - 系列排序稳定,不受文章读取顺序影响 ### 第三阶段:再考虑独立内容类型 目标:在文章体系稳定后,再判断是否值得扩展。 可选方向: - `projects`:项目展示 - `notes`:短笔记 - `bookmarks`:资源收藏 建议只有在满足以下条件时再做: - 现有文章更新稳定 - 首页和文章页结构已经成熟 - 确认有长期维护这些内容的需求 ## 维护规则 新增文章时只需要遵守一个流程: 1. 使用 `pnpm new-post ` 创建文章 2. 填写必填字段:`title`、`published`、`description`、`tags` 3. 如果文章属于系列,再填写 `series` 和 `seriesOrder` 4. 如果文章有明显更新,再填写或更新 `updated` 5. 如果适合推荐,再设置 `pinned: true` 推荐 frontmatter 模板: ```yaml --- title: '' published: 2026-07-15 updated: description: '' image: draft: false tags: [] pinned: false series: seriesOrder: difficulty: --- ``` ## 不做清单 为了控制维护成本,短期不建议做: - 独立 CMS 后台 - 多内容类型并行维护 - 复杂分类系统 - 手动维护首页推荐配置 - 每篇文章强制填写大量元信息 ## 推荐结论 最适合当前项目的方案是: ```text 一个内容源:posts 少量增强字段:series、seriesOrder、updated、difficulty 三个自动视图:首页内容入口、归档页、系列页 ``` 这样能明显提升内容丰富度,同时不会把项目变成难维护的 CMS。