根本原因是HTML结构与JSON-LD内容不一致,Google会交叉比对DOM可见内容和结构化字段,任一不匹配(如标题、日期、价格、SKU等)即拒绝富摘要,即使Rich Results Test显示“Valid”也无效。

为什么加了结构化数据还不出Rich Snippets
根本原因不是没加,而是HTML结构和JSON-LD对不上。Google会交叉比对DOM可见内容和结构化字段,任一不一致(比如
写“iPhone 15”,但JSON-LD里"headline"是“iPhone 15 Pro”)就会拒掉富摘要。
-
Rich Results Test显示“Valid”只代表语法正确,不代表能触发展示
- 必须用
URL Inspection工具查“Crawled”状态后的实时解析结果
- 常见断裂点:
datetime属性值与JSON-LD中datePublished差秒级、大小写不一致、空格多一个
- 页面首屏HTML里没出现的文本,即使JSON-LD写了,也会被忽略——爬虫不执行JS
哪些HTML标签直接参与Rich Snippets生成
Rich Results Test显示“Valid”只代表语法正确,不代表能触发展示URL Inspection工具查“Crawled”状态后的实时解析结果datetime属性值与JSON-LD中datePublished差秒级、大小写不一致、空格多一个不是所有语义标签都起作用,只有和Schema类型强关联的几个才被Google明确提取:
-
<time datetime="2024-05-20T09:30:00+08:00">:对应datePublished、startDate等时间字段,必须ISO 8601格式 -
<figure><figcaption>产品主图说明</figcaption></figure>:增强image字段可信度,配合JSON-LD中imageURL可提升富摘要通过率 -
<h1>到<h3>:自动映射为headline,跳级(如<h2>后接<h4>)会导致部分字段丢失 -
<nav aria-label="Breadcrumb">+aria-current="page":与BreadcrumbList结构化数据联动,缺一不可
Product页面最容易踩的三个结构化坑
电商SKU页加了Product类型结构化数据,反而被标记“误导性富摘要”的情况很常见,问题基本集中在以下三点:
-
availability字段写"InStock",但DOM里显示“暂无库存”或按钮文案是“缺货”——爬虫以可见文本为准 -
offers.price是字符串"¥5,999",没去掉逗号和符号,应为纯数字5999.0,且必须配priceCurrency -
sku字段在JSON-LD里写了"SKU123",但页面HTML中完全没出现这个字符串——Google要求SKU必须在首屏可见文本中出现至少一次
服务端渲染时JSON-LD怎么放才不被爬虫漏掉
动态注入的<script type="application/ld+json">大概率失效,关键在于是否出现在初始HTML响应中:
立即学习“前端免费学习笔记(深入)”;
- Next.js用
useHead或head配置项,确保<script>在<head>内输出,而非useEffect里append - Nuxt中必须走
useHead或head: {},不能在onMounted里操作DOM - PHP/Jinja模板中调用
json_encode($data, JSON_UNESCAPED_UNICODE),禁用字符串拼接 - 绝对禁止:
type写成"text/json"或漏掉type="application/ld+json",整个脚本会被忽略
最隐蔽的问题是:开发环境看到源码里有JSON-LD,但生产环境CDN缓存了旧HTML,或者构建脚本没把数据注入进去——上线后务必用curl -s https://yoursite.com | grep ld+json验证原始响应。



















