json-ld必须放在或内部,不能嵌套在等标签内,且需服务端渲染、禁用async/defer/type="module",googlebot仅解析首屏直出的纯json脚本块。

JSON-LD 必须放在 还是 ?
必须放 或 内部,且不能嵌套在其他标签里——<div>、<code><template></template>、<noscript></noscript> 里都不行。Googlebot 不执行 JS,也不解析 DOM 结构,只扫描原始 HTML 中直出的 <script type="application/ld+json"></script> 块。
常见错误现象:Search Console 显示“未检测到结构化数据”,但源码里明明有——大概率是被框架(如 Next.js 的 useEffect)动态插入,或 CMS 输出时套进了 <section></section> 标签里。
- SSR / 静态站点(Hugo、Jekyll)天然安全,直接写进模板即可
- React/Vue 项目务必确保该 script 在服务端渲染(SSR)阶段就输出,别等客户端挂载
- 绝对不要加
async、defer或type="module",这些会让浏览器跳过解析
json_encode() 动态生成 JSON-LD 时容易翻车的点
PHP 或 Node.js 模板中用函数拼 JSON-LD 很常见,但 json_encode() 默认不处理 HTML 实体和中文编码,直接吐出去常导致语法非法或字段丢失。
使用场景:CMS 文章页、商品详情页等需根据数据库字段动态生成结构化数据的页面。
- 必须传
JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES,否则中文变 \uXXXX,斜杠被转义 - 所有字符串字段(如
headline、description)要先过htmlspecialchars($str, ENT_QUOTES, 'UTF-8'),防 XSS 和引号破坏 JSON 结构 - 检查
json_last_error(),失败时记录日志,别静默吞掉错误 - 避免在循环中反复调用
json_encode()拼接多个对象——改用数组 push 后统一 encode
Article 类型为什么加了却不出富摘要?
不是写了 "@type": "Article" 就能触发 Google 富摘要。它只认三要素齐全且格式严格的组合:缺一不可,错一个字段名或格式就静默忽略。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
使用场景:仅限单篇正文页(博客、新闻稿),列表页、首页硬塞会降低可信度。
-
headline:必须是字符串,不能为空或纯空格 -
datePublished:必须是 ISO 8601 格式,如"2026-07-01T10:30:00+08:00";"2026-07-01"可接受,但"2026/07/01"或中文日期直接失效 -
author:必须是对象,含"@type"和"name",例如{"@type": "Person", "name": "张三"};只写"author": "张三"不生效 -
image字段填的 URL 必须返回 200、可公开访问、且为绝对路径(https://开头)
本地验证时 Rich Results Test 报错但源码看着没问题?
工具报“无法解析”或字段缺失,往往不是逻辑问题,而是环境干扰或细节疏漏。
性能影响几乎为零,但验证环节最容易踩坑。
- 浏览器插件(尤其广告屏蔽、隐私类)可能过滤掉
<script type="application/ld+json"></script>,测试前务必禁用 - 复制粘贴 HTML 到工具时,确认包含完整
<script></script>块,且没被编辑器自动删掉末尾逗号或换行 - 相对路径(如
"image": "/img/logo.png")会被判无效,必须转成绝对 URL -
@context必须严格为"https://schema.org",写成http或拼错字母(如schem.org)都会失败










