← 返回专栏
· 3 分钟阅读

Schema 结构化数据实战:不用付费工具也能做好标记

Schema 结构化数据让搜索引擎理解你的页面内容。这篇讲常见 schema 类型、怎么加、怎么验证——全程免费工具搞定。

Schema markup(结构化数据标记)就是区分这两种情况的东西:告诉搜索引擎“这里有点文字”和告诉它“这是一篇文章,作者是谁,什么时候发的,主题是什么,还有这些常见问题”。前者能拿到富摘要(rich snippets),后者啥都没有。

好消息是:你不需要 WordPress SEO 插件,不需要付费的 schema 生成器,也不需要开发者认证。只要你会写 HTML,你就能加结构化数据。这篇指南就是教你怎么做。

Schema Markup 到底干什么的

搜索引擎爬你的 HTML,然后试图理解你的页面在讲什么。它们很擅长读文字,但有时候分不清产品价格、食谱配料和碰巧长得像价格的随机数字。

Schema markup——具体来说就是 JSON-LD——通过在你的内容上面加一层机器可读的数据来解决这个问题。你把数据包成一种标准化格式,明确告诉搜索引擎“这是产品名、这是价格、这是库存状态”。

回报是什么?富摘要(rich results)。搜索结果里不再是光秃秃的蓝链接,你的页面可以显示星级评分、FAQ 手风琴、面包屑导航、活动日期等等。富摘要平均能提高 20-30% 的点击率,因为它们占的空间更大,看起来更有权威感。

JSON-LD vs Microdata vs RDFa

结构化数据有三种格式。用 JSON-LD。原因如下:

JSON-LD 是一个放在页面 <head><body> 里的 <script type="application/ld+json"> 代码块。它让你的结构化数据和可见的 HTML 完全分离。Google 推荐的就是这个。它最好维护。这篇指南里所有例子用的都是它。

Microdata 把 schema 属性(itempropitemscopeitemtype)直接嵌到你的 HTML 标签里面。又乱,又把标记和内容结构耦合在一起,而且 Google 已经弃用它、转向 JSON-LD 了。

RDFa 跟 Microdata 类似,但更啰嗦。没人用它做 SEO。

如果你用的是 Astro 或 Next.js 这类框架,JSON-LD 简直不要太简单——在布局模板里加一个 <script> 标签就行。不需要构建步骤,不需要插件,不需要依赖。

每个独立站需要的五种 Schema 类型

你不需要什么都标记。专注于 Google 确实会给富摘要奖励、且适用于大多数内容站点的 schema 类型就行。

1. Article(或 BlogPosting)

任何内容站点最核心的 schema。告诉 Google“这是一篇已发布的文章,有作者、日期和标题”。

{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "How to Do Keyword Research Without Paid Tools",
  "author": {
    "@type": "Person",
    "name": "Jane Doe",
    "url": "https://example.com/about"
  },
  "datePublished": "2026-01-15",
  "dateModified": "2026-01-20",
  "image": "https://example.com/images/article-cover.jpg",
  "publisher": {
    "@type": "Organization",
    "name": "Example Site",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png"
    }
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://example.com/article-url"
  }
}

光这一个就能让你的文章进 Google News、Top Stories 轮播和“关于此结果”面板。

2. FAQPage

如果你的文章有 FAQ 部分,FAQPage schema 可以让你在搜索结果里直接显示一个可展开的手风琴——占据大量垂直空间,把竞争对手往下挤。

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Do I need paid tools for SEO?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. Google Search Console, PageSpeed Insights, and free keyword research tools cover most SEO needs for indie sites."
      }
    },
    {
      "@type": "Question",
      "name": "How long does it take to rank?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Most pages take 3-6 months to rank for competitive keywords. Long-tail keywords can rank in weeks."
      }
    }
  ]
}

关键点:FAQ 里的每个问题,页面上必须有对应的可见答案。别加你内容里没有的问题——Google 会检查的。

3. BreadcrumbList

在搜索结果里显示导航面包屑,而不是一串光秃秃的 URL。这让你的结果看起来更精致,也让用户知道这个页面在你的站点结构中所处的位置。

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://example.com/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Journal",
      "item": "https://example.com/journal/"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Schema Markup Guide",
      "item": "https://example.com/journal/schema-markup-structured-data-seo/"
    }
  ]
}

4. Organization

帮助 Google 把你的品牌理解为一个实体。这会进知识面板和“关于此结果”功能。

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Example Site",
  "url": "https://example.com",
  "logo": "https://example.com/logo.png",
  "sameAs": [
    "https://twitter.com/example",
    "https://github.com/example"
  ]
}

sameAs 数组把你的组织链接到它的社交账号——这有助于 Google 各系统之间的实体识别。

5. WebSite(带 SearchAction)

如果你的站点有搜索功能,加一个 SearchAction 可以让 Google 直接在搜索结果摘要里显示搜索框。

{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "url": "https://example.com",
  "potentialAction": {
    "@type": "SearchAction",
    "target": {
      "@type": "EntryPoint",
      "urlTemplate": "https://example.com/search?q={search_term_string}"
    },
    "query-input": "required name=search_term_string"
  }
}

在 Astro、Next.js 和纯 HTML 里怎么实现 Schema

Astro

在布局或页面模板里直接加 script 标签:

---
const article = {
  headline: "Schema Markup Guide",
  datePublished: "2026-07-23",
  author: "Jane Doe"
};
---
<script type="application/ld+json" set:html={JSON.stringify({
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  headline: article.headline,
  datePublished: article.datePublished,
  author: { "@type": "Person", name: article.author }
})} />

在 Astro 里,用 set:html 注入序列化后的 JSON。不要用 is:inline——Astro 会正确处理并包含它。

Next.js

使用 next/script 组件或布局里的 <script> 标签:

import Script from 'next/script'

export function ArticleSchema({ article }) {
  return (
    <Script
      id="article-schema"
      type="application/ld+json"
      dangerouslySetInnerHTML={{
        __html: JSON.stringify({
          "@context": "https://schema.org",
          "@type": "BlogPosting",
          headline: article.title,
          datePublished: article.date,
          author: { "@type": "Person", name: article.author }
        })
      }}
    />
  )
}

纯 HTML

只要在 <head><body> 里加 script 标签就行:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "Schema Markup Guide",
  "datePublished": "2026-07-23",
  "author": { "@type": "Person", "name": "Jane Doe" }
}
</script>

一个页面上组合多种 Schema 类型

大多数页面需要的 schema 类型不止一种。你可以在同一个页面上放多个 <script type="application/ld+json"> 代码块——Google 会全部读取。

或者,用 @graph 数组把所有内容合并到一个代码块里:

{
  "@context": "https://schema.org",
  "@graph": [
    { "@type": "Organization", "name": "Example Site", "url": "https://example.com" },
    { "@type": "BlogPosting", "headline": "Schema Guide", "author": { "@type": "Person", "name": "Jane Doe" } },
    { "@type": "BreadcrumbList", "itemListElement": [ ... ] }
  ]
}

对于每页有多种 schema 类型的站点,@graph 方法更干净。它是一个单一数据源,你可以通过 frontmatter 或 CMS 数据编程式生成。

验证你的 Schema(免费)

永远不要不验证就部署 schema。无效的标记拿不到富摘要,还可能触发 Google Search Console 里的警告。

Google 富摘要测试(Rich Results Test)——权威验证工具。粘贴你的 URL 或原始 JSON-LD,它会精确显示你的标记符合哪些富摘要类型,以及任何错误或警告。

Schema.org Validator——比 Google 的工具更宽松。适合用来检查你的标记结构上是否正确,即使 Google 不支持该 schema 类型用于富摘要。

Google Search Console——查看“增强功能”(Enhancements)部分的结构化数据报告。GSC 显示的是整个站点的 schema 错误,不只是一个页面。

验证流程:

  1. 给页面加 schema
  2. 部署到一个公开可访问的 URL(或使用 staging URL)
  3. 在富摘要测试中运行该 URL
  4. 修复所有错误(红色)——警告(黄色)可选,但建议也处理
  5. 在 GSC 里提交 URL 请求重新抓取

常见的 Schema 错误

不要标记不可见的内容。 schema 里的每条数据必须对应页面上可见的内容。如果你的 FAQ schema 有 5 个问题,但页面上只显示 3 个,Google 会标记你。

不要用通用占位符。 "description": "Article about SEO" 没有任何价值。写一个跟你的 meta description 匹配的真实描述。

别忘了 dateModified。 如果你更新了文章,记得同步更新 schema 里的 dateModified。Google 用这个字段来决定是否重新抓取和重新评估内容。

不要把 Organization 错误地嵌套在 Article 里面。@graph 或分开的 script 标签。试图把所有东西塞进一个嵌套对象会导致无效标记。

不要跳过 image 字段。 schema 里没有图片的文章很难拿到富摘要。用一张至少 1200×675 像素的高质量图片。

衡量 Schema 的影响

部署 schema 之后,追踪它的影响:

Google Search Console → 效果(Performance)→ 搜索外观。 按“富结果”过滤,专门看那些获得了增强摘要的页面的展示次数、点击次数和点击率。对比前后数据。

GSC → 增强功能(Enhancements)。 每种 schema 类型(Article、FAQ、Breadcrumb)都有自己的报告,显示整个站点的有效页面、警告和错误。

部署 schema 到搜索结果里出现富摘要,预计有 2-4 周的延迟。Google 需要重新抓取、处理标记并更新索引。

Schema 与 AI 搜索(GEO)

结构化数据的意义不止于 Google 搜索结果。AI 引擎——ChatGPT、Perplexity、Claude——越来越多地解析 schema 来理解页面内容。当 AI 系统遇到 @type: "BlogPosting" 并带有清晰的作者和日期时,它对这个内容可信度的信心,比面对无结构文本的页面要高得多。

如果你在做 AI 搜索可见度优化,schema markup 是你所能做的高杠杆技术改动之一。这不只是为了富摘要——这是为了让你的内容对下一代搜索机器可读。

快速上手清单

  • 在首页加 Organization schema(一次性设置)
  • 在首页加带 SearchAction 的 WebSite schema(一次性设置)
  • 在文章布局模板里加 BlogPosting/Article schema(一次性设置)
  • 在页面模板里加 BreadcrumbList schema(一次性设置)
  • 在带 FAQ 部分的文章里加 FAQPage schema(每篇文章)
  • 部署前用富摘要测试验证每个页面
  • 监控 GSC 增强功能报告里的 schema 错误
  • 修订内容时更新 dateModified

对一个典型的内容站点来说,整个搭建过程大约需要 2 小时。一旦你的模板里包含了 schema,每篇新文章都会自动获得结构化数据,不需要额外工作。这就是复利回报——一次投入,永久获得富摘要资格。

要建立完整的技术 SEO 基础,可以把 schema markup 和 技术 SEO 审计 搭配起来,确保你的站点可抓取且速度快,然后专注于 内部链接内容质量 来推动排名。

想给自己的站点做同样的分析?

ZensInk Pro 把这个流程自动化了。一条命令,从种子词到内容计划。

查看 Pro →