标签缺失会导致自动发布流程卡住,因为jekyll、next.js isr等工具默认仅识别内的正文内容,若使用或替代,工具将无法提取内容而报“content not found”错误。

为什么 article 标签缺失会让自动发布流程卡住
很多 CMS 或自动化发布工具(比如 Jekyll 插件、Next.js 的 ISR 触发器、或内部构建脚本)会依赖语义化 HTML 结构做内容识别。它们默认只抓取 <article></article> 内的正文,而不是 <div class="content"> 或 <code><section></section>。一旦你用错标签,工具就“看不见”正文,直接跳过发布或报 Content not found 错误。
常见现象:本地预览正常,CI/CD 流程里 build 成功但页面空白;或者日志里反复出现 Failed to extract main content。
- 不是所有工具都支持 fallback 逻辑——别指望它自动降级找
<main></main>或<div id="post-body"> <li> <code><article></article>必须包裹完整独立内容单元(一篇博客、一条新闻),不能嵌套在另一个<article></article>里 - 如果模板是动态渲染(React/Vue),确保 SSR 阶段就输出了
<article></article>,不要等客户端 JS 补充 - 是否整个正文块被包在
<article></article>里?还是只包了标题或摘要? - 是否用了
<article class="post"></article>这类写法——class 不影响语义,但别加role="article"这种多余属性,反而干扰解析 - 有没有意外把
<header></header>、<footer></footer>放到<article></article>外面?这些本该是它的子元素
检查和修复模板中的 <article></article> 使用位置
打开生成后的 HTML 源码(不是浏览器渲染树),搜索 <article>。重点看三处:</article>
错误示例:
<div class="wrapper"> <h1>标题</h1> <div class="body">正文...</div> </div>正确应为:
<article><header><h1>标题</h1></header><div>正文...</div> </article>
当内容来自 Markdown 渲染时,如何确保输出带 <article></article>
多数 Markdown 解析器(如 remark、marked、markdown-it)默认只输出片段(fragment),不包任何容器标签。这意味着即使你在模板里写了 <article>{{ content }}</article>,如果 content 是纯 HTML 字符串且开头就是 <p></p>,某些工具仍可能因缺少明确根节点而拒绝处理。
- 确认模板引擎是否对
content做了自动转义或 strip —— 比如 Hugo 的{{ .Content | safeHTML }}才保留标签,{{ .Content }}会变成纯文本 - 避免在 Markdown 前后手动拼接
<article></article>,而应在 layout 层统一包裹,否则多入口(RSS、API、静态页)容易漏掉 - 如果用 Astro/Nuxt 等支持 MDX 的框架,直接在 frontmatter 里声明
layout: 'article.astro',比靠 JS runtime 注入更可靠
验证工具是否真能识别你的 <article></article>
别只信浏览器渲染效果。用工具链实际走一遍提取逻辑:
- 运行
npx html-validate --config .htmlvalidate.json your-post.html,检查是否报no-article或article-missing-heading - 在 Node 脚本里模拟发布工具行为:
const doc = new JSDOM(html).window.document;<br>console.log(doc.querySelector('article'));如果返回null,说明结构确实没生效 - CI 日志里搜
extracted article length:这类自定义 debug 输出,比看 success/fail 更早发现问题
最常被忽略的一点:有些工具要求 <article></article> 必须有 id 或 data-* 属性才能触发提取——不是规范问题,是它们自家硬编码的约定,得翻对应仓库的源码确认。











