博客流水线
你能得到什么: 一篇回答真实搜索问题、用你个人语气写成、经过事实核查、带有1200×630图片和有效前置元数据的文章,静静地躺在自己的文件夹中等待你的审阅。
第一件事: 在项目根目录下放一份填写完整的 BLOG.md(模板在此仓库中)。每个阶段都会读取它。
每次优先阅读
- 项目根目录下的
BLOG.md:站点、读者、目标、语气、禁用词、分类、发布节奏、SEO与图片规则、前置元数据默认值及修正列表。当BLOG.md与本技能冲突时,以BLOG.md为准。 - 在编写任何前置元数据之前,先阅读
references/frontmatter-contract.md。 - 你正在运行的那个阶段的参考文件,以及其他你不需要的部分一概不读。
还没有 BLOG.md? 停下来,主动提出要创建一个。阅读此人的3到5篇现有文章或页面,按照模板每个部分的问题逐一询问,写好后请他们检查。没有 BLOG.md 写出的文章听起来像谁都不像。
工作原理
一篇博客文章是对某人在谷歌中输入的内容的答复。知识可以来自一次演讲、一封新闻通讯或一次客户通话;文章围绕一个搜索词重新组织:匹配搜索词的标题、把答案放在靠近顶部的位置、用人们搜索时所用的措辞来设置标题。
写新文章前先刷新。 检查是否已有文章或页面针对同一个搜索词。谷歌已经展示、有展示量但没点击量的文章,比一篇从零开始的新文章更有价值,而且工作量只有后者的零头。两页争同一个搜索词通常两败俱伤。
工作文件夹
每篇文章一个文件夹,放在此人的项目内:posts/<YYYY-MM-DD>-<slug>/。日期是计划发布日。slug 是最终地址和文件名。每个阶段将一个文件写入该文件夹,因此文件夹就是记忆:任何阶段都可以重新运行或在稍后继续执行,而无需重做之前的阶段。
| # | 阶段 | 读取内容 | 写入内容 | 说明 |
|---|---|---|---|---|
| 1 | 选题 (Ideation) | BLOG.md、搜索数据、现有文章和页面 | posts/_ideas/topic-ideas.md | references/01-ideation.md |
| 2 | 简报 (Brief) | 一个主题 | brief.md | references/02-brief.md |
| 3 | 研究 (Research) | brief.md | research.md | references/03-research.md |
| 4 | 草稿 (Draft) | research.md、brief.md、BLOG.md | draft.md | references/04-draft.md |
| 5 | 视觉 (Visuals) | draft.md | visuals.md、<slug>.svg、<slug>.png | references/05-visuals.md |
| 6 | 发布 (Publish) | draft.md、visuals.md | src/content/blog/ 内的文章、public/images/blog/ 内的图片、publish.md | references/06-publish.md |
完整链路: 针对一个主题依次执行第2至第6阶段。第1阶段是批量步骤:当想法列表快用完时运行,大约每周一次的情况下每月一次。
“计划我的第一篇文章”(或“计划我的下一篇文章”): 第1阶段,然后是第2阶段。运行选题阶段,展示短名单,让此人挑选一个主题(不必是 #1;记录选择及其原因到 topic-ideas.md),然后撰写该主题的简报。简报完成后停下来,告知下一步是哪个阶段。当此人要求“找主题想法”时,仅运行第1阶段;当要求“为 <主题> 写简报”时,仅运行第2阶段。
单独一个阶段: 此人指定阶段和文章。读取该阶段的文件及其输入,跳过其余部分。
刷新文章: 跳过第1和第2阶段。创建文件夹 posts/<今天>-<slug>-refresh/,以刷新模式运行第3和第4阶段,然后运行第6阶段。
以上路径基于起始站点。如果 BLOG.md 中列出了其他文件夹,则使用那些。
规则
这些规则覆盖任何阶段文件。BLOG.md 可以添加更多规则。
- 绝不捏造来源、统计数据、引用或链接。 文章中的每个 URL 都必须在研究过程中打开过。无法验证的主张必须删除,或标记为
[UNVERIFIED]让此人确认。此人的个人经历在明确标注为个人经历时算作来源。来自他们工作成果的数据需要项目中的文件或在research.md(阶段3)中记录的有日期的聊天引用;没有这些则标记为[UNVERIFIED],且不进入发布的文件中。 - 根据当前文档核查有关工具和平台的事实。 功能和限制经常变化,去年的操作指南今天往往就不对了。
- 搜索数据要么是真实数据,要么被明确标注。 搜索量和难度必须来自有人运行过的工具,并附上日期,或者文件中写明“未经估算”。将猜测的数字当作数据呈现比没有数字更糟糕。
- 每篇草稿在发布前都需经此人审阅。 新文章设置
draft: true。技能永远不会自行推送、部署或翻转draft状态。唯一的例外是刷新已发布的文章,这类文章保持draft: false(见第6阶段)。 - 审批:何时、如何操作以及修改的去向。 这是技能定义这一流程的唯一位置;第6阶段遵循它。
- 何时: 在第6阶段写好了发布文件并且此人已阅读文章后的任何时候。同一会话也可以。
- 如何: 一次变更。此人在
src/content/blog/<slug>.md中将draft设为false,或者告诉 Claude 来做。同时确认date是发布日。 - 修改的去向: 在第6阶段之前,修改进入
posts/<folder>/draft.md。在第6阶段之后,修改只进入发布文件。draft.md保留作为移交时的草稿,publish.md列出发布后所做的每次变更。 - 哪些情况会推迟发布: 在日期前仍有未完成事项(缺失的页面、
[UNVERIFIED]的主张、链接审核打印出的问题)时,文章保持draft: true直到完成。
- 日期是发布的门禁。 起始站点会将未来日期的文章隐藏直到当天,并列为“即将发布”列表。
- 客户工作保持匿名,除非客户同意具名。去掉名字只是开始:检查类别、地点和时间组合是否仍然能识别出他们(例如“一家三月份开业的佛蒙特州蜡烛店”就是一个名字)。将营收转换为比率或百分比。
- 先给出答案。 用读者能从自己工作中认出的一段上下文作为铺垫,然后在第三段结尾前给出答案。文章绝不以提问开头。
- 为搜索而写,附带一个行动召唤。 标题用人们搜索时的措辞,数据用数字格式,段落简短。主要行动是 BLOG.md 第3节中定义的那个,并且与
src/site.config.mjs中的cta匹配。起始站点在每篇文章末尾展示该按钮(带一个订阅框),因此正文中不需要结尾的行动召唤链接。正文中可以链接到主要行动一次,仅当链接自然融入文章时,且只能链接到已存在的页面或cta地址。 - 只链接到文章发布日时已上线的页面。 这意味着对站点自身域名的每个链接,无论是文章还是页面。将站内链接写为相对链接(如
/about/)。第6阶段会进行检查。 - 语气属于此人。 如果一篇文章读起来像一个陌生人的合格内容,那它就失败了,即使每条规则都通过。
修正变成规则
当此人对同一件事修正了两次(比如一个词、文章开头、标题风格),主动提出向 BLOG.md 的“修正”部分添加一行带日期的记录。第4阶段在每次起草前都会读取该部分,因此做过一次的修复会一直生效。
交出草稿前的检查
在草稿中搜索 BLOG.md 的“禁用词”部分中的每个词,例如:
grep -n -i -E "word one|word two|—" posts/<folder>/draft.md
词搜索会漏掉句子结构。在第4阶段中运行“词搜索漏掉的结构”检查,然后通读草稿一遍,留意 BLOG.md 中列出且词搜索捕捉不到的句子结构,例如开头的提问或结尾的总结。同时对照 research.md 检查每个事实句(第4阶段)。
然后,用几句话告诉此人:草稿在哪里、目标搜索词、计划日期、任何标记为 [UNVERIFIED] 的内容、任何保密性问题,以及他们需要决定什么。
可选:新闻通讯版本
如果此人也发布新闻通讯(Substack、Beehiiv、Kit 或类似平台),同样的知识可以发到那里。为新闻通讯版本设置独立的标题和独立搜索词,这样两篇文章不会在谷歌中竞争,并将新闻通讯存档加入第1和第2阶段的重复检查中。
工具
Claude Code,或可以访问项目文件的 Claude。搜索数据来自免费工具:谷歌自动补全、谷歌搜索控制台、免费的 Ubersuggest 计划以及普通的谷歌第一页搜索。如果某个工具无法连接,请此人粘贴他们看到的结果(Ubersuggest 在网站上运行良好),或者将数据标记为“未经估算”。一个没有数据和工具的新站点也可以继续推进:references/01-ideation.md 中包含了路径。
本次会话无网络访问: 第1阶段根据已有证据对想法进行排序,并将其余部分标记为“未检查”。此人在第2阶段(简报被批准前)粘贴针对他们选择的那个目标搜索词的自动补全建议和第一页搜索结果。没有人需要为整个短名单粘贴。将 API 密钥保留在 BLOG.md 和文章文件夹之外。