三种格式对比:JSON-LD vs Microdata vs RDFa
在上一篇中我们了解了结构化数据的概念和价值。在动手添加之前,需要先做一个决策:用哪种格式?结构化数据有三种标记格式——JSON-LD、Microdata 和 RDFa。它们都能传达相同的语义信息,但在写法、维护成本和 Google 的推荐程度上有显著差异。结论先说:选 JSON-LD。
三种格式概览#
JSON-LD
JSON-LD(JavaScript Object Notation for Linked Data)是用 JSON 语法编写的结构化数据,放在 <script type="application/ld+json"> 标签中。它与 HTML 完全分离——你的结构化数据是一个独立的 JSON 对象,不需要修改任何现有的 HTML 标签。
这是 Google 官方推荐的格式,也是目前使用最广泛的格式。
Microdata
Microdata 通过在 HTML 标签上添加 itemscope、itemtype 和 itemprop 属性来标注语义。它直接嵌入在现有的 HTML 结构中,与页面元素一一对应。
Microdata 出现较早,很多老网站和早期 CMS 主题仍在使用。Google 完全支持,但不再优先推荐。
RDFa
RDFa(Resource Description Framework in Attributes)与 Microdata 类似,也是通过 HTML 属性嵌入语义标注,使用 vocab、typeof、property 等属性。语法比 Microdata 稍复杂,多用于与语义网(Semantic Web)生态集成的场景。
在 SEO 实践中使用率最低,Google 支持但很少在文档中作为主要示例。
格式对比#
| 维度 | JSON-LD | Microdata | RDFa |
|---|---|---|---|
| 放置位置 | <script> 标签(head 或 body) | 嵌入 HTML 标签属性 | 嵌入 HTML 标签属性 |
| 与 HTML 耦合 | 完全解耦 | 高度耦合 | 高度耦合 |
| 可读性 | 清晰的 JSON 结构 | 分散在多个标签中 | 分散在多个标签中 |
| 维护难度 | 低(独立修改) | 高(改 HTML 影响标记) | 高(改 HTML 影响标记) |
| CMS 兼容性 | 极好(独立注入) | 需修改模板 | 需修改模板 |
| 多 Schema 共存 | 多个 script 标签并列 | 需嵌套或拆分 HTML | 需嵌套或拆分 HTML |
| 动态生成 | JS 生成 JSON 即可 | 需操作 DOM 属性 | 需操作 DOM 属性 |
| Google 推荐 | ✅ 首选推荐 | ✅ 支持 | ✅ 支持 |
为什么 Google 首选 JSON-LD#
Google 在其 结构化数据官方文档 中明确表示:"Google 推荐尽可能使用 JSON-LD 来实现结构化数据。"理由是:
- 与 HTML 解耦:JSON-LD 放在独立的
<script>标签中,不需要修改任何 HTML 元素。页面设计改版时,结构化数据不受影响;反之亦然。 - 易于阅读和调试:一个完整的 JSON 对象,所有属性集中在一处,比散落在十几个 HTML 标签中的属性更容易检查和修改。
- CMS 和模板友好:可以在模板的 head 或 body 中注入一段 script 标签,不需要修改文章内容区域的 HTML 结构。
- 支持动态生成:JavaScript 可以在运行时创建或修改 JSON-LD 对象。Google 的渲染引擎能够读取 JavaScript 动态插入的 JSON-LD。
- 多类型共存简单:同一页面需要 Article + BreadcrumbList + FAQPage?放三个
<script type="application/ld+json">标签就行,彼此独立。
同一数据的三种写法#
下面用一个简单的 Article 标记为例,展示同一语义信息在三种格式中的不同写法。
JSON-LD 写法
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "如何做好关键词研究",
"author": {
"@type": "Person",
"name": "张三"
},
"datePublished": "2026-06-20",
"image": "https://example.com/keyword-research.jpg"
}
</script>
整个标记集中在一个 JSON 对象中,与页面 HTML 完全无关。
Microdata 写法
<article itemscope itemtype="https://schema.org/Article">
<h1 itemprop="headline">如何做好关键词研究</h1>
<img itemprop="image"
src="https://example.com/keyword-research.jpg"
alt="关键词研究">
<span itemprop="author" itemscope
itemtype="https://schema.org/Person">
<span itemprop="name">张三</span>
</span>
<time itemprop="datePublished"
datetime="2026-06-20">2026-06-20</time>
</article>
语义属性分散在各个 HTML 标签上。如果修改 HTML 结构(比如把 <h1> 改成 <h2>,或移动元素位置),就需要同时检查 itemprop 是否还正确。
RDFa 写法
<article vocab="https://schema.org/" typeof="Article">
<h1 property="headline">如何做好关键词研究</h1>
<img property="image"
src="https://example.com/keyword-research.jpg"
alt="关键词研究">
<span property="author" typeof="Person">
<span property="name">张三</span>
</span>
<time property="datePublished"
datetime="2026-06-20">2026-06-20</time>
</article>
RDFa 的结构与 Microdata 非常相似,区别在于属性名不同(property 替代 itemprop,typeof 替代 itemtype)。同样与 HTML 高度耦合。
<script> 标签里,而 Microdata 和 RDFa 的标记散落在每一个 HTML 元素上。当页面结构复杂、标记类型多(Article + BreadcrumbList + FAQPage)时,JSON-LD 的维护优势更加明显。JSON-LD 优势详解#
与 HTML 完全解耦
这是 JSON-LD 最大的优势。结构化数据和页面展现各自独立:
- 前端开发改版设计时,不用担心破坏结构化数据
- SEO 团队修改结构化数据时,不用触碰前端代码
- A/B 测试页面布局时,结构化数据保持不变
CMS 和自动化友好
JSON-LD 可以通过模板系统、插件或后端逻辑自动生成,注入到页面的 <head> 中,不需要修改文章正文的 HTML 结构。WordPress 的 Yoast、Rank Math 等主流 SEO 插件都默认输出 JSON-LD。
多 Schema 并存无冲突
同一页面可以有多个独立的 <script type="application/ld+json"> 标签,每个描述不同类型的数据。它们互不干扰,也不需要在 HTML 层面处理嵌套关系。
<!-- Schema 1: Article -->
<script type="application/ld+json">
{ "@context": "https://schema.org", "@type": "Article", ... }
</script>
<!-- Schema 2: BreadcrumbList -->
<script type="application/ld+json">
{ "@context": "https://schema.org", "@type": "BreadcrumbList", ... }
</script>
<!-- Schema 3: FAQPage -->
<script type="application/ld+json">
{ "@context": "https://schema.org", "@type": "FAQPage", ... }
</script>
<head> 中就包含三个独立的 JSON-LD 标签:Article(描述文章本身)、BreadcrumbList(描述面包屑导航路径)、FAQPage(描述本文末尾的常见问题)。三者互不干扰,各自完整。Microdata 和 RDFa 什么时候还有用#
虽然 JSON-LD 是最佳选择,但另外两种格式并非完全过时:
- 历史遗留系统:如果你的网站已经大量使用 Microdata 且标记正确,迁移的优先级不高。Google 对三种格式的解析能力相同。
- 特定 CMS 或平台限制:某些平台可能不允许注入自定义
<script>标签,但允许修改 HTML 属性,这时 Microdata 是唯一的选择。 - 邮件 HTML:Google 在 Gmail 中支持用 Microdata/JSON-LD 标记邮件中的活动、订单等信息。某些邮件客户端对 script 标签有安全限制,Microdata 可能更可靠。
- 非 Google 消费者:某些语义网工具和知识图谱系统对 RDFa 有特别的支持。但如果你的目标是 Google 搜索,这不是考量因素。
选择建议#
| 场景 | 推荐格式 | 理由 |
|---|---|---|
| 新项目 | JSON-LD | Google 推荐、易维护、与 HTML 解耦 |
| 已有 Microdata 且正确 | 维持 Microdata | 迁移成本大于收益,Google 同等支持 |
| 计划大量新增标记 | JSON-LD | 新标记用 JSON-LD,老标记逐步迁移 |
| 无法注入 script 标签 | Microdata | 嵌入 HTML 属性是唯一方案 |
本栏目的后续文章全部以 JSON-LD 为示例格式。下一篇将详细讲解如何给页面添加 JSON-LD,包括放置位置、基本结构和完整的实操步骤。
常见问题#
JSON-LD、Microdata 和 RDFa 可以在同一个页面混用吗?
技术上可以,Google 也能解析同一页面上不同格式的结构化数据。但强烈建议不要混用——混用会增加维护复杂度,也更容易产生冲突或遗漏。选择 JSON-LD 一种格式统一使用是最佳实践。
已经用 Microdata 标记的老网站需要迁移到 JSON-LD 吗?
如果现有 Microdata 标记正确且维护成本可控,不必急于迁移——Google 仍然完全支持 Microdata。但如果你计划新增更多结构化数据类型,或者现有标记难以维护,迁移到 JSON-LD 是更好的长期选择。迁移时可以逐页替换,不需要一次性完成。
为什么有些 CMS 或插件生成的是 Microdata 而不是 JSON-LD?
历史原因。Microdata 比 JSON-LD 出现更早,很多早期的 WordPress 主题和 SEO 插件默认使用 Microdata(直接嵌入 HTML 标签属性)。现在主流的 SEO 插件(如 Yoast、Rank Math)已经默认生成 JSON-LD 格式。如果你的主题仍然输出 Microdata,可以在插件设置中切换,或者手动添加 JSON-LD 覆盖。