博客文章发布流程:从 Markdown 到上线的检查清单
文章写完到读者能打开,中间隔着一串容易被跳过的小事:slug、TDK、图片格式、内链、sitemap、搜索引擎提交。漏掉任何一项,页面能打开,但不会被好好收录。
下面是一条可以重复执行的发布链路,加上一份 15 项的发布前清单。整套动作按熟练程度大约 15~25 分钟,其中一半时间花在检查上。
整条链路分四段,每段的返工点都不一样:
| 阶段 | 做什么 | 产出 | 常见返工点 |
|---|---|---|---|
| 1 定稿 | 结构、语言、标点过一遍 | 干净的正文 | 发布后又改标题,导致 slug 与标题不符 |
| 2 转格式 | Markdown → HTML 或交给静态站构建 | 页面文件 | 表格、代码块、脚注渲染错 |
| 3 配齐元数据 | TDK、封面、分类、内链 | 可被收录的页面 | description 留空或用正文前 30 字 |
| 4 上线与提交 | 发布、检查、提交 sitemap / IndexNow | 可访问且已通知搜索引擎 | 只发布不提交,等自然发现 |
先定 slug 和路径,再谈别的
slug 是文章唯一不会轻易改的东西,因为改一次等于换一个 URL,外链和已有排名全部作废。所以它在发布前就要定死。
规则只有三条:
- 全小写英文,单词之间用连字符,不要下划线、不要空格、不要中文。
- 含主关键词,长度控制在 3~6 个词,比如
blog-publishing-workflow。 - 不含日期和版本号。带日期的路径在更新旧文时会很尴尬。
中文标题也能用中文路径,但分享出去会变成一长串百分号编码,且部分统计工具处理不好。除非站点本身就是纯中文环境,否则优先英文 slug。
TDK 三项,一项都不能空
标题、描述、关键词这三项决定了搜索结果里长什么样,很多模板在缺省时会用正文前 150 字兜底——那通常是一段没有信息量的开头。
- title:含主关键词,把最具体的限定词放前面。同一站点内标题不要重复。
- description:一句话说清「读完能得到什么」,控制在 80~120 字,不要复制首段。
- keywords:主关键词加 2~4 个长尾,用英文逗号分隔,不要堆二十个词。
另外确认 canonical 指向自己,且正文里只有一个 H1。多数静态站模板会用文章标题生成 H1,所以正文不要再写一级标题,层级从 H2 开始。
图片:WebP、限宽、alt 三件事
图片是发布环节最常见的性能与收录问题来源。三条硬规则:
- 格式转 WebP,宽度限制在 1600px 以内。相机直出或截图原图动辄三四千像素,单张几 MB,会直接拖慢首屏。
- alt 写内容,不写文件名。alt 要描述图里有什么,并自然包含本文关键词;「图片1」「截图」等于没写。
- 正文图加
loading="lazy",封面图不要懒加载,否则首屏会出现空白。
路径统一用绝对路径 /images/{slug}-1.webp,不要用相对路径。相对路径在分类页、分页、RSS 里会全部裂掉。
内链:2~3 条,链到具体的文章
内链不是装饰,它同时做两件事:告诉搜索引擎哪些页面相关,也告诉读者下一步读什么。
做法上守三条:
- 只链正文,不链首页。链一篇具体文章的收益远大于再链一次首页。
- 锚文本用描述性文字,比如「中文排版规范」,不要写「点击这里」「这篇文章」。
- 数量控制在 2~3 条,位置放在相关论述附近,不要在文末堆一排「相关阅读」凑数。
如果站点的 URL 是「无后缀」形式(/posts/xxx),内链就写这个形式,不要混用 /posts/xxx.html,否则会产生两个可访问地址,权重被拆开。
上线之后:提交,然后核对
sitemap 与 IndexNow:让搜索引擎知道有新页面
发布完成后做两件事:
- 确认新 URL 出现在 sitemap.xml 里。静态站需要在构建时重新生成 sitemap;有的站点用动态 sitemap,访问即最新,但也要实际打开确认。
- 提交 IndexNow。它是 Bing、Yandex 等搜索引擎共用的即时通知协议,需要在站点根目录放一个 key 文件,然后向接口推送 URL。百度用的是另一套推送接口,需要单独处理。
提交只是通知,不保证收录。真正的收录仍取决于内容质量与站点整体信任度,所以不要把提交当成发布流程的终点。
发布后 24 小时内要看的五件事
- 用手机打开一次,检查表格是否横向溢出、图片是否变形。
- 点一遍正文里的每个内链,确认没有 404。
- 看页面源码,确认 title、description、canonical、结构化数据都存在。
- 在搜索引擎用
site:你的域名 文章标题关键词查一次,观察收录节奏。 - 回到旧文,把可以指向新文的 1~2 处加上内链——这是最容易被忘掉的一步。
旧文更新还是发新文
有两种情况值得更新旧文而不是写新的:同一主题下补充了新材料,或旧文的结论已经过时。判断标准是搜索意图是否相同:读者搜同一个问题时,希望看到一篇完整答案,而不是三篇各说一半的文章。
更新时保留原 URL 与原发布时间,只更新「最后修改时间」。如果改动超过一半,才考虑新建一篇并在旧文顶部指向它。
发布前清单
- slug 全小写、含关键词、不含日期。
- title / description / keywords 三项非空且不重复。
- 正文只有一个 H1,层级从 H2 开始。
- 至少一个表格和一个列表,且表格在手机上不会撑破布局。
- 封面图 16:9、正文图 3:2,全部转成 WebP 且宽度不超过 1600。
- 所有 img 都有含关键词的 alt。
- 正文图片用绝对路径,且加了 lazy loading。
- 内链 2~3 条,全部指向存在的文章,锚文本描述性。
- 分类已存在,且分类 URL 是可读英文或拼音。
- 正文没有外链到无把握的来源。
- sitemap 含新 URL。
- IndexNow key 文件可访问,推送返回成功。
- 移动端打开无横向滚动。
- 页面源码含 canonical 与 JSON-LD。
- 旧文已回填至少一条指向新文的内链。
正文格式的细节(Markdown 语法、标点与空格)分别在Markdown 语法入门和中文排版规范里;如果这篇还没定稿,先看文章结构怎么安排把骨架定下来,发布阶段才不会反复返工。