🎀 🌸

JSON-LD 结构化数据怎么加?从零到出富摘要

JSON-LD 结构化数据怎么加?从零到出富摘要

先明确预期:结构化数据不提升排名,它改变的是搜索结果的「外观」。

当你的搜索结果多出一行面包屑、一条 FAQ 折叠框、一个发布日期,用户在同屏的十几条结果里选中你的概率会明显提高。这是纯粹赚到的点击率,也是结构化数据最实际的价值。

三种格式,只用一种

历史上存在三种标注格式:Microdata、RDFa、JSON-LD。现在一律用 JSON-LD——它写在 <script> 标签里,和页面 HTML 完全解耦,改版时不容易被破坏,也是搜索引擎官方推荐的形式。

放置位置:<head> 或 <body> 里都可以,搜索引擎都能读到。WordPress 站点通常用 wp_head 钩子输出到 </head> 前。

先加这两个:Article 和 BreadcrumbList

对内容站来说,投入产出比最高的是这两种类型。以下模板可直接改字段使用。

Article:告诉搜索引擎这是一篇文章

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "文章标题(建议 110 字符以内)",
  "description": "文章摘要",
  "image": ["https://blog.nvcb.cn/wp-content/uploads/2026/09/cover.png"],
  "datePublished": "2026-09-27T10:00:00+08:00",
  "dateModified": "2026-09-27T10:00:00+08:00",
  "author": {
    "@type": "Person",
    "name": "作者名",
    "url": "https://blog.nvcb.cn/author/admin"
  },
  "publisher": {
    "@type": "Organization",
    "name": "极客资源",
    "logo": {
      "@type": "ImageObject",
      "url": "https://blog.nvcb.cn/logo.png"
    }
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://blog.nvcb.cn/183.html"
  }
}
</script>

几个容易写错的地方:

  • image 建议给数组形式,多图时搜索引擎可选择;单张也要用方括号包起来。
  • 时间必须带时区偏移(+08:00),不能只写 2026-09-27。
  • dateModified 应反映真实的最后修改时间。如果每次访问都动态输出当前时间,会被判定为作弊。
  • mainEntityOfPage.@id 必须与页面的 canonical 完全一致。

BreadcrumbList:让搜索结果显示路径

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "首页",
      "item": "https://blog.nvcb.cn/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "SEO 技术",
      "item": "https://blog.nvcb.cn/category/seo"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "文章标题"
    }
  ]
}
</script>

规律:position 从 1 递增,最后一项是当前页面,不写 item。前面几项的 item 必须是可访问的绝对 URL。

还想更上一层:FAQPage

文章末尾带「常见问题」小节的,适合加 FAQPage。它能让搜索结果直接展开问答折叠框,占用高度明显更大。

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "结构化数据能提升排名吗?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "不会直接提升排名,但可以通过富摘要提高点击率。"
      }
    },
    {
      "@type": "Question",
      "name": "一个页面能放多个类型的结构化数据吗?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "可以,用 @graph 把多个对象合并到同一个 script 标签里输出。"
      }
    }
  ]
}
</script>

硬性要求:FAQPage 里的问答内容必须真实可见地出现在页面上。只写在 JSON 里而页面上看不到,属于违规标注,可能被手动处罚。

用 @graph 合并多个类型

一篇文章同时需要 Article、BreadcrumbList、FAQPage 时,与其输出三个 <script>,不如合并成一个:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    { "@type": "Article", "headline": "..." },
    { "@type": "BreadcrumbList", "itemListElement": [] },
    { "@type": "FAQPage", "mainEntity": [] }
  ]
}
</script>

这样维护成本更低,也不容易因为标签缺失导致解析中断。

在 WordPress 里怎么落地

三种方式,按侵入性从低到高:

方式适用场景注意
手写 mu-plugin零插件站点,完全可控字段需自己从文章数据里取
主题自带的 SEO 输出zibll 等主题已有基础支持先看源码确认输出了哪些类型,避免重复
SEO 插件不想碰代码注意别和主题输出重复,造成两个 Article

用 mu-plugin 挂钩输出的最小骨架:

add_action('wp_head', function () {
    if (!is_singular('post')) return;
    $p = get_post();
    $data = [
        '@context'      => 'https://schema.org',
        '@type'         => 'Article',
        'headline'      => get_the_title($p),
        'description'   => wp_strip_all_tags(get_the_excerpt($p)),
        'datePublished' => get_the_date('c', $p),
        'dateModified'  => get_the_modified_date('c', $p),
        'mainEntityOfPage' => [
            '@type' => 'WebPage',
            '@id'   => get_permalink($p),
        ],
    ];
    echo '<script type="application/ld+json">'
       . wp_json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)
       . '</script>';
}, 99);

注意 JSON_UNESCAPED_UNICODE——不加的话中文会变成 \uXXXX,虽然合法但可读性极差。另外钩子优先级设成 99,让它在主题输出之后执行,便于排查重复。

怎么验证有没有生效

三步,缺一不可:

  1. 语法验证:用 Schema Markup Validator(validator.schema.org)粘贴 URL 或源码,确认没有语法错误、没有多余字段。
  2. 富摘要预览:用搜索引擎官方的富媒体测试工具,看它实际能识别出哪些富摘要类型。识别不出来就说明字段缺了必填项。
  3. GSC 的「增强功能」报告:上线后几天,这份报告会显示「有效项目」和「无效项目」的数量。无效项目会给出具体原因和受影响 URL,这是唯一能反映真实处理结果的渠道。

特别提醒:验证通过 ≠ 一定会显示富摘要。搜索引擎会根据查询类型、竞争情况决定是否展示。结构化数据只是「申请资格」,不是「保证发放」。

三个常见翻车点

1. 和主题输出重复

很多主题自带基础的结构化数据。你再加一份,页面上就会出现两个 Article 对象,搜索引擎可能直接忽略全部。加之前先 curl 一下页面,grep 一下 application/ld+json,数一数有几个。

2. 字段值和页面内容不一致

结构化数据里的标题、作者、日期必须和页面可见内容一致。用 JSON 声明一个页面上根本没有的作者,是典型的违规。

3. 时间格式不规范

必须用 ISO 8601 完整格式。WordPress 里用 get_the_date('c') 输出,不要用 Y-m-d。

常见问题

结构化数据要写多少条才够?

不求多。一篇文章有 Article + BreadcrumbList 就已经覆盖了最主要的富摘要机会,有 FAQ 小节的再加 FAQPage,足够了。多余的类型反而增加出错概率。

加完多久能看到效果?

索引和富摘要的生效通常需要几天到几周。加完后在 GSC 里用「网址检查」请求重新抓取,可以加快一点。

没有富摘要显示,是白做了吗?

不是。结构化数据能帮助搜索引擎更准确地理解页面内容、判断实体关系,这部分收益即使不显示富摘要也存在。

图片[1]-JSON-LD 结构化数据怎么加?从零到出富摘要-极客资源
© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容