JSON-LD 完全指南:从入门到精通

文章目录

JSON-LD(JSON for Linked Data)是一种基于 JSON 格式的结构化数据标记语言,可以帮助搜索引擎和其他应用程序更好地理解网页内容。它的核心作用是通过语义化的标记,为网页内容添加机器可读的元数据,从而提升搜索引擎的理解能力、提升 SEO 表现优化搜索结果的展示效果,并支持语音搜索、AI 助手等技术。

什么是 JSON-LD?

JSON-LD 是一种基于 JSON 的格式,用于在网页中嵌入机器可读的数据。它的核心目标是通过语义化的标记,帮助搜索引擎和其他应用程序更好地理解网页内容。JSON-LD 的主要特点包括:

  1. 基于 JSON:语法简单,易于阅读和编写。
  2. 语义化标记:使用 Schema.org 的词汇表,明确描述数据的含义。
  3. 灵活性:支持嵌套、数组、多语言等复杂数据结构。
  4. 广泛应用:适用于 SEO、语音搜索、数据集成等多种场景。

搜索引擎通过爬虫抓取网页内容时,只能看到文本和 HTML 标签,但无法直接理解这些内容的含义。JSON-LD 通过明确的语义标记(如 Product、Person、FAQPage 等),告诉搜索引擎页面的内容类型和结构,从而更准确地匹配用户搜索意图。JSON-LD 还可以让搜索引擎在搜索结果中展示更丰富的信息(称为“富媒体片段”),例如评分、价格、库存、事件时间等。这种富媒体片段不仅更吸引用户眼球,还能直接回答用户的问题,减少用户点击次数。

JSON-LD 的基本语法

JSON-LD 是一种用来帮助机器理解网页内容的格式。它使用 JSON 语法,但增加了一些特殊的标记和结构来表示数据的意义。为了帮助你理解,我们可以先看看一个简单的 JSON-LD 示例:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "示例产品",
  "description": "这是一个示例产品的描述。"
}
</script>

上面的代码可以嵌入到网页中。

具体说明:

  • <script type="application/ld+json"> 标签:这行是告诉浏览器,这部分内容是 JSON-LD 数据,通常放在网页的 <head> 标签内或其他合适的地方。
  • @context:这个关键字告诉 JSON-LD 你在使用什么标准或规则。这里我们使用的是 Schema.org,它是一个广泛认可的词汇库,用于描述各种网页内容的类型。
  • @type:这个关键字告诉搜索引擎你正在描述什么类型的内容。在这个例子中,我们定义的是一个“产品”(Product)。
  • namedescription:这些是具体的属性,描述产品的名称和描述。

JSON-LD 本质上是一种嵌入在网页中的数据格式,它不是网页的“可见内容”,而是帮助搜索引擎理解网页内容的“额外信息”。你可以把它想象成一个“后台标签”,它告诉搜索引擎这个页面是关于什么的。

一个典型的 JSON-LD 结构通常包含以下部分:

  1. @context:指向数据使用的标准或词汇库。
  2. @type:定义数据的类型(如 Product、Event、Person 等)。
  3. 属性(如 namepriceaddress 等):根据数据类型填写的具体内容。

JSON-LD 的核心关键字

JSON-LD 定义了一些核心关键字(以 @ 开头),用于描述数据的结构和语义:

关键字作用
@context告诉 JSON-LD 使用的标准(例如 Schema.org)。
@type定义数据的类型(如产品、事件、人物等)。
@id提供数据的唯一标识符(可选)。
@value定义属性的具体值。
@language定义文本的语言(例如 en 表示英语)。

JSON-LD 的核心功能

1. JSON-LD 的数据类型和属性

JSON-LD 结构化数据基于 Schema.org 词汇表,支持大量 @type 类型。以下是常见的主要类别和子类别:

主要核心类型

类型 (@type)描述
Thing所有类型的基础类(所有类型都继承自 Thing
CreativeWork任何创作的作品,如文章、书籍、电影、音乐等
Event事件,如音乐会、比赛、会议等
Intangible非实体事物,如品牌、货币、评分等
Organization组织,如公司、非盈利组织、学校等
Person个人或公共人物
Place地点,如城市、商店、景点等
Product产品或服务
Action用户行为,如购买、观看、评论等

子类别:文章 & 新闻

类型 (@type)描述
Article文章,通用类型
BlogPosting博客文章(适用于博客网站)
NewsArticle新闻文章(适用于新闻网站)
ScholarlyArticle学术论文
TechArticle技术文章,如 API 文档
Report报告、研究报告

子类别:组织 & 公司

类型 (@type)描述
Organization组织(通用类型)
Corporation公司
NGO非政府组织
GovernmentOrganization政府机构
EducationalOrganization教育机构(学校、大学)
LocalBusiness本地商家(适用于本地 SEO)
MedicalOrganization医疗机构

子类别:地点 & 本地业务

类型 (@type)描述
Place地点(通用类型)
LocalBusiness本地商家,如餐馆、商店
LandmarksOrHistoricalBuildings地标或历史建筑
TouristAttraction旅游景点
Restaurant餐厅
Hotel酒店

子类别:媒体 & 娱乐

类型 (@type)描述
CreativeWork创作作品(通用类型)
Movie电影
TVSeries电视剧
MusicAlbum音乐专辑
MusicRecording音乐录制(单曲)
VideoGame电子游戏
PodcastEpisode播客节目

子类别:产品 & 电商

类型 (@type)描述
Product产品(适用于电商)
Offer产品的报价
AggregateOffer多个报价的集合
Review用户评论
Brand品牌
Service服务
MerchantReturnPolicy退货政策

子类别:事件

类型 (@type)描述
Event事件(通用类型)
Festival节日、嘉年华
SportsEvent体育赛事
BusinessEvent商业活动
MusicEvent音乐会
TheaterEvent话剧演出
EducationEvent教育类活动

子类别:结构化数据 & 搜索优化

类型 (@type)描述
BreadcrumbList面包屑导航(SEO 重要)
FAQPageFAQ 页面(提升 Google 结果丰富度)
HowTo指南(如“如何做某事”)
QAPage问答页面(适用于论坛)
Rating评分(如产品评分)
AggregateRating综合评分(多个用户的评分)

其他子类别

类型 (@type)描述
WebSite网站(用于定义整个站点)
WebPage网页(用于特定页面)
SearchAction搜索操作(用于站内搜索)
EducationalOccupationalProgram教育和职业培训项目
JobPosting招聘信息

如何选择正确的 JSON-LD @type

  1. 博客文章BlogPosting
  2. 新闻文章NewsArticle
  3. 电商产品Product
  4. FAQ 页面FAQPage
  5. 服务型网站Service
  6. 本地商家LocalBusiness
  7. 面包屑导航BreadcrumbList
  8. 活动页面Event
  9. 产品评论Review
  10. 网站介绍WebSite
  11. 网页介绍WebPage

如果你的 JSON-LD 需要支持多种数据,可以用 @graph 组合多个类型。

2. JSON-LD 的嵌套数据结构

JSON-LD 支持嵌套数据结构,可以用于描述复杂的关系。例如,一个 Product 可以嵌套 offers 属性,而 offers 本身又是一个对象。

示例:嵌套结构

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "示例产品",
  "description": "这是一个示例产品的描述。",
  "offers": {
    "@type": "Offer",
    "price": "99.99",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  }
}
</script>

3. JSON-LD 数组的使用

JSON-LD 支持数组,可以用于描述多个值或多个对象。例如,一个 FAQPage 可以包含多个问题和答案。

示例:数组

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "示例问题 1",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "这是示例问题 1 的答案。"
      }
    },
    {
      "@type": "Question",
      "name": "示例问题 2",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "这是示例问题 2 的答案。"
      }
    }
  ]
}
</script>

4. JSON-LD 多语言支持

通过 @language 关键字,可以为文本指定语言。

示例:多语言支持

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": {
    "@value": "示例产品",
    "@language": "zh"
  },
  "description": {
    "@value": "这是一个示例产品的描述。",
    "@language": "zh"
  }
}
</script>

关于在 JSON-LD 多语言的更多用法和细节详情请阅读文章:JSON-LD 多语言支持详解:如何同时描述多种语言

JSON-LD 实战示例

为了更好地理解 JSON-LD 的应用,下面将展示几个实战示例,涵盖不同的数据类型、关键字、嵌套结构和多语言支持。这些示例将帮助你深入理解 JSON-LD 在实际中的使用方式。

1. BlogPosting 示例

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://example.com/my-awesome-blog-post"
  },
  "headline": "如何优化你的SEO策略:2025年最佳实践",
  "description": "本文将介绍一些 SEO 优化的最佳实践,帮助提升网站排名。",
  "datePublished": "2025-03-01T10:00:00+08:00",
  "dateModified": "2025-03-01T12:00:00+08:00",
  "author": {
    "@type": "Person",
    "name": "张三"
  },
  "publisher": {
    "@type": "Organization",
    "name": "优站SEO",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png"
    }
  },
  "image": "https://example.com/blog-post-image.jpg",
  "url": "https://example.com/my-awesome-blog-post",
  "articleSection": "SEO",
  "keywords": "SEO, 网站优化, 搜索引擎"
}
</script>

2. Product 示例

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "高效无线耳机",
  "image": "https://example.com/product-image.jpg",
  "description": "这款无线耳机提供卓越音质和舒适佩戴感。",
  "sku": "12345",
  "brand": {
    "@type": "Brand",
    "name": "音响大师"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/product-page",
    "priceCurrency": "CNY",
    "price": "299.00",
    "priceValidUntil": "2025-12-31",
    "itemCondition": "https://schema.org/NewCondition",
    "availability": "https://schema.org/InStock"
  }
}
</script>

3. Event 示例

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "2025国际编程大会",
  "startDate": "2025-05-15T09:00:00+08:00",
  "endDate": "2025-05-17T18:00:00+08:00",
  "location": {
    "@type": "Place",
    "name": "上海国际会展中心",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "上海市浦东新区世纪大道888号",
      "addressLocality": "上海",
      "addressRegion": "上海市",
      "postalCode": "200000",
      "addressCountry": "CN"
    }
  },
  "description": "国际编程大会,汇集全球顶级程序员,分享技术趋势与未来展望。",
  "url": "https://example.com/event/2025-international-programming-conference",
  "image": "https://example.com/event-image.jpg",
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/event-tickets",
    "priceCurrency": "CNY",
    "price": "999.00",
    "availability": "https://schema.org/InStock",
    "validFrom": "2025-02-01T09:00:00+08:00"
  }
}
</script>

4. Organization 示例

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "创新科技有限公司",
  "url": "https://example.com",
  "logo": "https://example.com/logo.png",
  "contactPoint": {
    "@type": "ContactPoint",
    "telephone": "+86-400-123-4567",
    "contactType": "Customer Service",
    "areaServed": "CN",
    "availableLanguage": "Chinese"
  },
  "sameAs": [
    "https://www.facebook.com/innovationtech",
    "https://twitter.com/innovation_tech"
  ]
}
</script>

5. LocalBusiness 示例

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "星光咖啡馆",
  "image": "https://example.com/cafe-image.jpg",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "北京市朝阳区星光路123号",
    "addressLocality": "北京",
    "addressRegion": "北京市",
    "postalCode": "100000",
    "addressCountry": "CN"
  },
  "openingHours": "Mo-Su 08:00-22:00",
  "telephone": "+86-10-12345678",
  "url": "https://example.com/star-cafe",
  "priceRange": "¥¥"
}
</script>

6. FAQPage 示例

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "什么是SEO?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "SEO(搜索引擎优化)是指通过优化网站内容、结构和外部链接等手段,提升在搜索引擎中的排名,从而增加网站的流量。"
      }
    },
    {
      "@type": "Question",
      "name": "如何提高网站的SEO排名?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "提高SEO排名的方法包括优化网站速度、内容质量、关键词使用、外链建设等。"
      }
    }
  ]
}
</script>

7. Review 示例

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Review",
  "reviewRating": {
    "@type": "Rating",
    "ratingValue": "4",
    "bestRating": "5"
  },
  "author": {
    "@type": "Person",
    "name": "李四"
  },
  "reviewBody": "这款耳机音质不错,佩戴舒适,性价比高。",
  "itemReviewed": {
    "@type": "Product",
    "name": "高效无线耳机"
  }
}
</script>

8. WebSite 示例

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "创新科技官网",
  "url": "https://example.com",
  "potentialAction": {
    "@type": "SearchAction",
    "target": "https://example.com/search?q={search_term}",
    "query-input": "required name=search_term"
  }
}
</script>

9. WebPage 示例

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "name": "产品页面 - 高效无线耳机",
  "url": "https://example.com/product/high-performance-wireless-headphones",
  "description": "购买高效无线耳机,享受卓越音质和舒适佩戴。",
  "mainEntityOfPage": "https://example.com/product/high-performance-wireless-headphones"
}
</script>

更多 JSON-LD 类型的具体使用示例请参考文章:JSON-LD 类型示例参考手册

JSON-LD 中的 @graph 用法

JSON-LD 中的 @graph 是什么?

@graph 是 JSON-LD 中的一个关键字,允许你在单个 script 标签内包含多个实体(例如多个产品、事件或组织)。它的作用是将多个相关的数据项以结构化的方式组织在一起,从而帮助搜索引擎更好地理解和处理这些数据。

@graph和我直接写多个 script block 有什么区别?

1. 多个 script block

  • 每个 script 标签通常表示一个独立的结构化数据实体。
  • 如果你在页面中使用多个 script 标签,它们之间的内容是独立的,搜索引擎会分别解析每个 script 标签。
  • 在一些复杂场景下,多个 script 标签可能会导致重复的结构化数据,尤其是当数据项之间存在关联时。

2. 使用 @graph

  • @graph 允许你在同一个 JSON-LD 数据块内,声明多个实体(例如组织、产品、评论等)之间的关联。
  • 它可以有效减少页面中多个 script 标签的使用,提高页面的结构化数据管理效率。
  • 当多个实体之间有联系时,使用 @graph 可以使它们更清晰地组合在一起,而不是分开处理。

举个例子: 如果你有一个页面,既包含一个产品信息,也包含关于该产品的评论,你可以通过 @graph 把这两个实体放在同一个 JSON-LD 数据块里,而不是分别为每个实体写一个单独的 script 标签。

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "@graph": [
    {
      "@type": "Product",
      "name": "高效无线耳机",
      "price": "299.00",
      "currency": "CNY"
    },
    {
      "@type": "Review",
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": "4",
        "bestRating": "5"
      },
      "author": {
        "@type": "Person",
        "name": "李四"
      },
      "reviewBody": "这款耳机音质不错,佩戴舒适,性价比高。",
      "itemReviewed": {
        "@type": "Product",
        "name": "高效无线耳机"
      }
    }
  ]
}
</script>

JSON-LD 的最佳实践

  1. 确保内容相关性:JSON-LD 数据应与页面内容高度相关。
  2. 避免重复数据:如果多个 JSON-LD 数据块包含相同的信息,确保数据一致。
  3. 遵循搜索引擎指南:确保结构化数据符合 Google 等搜索引擎的指南。
  4. 测试和验证:使用 Google 的富媒体结果测试工具验证 JSON-LD 是否正确实现。

JSON-LD 常见问题解答

1. 一个页面可以放置多个 JSON-LD 吗?

是的,一个页面可以放置多个 JSON-LD 数据块。可以通过多个 <script> 标签或合并 JSON-LD 数据实现。

2. JSON-LD 必须放在专门的页面吗?

不一定。JSON-LD 可以放在任何包含相关内容的页面上,例如主页、产品页面、博客文章等。

3. 如何验证 JSON-LD 的正确性?

可以使用以下工具验证 JSON-LD:

4. JSON-LD 中如何同时使用多种语言描述

在 JSON-LD 中实现多语言支持时,可以通过多种方式同时描述多种语言的内容。详情可参考文章:如何在 JSON-LD 中使用多语言

5. FAQPage 和 QAPage 这两个类型有何区别

这两者的主要区别在于页面内容的生成方式和互动性,FAQPage 更加静态和正式,而 QAPage 更具互动性和实时性。FAQPage 类型用于表示“常见问题解答”页面。这类页面通常列出一组预定义的、与主题相关的常见问题(FAQ)及其对应的回答。QAPage 类型用于表示问答页面,这种页面通常包括用户生成的内容。与 FAQPage 不同,QAPage 强调的是一个开放式的问答环境,其中问题和答案可能是动态生成的,用户可以提出问题并获取答案。

总结

JSON-LD 是一种强大的结构化数据标记语言,适用于 SEO 优化、语音搜索、数据集成等多种场景。通过合理使用 JSON-LD,可以显著提升网页的搜索可见性和用户体验。希望本文能帮助读者全面掌握 JSON-LD 的使用方法,解决实际应用中的问题。

附录


也可以看看