先明确预期:结构化数据不提升排名,它改变的是搜索结果的「外观」。
当你的搜索结果多出一行面包屑、一条 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,让它在主题输出之后执行,便于排查重复。
怎么验证有没有生效
三步,缺一不可:
- 语法验证:用 Schema Markup Validator(validator.schema.org)粘贴 URL 或源码,确认没有语法错误、没有多余字段。
- 富摘要预览:用搜索引擎官方的富媒体测试工具,看它实际能识别出哪些富摘要类型。识别不出来就说明字段缺了必填项。
- 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 结构化数据怎么加?从零到出富摘要-极客资源](http://blog.nvcb.cn/wp-content/uploads/2026/09/e8889a5a-61ee-431b-9984-a0f1b460a1f6-1024x683.png)
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们第一时间更新。










暂无评论内容