JSON-LD必须严格使用type="application/ld+json"标签,置于head末尾或body开头,内容为纯JSON且符合Schema.org规范,Article需包含headline、datePublished、author三字段并正确格式化。

script type="application/ld+json" 必须严格匹配类型和位置
Google 只识别 type="application/ld+json" 的 <script> 标签,其他写法一律忽略。不是 text/json,不是 application/json,更不能漏写 type 属性。
-
<script type="application/ld+json">{...}</script> 是唯一被稳定支持的写法
- 必须放在
<head> 末尾或 <body> 开头,不能嵌在另一个 <script> 里
- 不能被 HTML 注释(
<!-- -->)包裹,也不能套在 <div> 或 <section> 内
- 客户端 JS 动态插入(如
document.createElement('script'))基本无效——Googlebot 不执行 JS
JSON-LD 内容必须是纯 JSON,不是 JS 对象
哪怕多一个字符,整块都会被跳过。常见错误不是逻辑错,而是格式越界:
- 所有键名和字符串值必须用英文双引号
",单引号 ' 直接报错
- 不能有尾逗号:
"name": "张三", → 必须删掉末尾逗号
- 不能含任何注释:
// 这是注释 或 /<em> ... </em>/ 全部非法
- 不能声明变量:
const data = { "@context": "<a href="https://www.php.cn/link/9e18f95f1c259dbcc2388008c47d5d25">https://www.php.cn/link/9e18f95f1c259dbcc2388008c47d5d25</a>" }; 是 JS,不是 JSON-LD
-
@context 必须严格为 "<a href="https://www.php.cn/link/9e18f95f1c259dbcc2388008c47d5d25">https://www.php.cn/link/9e18f95f1c259dbcc2388008c47d5d25</a>"(注意 https、大小写、末尾斜杠)
Article 类型字段缺失或类型错误等于没写
只写 "@type": "Article" 没用,Google 要求以下三个字段同时存在且格式正确:
-
headline:必须是字符串,且与页面 <h1> 文本逐字一致
-
datePublished:必须是 ISO 8601 字符串,推荐带时区,如 "2026-07-23T10:30:00+08:00";"2026-07-23" 虽能过基础校验,但部分解析器会降权
-
author:不能是字符串 "张三",必须是对象,至少含 "@type" 和 "name",例如 {"@type": "Person", "name": "张三"}
<script type="application/ld+json">{...}</script> 是唯一被稳定支持的写法 <head> 末尾或 <body> 开头,不能嵌在另一个 <script> 里 <!-- -->)包裹,也不能套在 <div> 或 <section> 内 document.createElement('script'))基本无效——Googlebot 不执行 JS - 所有键名和字符串值必须用英文双引号
",单引号'直接报错 - 不能有尾逗号:
"name": "张三",→ 必须删掉末尾逗号 - 不能含任何注释:
// 这是注释或/<em> ... </em>/全部非法 - 不能声明变量:
const data = { "@context": "<a href="https://www.php.cn/link/9e18f95f1c259dbcc2388008c47d5d25">https://www.php.cn/link/9e18f95f1c259dbcc2388008c47d5d25</a>" };是 JS,不是 JSON-LD -
@context必须严格为"<a href="https://www.php.cn/link/9e18f95f1c259dbcc2388008c47d5d25">https://www.php.cn/link/9e18f95f1c259dbcc2388008c47d5d25</a>"(注意 https、大小写、末尾斜杠)
Article 类型字段缺失或类型错误等于没写
只写 "@type": "Article" 没用,Google 要求以下三个字段同时存在且格式正确:
-
headline:必须是字符串,且与页面 <h1> 文本逐字一致
-
datePublished:必须是 ISO 8601 字符串,推荐带时区,如 "2026-07-23T10:30:00+08:00";"2026-07-23" 虽能过基础校验,但部分解析器会降权
-
author:不能是字符串 "张三",必须是对象,至少含 "@type" 和 "name",例如 {"@type": "Person", "name": "张三"}
headline:必须是字符串,且与页面 <h1> 文本逐字一致 datePublished:必须是 ISO 8601 字符串,推荐带时区,如 "2026-07-23T10:30:00+08:00";"2026-07-23" 虽能过基础校验,但部分解析器会降权 author:不能是字符串 "张三",必须是对象,至少含 "@type" 和 "name",例如 {"@type": "Person", "name": "张三"} 另外,image 字段若填写,值必须是 HTTPS 绝对 URL 数组,如 ["<a href="https://www.php.cn/link/ace5937f91d605812f32d321f221124c">https://www.php.cn/link/ace5937f91d605812f32d321f221124c</a>"];相对路径或需登录访问的链接会被静默丢弃。
多实体共存时优先用 @graph 数组平级声明
不要把 Article 和 Organization 套在一个对象里,容易因嵌套层级出错或字段覆盖:
- 错误写法:
{"@type": "Article", "publisher": {"@type": "Organization", "name": "XX媒体"}}
- 正确写法:用
@graph 数组平级列出多个实体,每个独立完整
- 示例片段:
{"@context": "<a href="https://www.php.cn/link/9e18f95f1c259dbcc2388008c47d5d25">https://www.php.cn/link/9e18f95f1c259dbcc2388008c47d5d25</a>", "@graph": [{"@type": "Article", ...}, {"@type": "Organization", ...}]}
{"@type": "Article", "publisher": {"@type": "Organization", "name": "XX媒体"}} @graph 数组平级列出多个实体,每个独立完整 {"@context": "<a href="https://www.php.cn/link/9e18f95f1c259dbcc2388008c47d5d25">https://www.php.cn/link/9e18f95f1c259dbcc2388008c47d5d25</a>", "@graph": [{"@type": "Article", ...}, {"@type": "Organization", ...}]} 这种写法兼容性更强,也更容易被 Google 的 Rich Results Test 工具逐个校验——尤其当页面同时描述内容+发布者+作者时,@graph 是目前最稳的落地方式。
实际部署时最容易被忽略的,是服务端输出前未做 JSON 安全转义,导致中文或特殊字符破坏结构;还有人把 @id 或 mainEntityOfPage 填了但指向不存在的 URL,反而触发验证警告。



















