JSON-LD 简介
JSON-LD 的全称是 JSON for Linked Data。它不是新的传输协议,也不是替代 JSON 的格式,而是在 JSON 之上增加语义约定,让数据中的字段、实体和关系可以被不同系统一致理解。
普通 JSON 只说明数据长什么样:
json
{
"name": "山海书店",
"url": "https://example.com"
}JSON-LD 进一步说明这些字段来自哪个词汇表、这个对象是什么类型、它在 Web 上的稳定身份是什么:
json
{
"@context": "https://schema.org",
"@type": "BookStore",
"@id": "https://example.com/#store",
"name": "山海书店",
"url": "https://example.com"
}它解决什么问题
| 问题 | JSON-LD 的做法 |
|---|---|
| 不同系统字段名冲突 | 使用 @context 把短字段映射到稳定 IRI |
| 数据缺少实体身份 | 使用 @id 标识一个可引用的实体 |
| 数据类型不明确 | 使用 @type 说明对象或值的类型 |
| 页面内容难被机器理解 | 使用 Schema.org 等词汇表描述页面主体 |
| 多个实体关系松散 | 使用嵌套对象、@id、@graph 表达关系网络 |
常见使用场景
- 给网页添加 Schema.org 结构化数据,帮助搜索引擎理解文章、产品、面包屑、组织、FAQ 等信息。
- 为开放数据、知识图谱或数据门户发布可互联的 JSON。
- 在 API 中保留普通 JSON 的开发体验,同时让字段具有明确语义。
- 把一组对象转成 RDF 数据集,供语义 Web 工具链处理。
JSON-LD 与 RDF
RDF 是一种描述“主体-谓词-宾语”三元组的数据模型。JSON-LD 可以序列化 RDF 数据,也可以从普通 JSON 平滑升级而来。你不必一开始就掌握 RDF 才能使用 JSON-LD,但理解下面这件事会很有帮助:
json
{
"@id": "https://example.com/books/1",
"name": "深入理解 Web 数据"
}可以理解为:
| 主体 | 谓词 | 宾语 |
|---|---|---|
https://example.com/books/1 | schema:name | 深入理解 Web 数据 |
@context 的作用,就是告诉处理器 name 实际对应哪个完整语义。
什么时候不需要 JSON-LD
- 数据只在单个内部系统中使用,而且字段含义没有跨系统解释需求。
- 页面内容不需要被搜索引擎、知识图谱或外部消费方结构化理解。
- 项目无法保证 JSON-LD 与可见页面内容一致。结构化数据如果与页面实际内容冲突,反而会带来质量风险。
核心心智模型
JSON-LD 可以看作三层叠加:
- JSON 层:对象、数组、字符串、数字、布尔值。
- 语义层:
@context将字段名映射到词汇表。 - 图层:
@id、@type和对象引用把数据连接成图。
掌握这三层后,JSON-LD 就不再是一段“SEO 代码”,而是一种可维护的语义数据表达方式。