知识库首页 seo-llm 资料 structured-data.md

structured data

本地来源:seo-llm/skill/google-seo-skill/references/structured-data.md

结构化数据(Structured Data)完整指南

1. Article / BlogPosting Schema

// components/ArticleSchema.tsx
export function ArticleSchema({ post }: { post: Post }) {
  const schema = {
    '@context': 'https://schema.org',
    '@type': 'Article',
    headline: post.title,
    description: post.excerpt,
    image: post.coverImage,
    datePublished: post.publishedAt,
    dateModified: post.updatedAt,
    // author 最佳实践:使用 @type Person/Organization,含 name + url/sameAs
    // 多作者用数组,不要合并到一个 name 字段
    author: [{
      '@type': 'Person',
      name: post.author.name,
      url: post.author.url,  // 或 sameAs 指向作者主页
    }],
    publisher: {
      '@type': 'Organization',
      name: '网站名称',
      logo: {
        '@type': 'ImageObject',
        url: 'https://example.com/logo.png',
      },
    },
    mainEntityOfPage: {
      '@type': 'WebPage',
      '@id': `https://example.com/blog/${post.slug}`,
    },
  }

  return (
    <script
      type="application/ld+json"
      dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
    />
  )
}

2. BreadcrumbList Schema

// components/BreadcrumbSchema.tsx
export function BreadcrumbSchema({ items }: { items: BreadcrumbItem[] }) {
  const schema = {
    '@context': 'https://schema.org',
    '@type': 'BreadcrumbList',
    itemListElement: items.map((item, index) => ({
      '@type': 'ListItem',
      position: index + 1,
      name: item.name,
      item: item.url,
    })),
  }

  return (
    <script
      type="application/ld+json"
      dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
    />
  )
}

// 使用示例
<BreadcrumbSchema
  items={[
    { name: '首页', url: 'https://example.com' },
    { name: '博客', url: 'https://example.com/blog' },
    { name: '文章标题', url: 'https://example.com/blog/article' },
  ]}
/>

BreadcrumbList 必查清单(存在性 → 完整性 → 规范性)

### 存在性检查
- [ ] 页面 HTML 中存在 `@type: BreadcrumbList` 的 JSON-LD 脚本
- [ ] JSON-LD 在服务端渲染输出中(非客户端 JS 注入)
- [ ] 所有需要面包屑的页面都有对应的 BreadcrumbList Schema(非仅首页)

### 完整性检查
- [ ] `itemListElement` 至少包含 2 项(首页 + 当前页)
- [ ] 每个 ListItem 包含 `@type`、`position`、`name` 三个必需字段
- [ ] 除最后一项外,每个 ListItem 都包含 `item`(URL) 字段
- [ ] 面包屑覆盖完整路径层级(首页 → 分类 → 当前页),不跳级

### 规范性检查
- [ ] `position` 从 1 开始严格递增,无跳号无重复
- [ ] `item` URL 使用完整绝对路径(`https://example.com/path`,非 `/path`)
- [ ] `item` URL 与 canonical URL 格式一致(www/非www、尾斜杠统一)
- [ ] `name` 与页面可见面包屑导航文本完全一致
- [ ] 面包屑层级与 URL 路径层级逻辑对应
- [ ] 通过 Google Rich Results Test 验证无错误无警告

3. Organization Schema

// components/OrganizationSchema.tsx(放在首页)
export function OrganizationSchema() {
  const schema = {
    '@context': 'https://schema.org',
    '@type': 'Organization',
    name: '公司名称',
    url: 'https://example.com',
    logo: 'https://example.com/logo.png',  // ≥ 112x112px,Googlebot 可抓取可索引
    description: '公司简介',
    sameAs: [
      'https://twitter.com/company',
      'https://github.com/company',
      'https://linkedin.com/company/company',
    ],
    contactPoint: {
      '@type': 'ContactPoint',
      telephone: '+86-xxx-xxxx-xxxx',
      contactType: 'customer service',
      availableLanguage: ['Chinese', 'English'],
    },
    address: {
      '@type': 'PostalAddress',
      streetAddress: '街道地址',
      addressLocality: '城市',
      addressRegion: '省份',
      postalCode: '邮编',
      addressCountry: 'CN',
    },
    // 电商站点可选:hasMerchantReturnPolicy, hasMemberProgram, hasShippingService
    // 合规可选:legalName, vatID, taxID, foundingDate, numberOfEmployees
  }

  return (
    &lt;script
      type=&quot;application/ld+json&quot;
      dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
    /&gt;
  )
}

4. Product Schema

Google 区分两种 Product 标记: - Product Snippet(商品摘要):用于评测/比较等非购买页面,侧重评价信息和优缺点 - Merchant Listing(商家信息):用于可直接购买的页面,含配送、退货、产品变体等详情

电商站点应使用 Merchant Listing 模式,评测站点使用 Product Snippet 模式。

// components/ProductSchema.tsx
export function ProductSchema({ product }: { product: Product }) {
  const schema = {
    '@context': 'https://schema.org',
    '@type': 'Product',
    name: product.name,
    image: product.images,
    description: product.description,
    brand: {
      '@type': 'Brand',
      name: product.brand,
    },
    offers: {
      '@type': 'Offer',
      url: `https://example.com/products/${product.slug}`,
      priceCurrency: 'CNY',
      price: product.price,
      availability: product.inStock
        ? 'https://schema.org/InStock'
        : 'https://schema.org/OutOfStock',
      seller: {
        '@type': 'Organization',
        name: '网站名称',
      },
      // Merchant Listing 可扩展:shippingDetails、hasMerchantReturnPolicy
    },
    aggregateRating: product.rating
      ? {
          '@type': 'AggregateRating',
          ratingValue: product.rating.value,
          reviewCount: product.rating.count,
        }
      : undefined,
  }

  return (
    &lt;script
      type=&quot;application/ld+json&quot;
      dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
    /&gt;
  )
}

// 产品变体:使用 ProductGroup + hasVariant
// ⚠️ ProductGroup.name 必填,variesBy 支持:color/size/suggestedAge/suggestedGender/material/pattern
// 每个变体需独立 URL + 唯一标识符(SKU/GTIN),productGroupID 必须与 inProductGroupWithID 匹配
// const variantSchema = {
//   '@type': 'ProductGroup',
//   name: '产品系列名',
//   productGroupID: 'group-123',
//   variesBy: ['https://schema.org/color', 'https://schema.org/size'],
//   hasVariant: [
//     { '@type': 'Product', name: '红色-S', color: '红色', size: 'S', sku: 'SKU-001',
//       url: 'https://example.com/products/item-red-s', inProductGroupWithID: 'group-123' },
//     { '@type': 'Product', name: '蓝色-M', color: '蓝色', size: 'M', sku: 'SKU-002',
//       url: 'https://example.com/products/item-blue-m', inProductGroupWithID: 'group-123' },
//   ],
// }

5. FAQ Schema

// components/FAQSchema.tsx
export function FAQSchema({ faqs }: { faqs: FAQ[] }) {
  const schema = {
    '@context': 'https://schema.org',
    '@type': 'FAQPage',
    mainEntity: faqs.map((faq) => ({
      '@type': 'Question',
      name: faq.question,
      acceptedAnswer: {
        '@type': 'Answer',
        text: faq.answer,
      },
    })),
  }

  return (
    &lt;script
      type=&quot;application/ld+json&quot;
      dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
    /&gt;
  )
}

FAQ Schema 重要规则: - ⚠️ FAQ 富媒体结果现仅限健康类权威网站和政府网站展示,普通网站的 FAQ Schema 仍可标记但不会在搜索结果中获得 Rich Results 展示 - 每个问题在整个网站中只能出现一次(跨页面检查!) - 问题文本必须与页面可见内容完全一致 - 答案必须是完整的回答,不能只是链接 - 不要在 FAQ Schema 中放置广告或推广内容


6. WebSite Schema

⚠️ SearchAction / Sitelinks Search Box 已于 2024 年 11 月废弃,Google 不再支持通过 WebSite Schema 的 potentialAction 触发站内搜索框。不要再添加 SearchAction 字段。

WebSite Schema 的核心作用是控制 Google 搜索结果中显示的网站名称name 字段直接影响搜索结果顶部的站点名称展示。

// components/WebSiteSchema.tsx(放在首页)
export function WebSiteSchema() {
  const schema = {
    '@context': 'https://schema.org',
    '@type': 'WebSite',
    name: '你的网站名称',           // ← 控制 Google 搜索结果中的站点名称
    alternateName: 'YourSiteName',  // ← 可选:备用名称(缩写或英文名)
    url: 'https://example.com',
    // ❌ 不要再添加 potentialAction / SearchAction
  }

  // 使用 Next.js Metadata API 或服务端渲染输出 JSON-LD
  return <JsonLd data={schema} />
}

WebSite Schema 关键规则: - name 必须与网站实际品牌名称一致,不能堆砌关键词 - alternateName 用于品牌缩写或多语言名称(如中文网站的英文名) - 仅在首页部署,全站只需一个 WebSite Schema - url 必须是首页完整 URL - Google 综合 WebSite Schema name + og:site_name + <title> + 网页引用 决定站点名称,保持一致性


7. HowTo Schema(⚠️ 已废弃 — 2023.9 起桌面+移动端均不再展示 Rich Results)

// components/HowToSchema.tsx
export function HowToSchema({ howTo }: { howTo: HowToData }) {
  const schema = {
    '@context': 'https://schema.org',
    '@type': 'HowTo',
    name: howTo.title,
    description: howTo.description,
    totalTime: howTo.totalTime, // ISO 8601 格式,如 "PT30M"
    estimatedCost: howTo.cost
      ? {
          '@type': 'MonetaryAmount',
          currency: 'CNY',
          value: howTo.cost,
        }
      : undefined,
    supply: howTo.supplies?.map((s) => ({
      '@type': 'HowToSupply',
      name: s,
    })),
    tool: howTo.tools?.map((t) => ({
      '@type': 'HowToTool',
      name: t,
    })),
    step: howTo.steps.map((step, index) => ({
      '@type': 'HowToStep',
      position: index + 1,
      name: step.title,
      text: step.description,
      image: step.image,
      url: `${howTo.url}#step-${index + 1}`,
    })),
  }

  return (
    &lt;script
      type=&quot;application/ld+json&quot;
      dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
    /&gt;
  )
}

8. SoftwareApplication Schema

// components/SoftwareAppSchema.tsx(用于 SaaS 产品页)
export function SoftwareAppSchema({ app }: { app: SoftwareApp }) {
  const schema = {
    '@context': 'https://schema.org',
    '@type': 'SoftwareApplication',
    name: app.name,                     // ← 必填
    description: app.description,
    applicationCategory: app.category,  // 如 "BusinessApplication"
    operatingSystem: app.os || 'Web',
    url: app.url,
    screenshot: app.screenshots,
    offers: {                           // ← 必填(免费产品 price 写 "0")
      '@type': 'Offer',
      price: app.price || '0',
      priceCurrency: 'USD',
    },
    // ⚠️ aggregateRating 或 review 二选一必填,否则不展示 Rich Results
    aggregateRating: app.rating
      ? {
          '@type': 'AggregateRating',
          ratingValue: app.rating.value,
          ratingCount: app.rating.count,
        }
      : undefined,
    author: {
      '@type': 'Organization',
      name: app.developer,
    },
  }

  return (
    &lt;script
      type=&quot;application/ld+json&quot;
      dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
    /&gt;
  )
}

9. VideoObject Schema

// components/VideoSchema.tsx(用于视频页面)
export function VideoSchema({ video }: { video: VideoData }) {
  const schema = {
    '@context': 'https://schema.org',
    '@type': 'VideoObject',
    name: video.title,
    description: video.description,
    thumbnailUrl: video.thumbnail,     // 必须:稳定 URL,≥ 60x30px,BMP/GIF/JPEG/PNG/WebP/SVG/AVIF
    uploadDate: video.publishedAt,     // ISO 8601
    duration: video.duration,          // ISO 8601,如 "PT1M30S"
    contentUrl: video.fileUrl,         // 视频文件直链(可选,有助于预览生成)
    embedUrl: video.embedUrl,          // 嵌入播放器 URL
  }

  return <JsonLd data={schema} />
}

VideoObject 关键规则: - 视频必须使用标准 HTML 元素(<video>/<embed>/<iframe>/<object>),不能只用 CSS/JS - 每个视频创建专属观看页(视频为主要内容),有助于获取富媒体特性 - 缩略图必须是稳定 URL、受支持格式(BMP/GIF/JPEG/PNG/WebP/SVG/AVIF)、≥ 60x30px - 关键时刻:使用 ClipSeekToAction 结构化数据标记视频章节 - 直播徽章:使用 BroadcastEvent 结构化数据标记直播内容 - 使用 Search Console 视频索引报告监控视频索引状态 - ❌ 禁止使用 URL fragment(#)加载视频,Google 不支持 URL fragments - ❌ 禁止依赖用户交互(点击、滑动)才加载视频,确保渲染后的 HTML 直接包含视频元素 - ❌ Data URL 不受支持,视频源必须是标准 HTTP(S) URL - 使用 max-video-preview meta robots 标签控制视频预览时长(如 max-video-preview:30 限制 30 秒) - 支持的视频文件格式:3GP, 3G2, ASF, AVI, DivX, M2V, M3U, M3U8, M4V, MKV, MOV, MP4, MPEG, OGV, QVT, RAM, RM, VOB, WebM, WMV, XAP - 地区限制:使用结构化数据 regionsAllowed/ineligibleRegion 或 Video Sitemap <video:restriction> 控制可见国家/地区(ISO 3166-1 国家代码) - 视频移除:返回 404 状态码、添加 noindex meta 标签、或在结构化数据中设置过期日期(expires),也可通过 Search Console 提交移除请求

Video Sitemap

<!-- 可独立或嵌入主 sitemap,与 VideoObject 结构化数据互补 -->
<url>
  <loc>https://example.com/videos/video-page</loc>
  <video:video>
    <video:thumbnail_loc>https://example.com/thumbs/video1.jpg</video:thumbnail_loc>
    <video:title>视频标题</video:title>
    <video:description>视频描述</video:description>
    <video:content_loc>https://example.com/videos/video1.mp4</video:content_loc>
    <video:duration>600</video:duration><!-- 秒 -->
    <video:publication_date>2025-10-15T08:00:00+08:00</video:publication_date>
    <!-- 地区限制(可选) -->
    <video:restriction relationship="allow">CN US</video:restriction>
  </video:video>
</url>

10. Review Schema (原第9节)

// components/ReviewSchema.tsx
export function ReviewSchema({ review }: { review: ReviewData }) {
  const schema = {
    '@context': 'https://schema.org',
    '@type': 'Review',
    itemReviewed: {
      '@type': review.itemType, // Product, SoftwareApplication, Book 等
      name: review.itemName,
      image: review.itemImage,
    },
    reviewRating: {
      '@type': 'Rating',
      ratingValue: review.rating,
      bestRating: '5',
      worstRating: '1',
    },
    author: {
      '@type': 'Person',
      name: review.authorName,
    },
    datePublished: review.publishedAt,
    reviewBody: review.body,
    publisher: {
      '@type': 'Organization',
      name: '网站名称',
    },
  }

  return (
    &lt;script
      type=&quot;application/ld+json&quot;
      dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
    /&gt;
  )
}

Review Schema 规则: - itemReviewed 必须明确指定被评论的对象类型和名称 - 评分范围必须通过 bestRatingworstRating 声明 - reviewBody 应包含实质性评论内容,不能只有评分 - 自我评论(评论自己的产品)不符合 Rich Results 资格 - 与 AggregateRating 配合使用:单条评论用 Review,汇总评分用 AggregateRating


11. Rich Results 资格速查表

rich_results_eligibility:
  description: "各 Schema 类型在 Google 搜索中的 Rich Results 展示条件"

  # 本 skill 核心覆盖的 Schema 类型
  always_eligible:
    - type: "Article"
      rich_result: "AMP 文章轮播、Top Stories"
      requirements: ["headline", "image", "datePublished", "author"]

    - type: "BreadcrumbList"
      rich_result: "搜索结果中的面包屑路径"
      requirements: ["itemListElement 至少 2 项"]

    - type: "FAQ"
      rich_result: "可展开的问答列表(⚠️ 现仅限健康类权威网站和政府网站)"
      requirements: ["至少 1 个 Question+Answer", "问题全站唯一"]

    - type: "HowTo"
      rich_result: "⚠️ **已废弃** — 2023.9 起桌面端+移动端均不再展示 Rich Results"
      requirements: ["已废弃,不再使用;教程改用 Article + H2/H3 步骤标题"]

  conditional_eligible:
    - type: "Product"
      rich_result: "价格、库存、评分星标(区分 Product Snippet vs Merchant Listing)"
      requirements: ["name", "offers 或 review 或 aggregateRating"]
      note: "需有真实的价格和库存信息"

    - type: "Review"
      rich_result: "评分星标"
      requirements: ["itemReviewed", "reviewRating", "author"]
      note: "不能评论自己的产品"

  # Google 搜索支持的全部 33 种结构化数据类型 + 1 Beta(按需使用)
  all_supported_types:
    core: ["Article", "BreadcrumbList", "Organization", "Product", "FAQ", "WebSite", "SoftwareApplication", "VideoObject", "Review"]
    # ⚠️ HowTo 已于 2023.9 废弃(桌面+移动端均不再展示 Rich Results),不再列入 core
    domain_specific:
      - "Event — 活动/会议(需 name, startDate, location)"
      - "LocalBusiness — 本地商家(需 name, address)"
      - "Course — 课程(需 name, description, provider;轮播需 ≥3 门)"
      - "ProfilePage — 个人资料页(需 mainEntity: Person/Organization)"
      - "Recipe — 食谱(需 name, image;定义 nutrition.calories 时必须同时定义 recipeYield)"
      - "JobPosting — 招聘(需 title, datePosted, description, hiringOrganization;远程用 TELECOMMUTE;过期用 validThrough + Indexing API 加速移除)"
      - "Book — 图书"
      - "Movie — 电影"
      - "Dataset — 数据集(需 name, description;⚠️ 仅用于 Google Dataset Search,不在常规搜索结果中展示 Rich Results)"
      - "QAPage — 问答页面"
      - "Discussion Forum — 论坛"
      - "Carousel/ItemList — 轮播/列表容器"
      - "Speakable — 语音搜索标记"
      - "Subscription/Paywalled Content — 付费墙内容"
      - "Vacation Rental — 度假租赁"
      - "Image License Metadata — 图片版权"
      - "Employer Aggregate Rating — 雇主评分"
      - "MathSolver — 数学求解器(分步讲解)"
      - "Education Q&A — 教育问答(学习辅助平台,使用 Quiz/Question 类型)"
      - "ClaimReview (Factcheck) — 事实核查(需 claimReviewed, reviewRating)"
      - "ProductGroup/Product Variants — 产品变体(需 ProductGroup: name, productGroupID, variesBy; 每个变体需唯一 SKU/GTIN + offers;支持 nested 或 isVariantOf 两种结构)"
      - "MerchantReturnPolicy — 退货政策(需 applicableCountry + returnPolicyCategory 或 merchantReturnLink;季节性覆盖用 returnPolicySeasonalOverride + startDate/endDate)"
      - "MemberProgram — 会员忠诚计划(嵌套在 Organization 中,需 name, description, hasTiers→MemberProgramTier;通过 Product→Offer→UnitPriceSpecification 关联会员价)"
      - "ShippingService — 商家级配送政策(嵌套在 Organization.hasShippingService 中,需 shippingConditions;优先级:Content API > Merchant Center/Search Console > 产品级标记 > Organization 级标记)"
      - "⚠️ Carousels Beta(EEA/土耳其/南非)— ItemList + LocalBusiness/Product/Event,≥3 项,单站点策展,摘要页放置"

  validation:
    tool: "https://search.google.com/test/rich-results"
    frequency: "每次修改 Schema 后必须验证"
    common_errors:
      - "缺少必需字段"
      - "字段值与页面可见内容不一致"
      - "日期格式不正确(必须 ISO 8601)"
      - "URL 不可访问或重定向"

结构化数据验证要点

### 通用规则
- [ ] 使用 JSON-LD 格式(Google 推荐),也支持 Microdata 和 RDFa
- [ ] ⚠️ data-vocabulary.org 标记已停止支持,必须使用 schema.org 词汇
- [ ] 放在 `<head>` 中或服务端渲染
- [ ] Schema 内容必须与页面可见内容一致
- [ ] **不得标记用户看不到的内容**(标记不可见内容会被判为 spam,导致手动操作处罚)
- [ ] 不得包含隐藏内容或误导信息
- [ ] 所有必需字段都已填写
- [ ] 优先提供"少量但完整准确的推荐属性"而非"全面但不准确的属性"
- [ ] 时效性内容(活动、优惠等)的结构化数据必须保持更新
- [ ] 手动操作处罚仅影响富媒体结果展示,不影响普通搜索排名

### @type 类型准确性(必查!极易遗漏)
- [ ] **`@type` 必须与页面实际内容严格对应,用错类型会导致 Rich Results 失效甚至被判为 spam**
- [ ] SaaS / 在线工具 / 软件产品 → `SoftwareApplication`(必须含 `applicationCategory`、`operatingSystem`)
- [ ] 实物商品 / 电商产品 → `Product`(必须含 `offers`、`brand`)
- [ ] 博客 / 新闻文章 → `Article` 或 `BlogPosting`(必须含 `headline`、`datePublished`、`author`)
- [ ] 教程 / 步骤指南 → `Article`(⚠️ `HowTo` Rich Results 已于 2023.9 废弃,桌面+移动端均不再展示)
- [ ] 常见错误举例:
  - SaaS 定价页用了 `Product` → 应该用 `SoftwareApplication` + `offers`
  - 软件下载页用了 `Article` → 应该用 `SoftwareApplication`
  - 实物商品用了 `SoftwareApplication` → 应该用 `Product`
  - ~~教程文章用了 `Article` → 如果有明确步骤应该用 `HowTo`~~ HowTo 已废弃,教程直接用 `Article` + H2/H3 步骤标题
- [ ] 一个页面的主 Schema 只能有一个主类型,不能同时声明 Product 和 SoftwareApplication
- [ ] 辅助 Schema(BreadcrumbList、Organization、WebSite)可以与主 Schema 共存

### 字段值正确性(必查!极易遗漏)

**日期字段**:
- [ ] `datePublished` 和 `dateModified` 必须使用 ISO 8601 格式(`2025-01-15` 或 `2025-01-15T08:00:00+08:00`)
- [ ] `dateModified` 必须反映页面实际最后修改时间,**不能写死、不能永远等于 `datePublished`**
- [ ] 如果内容有更新但 `dateModified` 没变,Google 会认为内容陈旧,影响 Freshness 排名
- [ ] 常见错误:用构建时间代替实际内容修改时间、SSG 每次部署都刷新 `dateModified`

**价格字段**:
- [ ] `offers.price` 免费产品/SaaS **必须写 `"0"`**,不能省略 `price` 字段
- [ ] 省略 `price` 会导致 Google Rich Results 不展示价格信息
- [ ] `priceCurrency` 必须是有效的 ISO 4217 货币代码(`USD`、`CNY`、`EUR` 等)
- [ ] Freemium 模式:免费版用 `"price": "0"`,付费版用实际价格,不能写 `"Free"`

**图片字段**:
- [ ] `image` 必须是可访问的绝对 URL(`https://example.com/image.jpg`)
- [ ] 不能使用 base64 编码、相对路径、或返回 404 的链接
- [ ] **Article Schema 图片要求**:≥ 50K 像素(宽×高),推荐 16:9、4:3、1:1 多种宽高比,每篇至少一张
- [ ] Google 发现页面 / Top Stories 展示要求高分辨率图片(max-image-preview:large 或 AMP)
- [ ] 多图时使用数组格式:`"image": ["url1", "url2", "url3"]`

**null 值处理**:
- [ ] JSON-LD 中**不能出现 `null` 值**,Google 会报验证错误
- [ ] `JSON.stringify` 会自动去掉 `undefined` 字段(安全),但会输出 `null`(危险)
- [ ] 正确写法:条件渲染时用 `undefined` 而非 `null`,或在序列化前过滤掉 `null`
- [ ] 示例:`aggregateRating: product.rating ? { ... } : undefined` ✅
- [ ] 反例:`aggregateRating: product.rating ?? null` ❌

**@id 唯一性(多 Schema 共存时)**:
- [ ] 同一页面有多个 `&lt;script type=&quot;application/ld+json&quot;&gt;` 时,每个 Schema 的 `@id` 必须全局唯一
- [ ] 推荐格式:`"@id": "https://example.com/page#breadcrumb"`、`"@id": "https://example.com/page#article"`
- [ ] `@id` 重复会导致 Google 错误合并不同 Schema,产生无效数据
- [ ] 辅助 Schema(BreadcrumbList、Organization、WebSite)与主 Schema 共存时尤其注意

### 验证工具
- Google Rich Results Test: https://search.google.com/test/rich-results
- Schema.org Validator: https://validator.schema.org/

### FAQ Schema 跨页面重复检查
- [ ] 每个 FAQ 问题在全站只出现一次
- [ ] 使用 Grep 工具全局搜索重复的 question 字段
- [ ] 不同页面的 FAQ 主题应有明确区分
- [ ] ⚠️ FAQ 富媒体结果现仅限健康类权威网站和政府网站展示

### 结构化数据政策(违规会触发手动操作)
- [ ] 不为空白页面添加结构化数据
- [ ] 不标记虚假评论或欺骗性内容
- [ ] 不虚假声明所有权、隶属关系或主要用途
- [ ] 使用最具体的 schema.org 类型和属性名称
- [ ] 手动操作仅阻止富媒体结果展示,不影响普通搜索排名

相关文档

本文档为站内渲染。原始文件本地路径:saas/source/seo-llm/skill-google-seo-skill-references-structured-data-5861a1.md(仅本地保留,不入库不部署)