itemtype必须是严格匹配的HTTPS URL,如https://schema.org/LocalBusiness;itemscope与itemtype须同标签声明;itemprop须符合itemtype定义的属性集;嵌套对象需用itemprop+itemscope同元素绑定。

itemtype 必须是完整 HTTPS URL,不能缩写或拼错
itemtype 的唯一作用是告诉解析器“这个 itemscope 描述的是哪一类实体”,它必须指向 schema.org 官方定义的、可 HTTP 访问的类型页面。写成 Person、https://schema.org/person(小写)、http://schema.org/Person(HTTP 协议)或 ./Product 都会直接导致整块微数据被 Google Rich Results Test 忽略。
常见错误包括:复制旧文档里的 http://data-vocabulary.org/Product(已废弃多年)、用本地路径模拟类型、或把 itemtype 当 class 一样随意命名。验证时只要看到 “Unrecognized type” 或 “No structured data detected”,第一反应就该检查 itemtype 是否为严格匹配的 HTTPS URL。
- ✅ 正确:
<div itemscope itemtype="https://schema.org/LocalBusiness"> - ❌ 错误:
<div itemscope itemtype="LocalBusiness">(无协议无域名) - ❌ 错误:
<div itemscope itemtype="https://schema.org/localbusiness">(大小写敏感)
itemscope 和 itemtype 必须写在同一 HTML 标签上
这两个属性不是“父子关系”,也不是“作用域继承”,而是强绑定的声明对。它们必须共存于同一个起始标签内,否则搜索引擎无法建立语义上下文——哪怕只漏掉一个,所有内部的 itemprop 都会失效。
典型误用场景:在 <body itemscope> 上加 itemscope,却把 itemtype 写在子 <main> 里;或者把 itemtype 放在 <section>,而 itemscope 放在更深层的 <article>。这种拆分会让解析器完全丢失类型信息。
立即学习“前端免费学习笔记(深入)”;
- ✅ 正确:
<article itemscope itemtype="https://schema.org/Article"> - ❌ 错误:
<article itemscope><header itemtype="https://schema.org/Article"> - ❌ 错误:
<body itemscope><article itemtype="https://schema.org/Article">
itemtype 决定可用的 itemprop,不能跨类型混用
每个 schema.org 类型都明确定义了它支持哪些属性。比如 price 只在 https://schema.org/Offer 或 https://schema.org/Product 下合法;写在 https://schema.org/Person 里,Google 工具会报 “Property price is not a valid property of Person”。这不是警告,是硬性校验失败。
查属性前必须先确认 itemtype:去 https://schema.org/[YourType] 页面看右侧 “Properties” 表格,注意每行的 “Expected Type” 列——它告诉你这个属性值本身该是什么类型(比如 image 要求是 URL 或 ImageObject,不能是纯文本“logo.jpg”)。
- ✅ 合法:
<div itemscope itemtype="https://schema.org/Offer"><span itemprop="price">¥299</span></div> - ❌ 非法:
<div itemscope itemtype="https://schema.org/Person"><span itemprop="price">¥299</span></div> - ⚠️ 注意:
telephone在Person和Organization中都存在,但openingHoursSpecification只属于LocalBusiness,别套错
嵌套对象必须用 itemprop + itemscope 紧贴绑定
当某个属性本身是个复杂对象(比如 author 是一个人、address 是一个地址),不能靠 DOM 层级“自动推导”。必须让 itemprop 和子级的 itemscope 出现在**同一个元素**上,否则 Google 会丢弃整个嵌套结构。
最容易被忽略的是地址类标记:很多人写 <div itemprop="address"><span itemscope itemtype="https://schema.org/PostalAddress">.../div>,这会导致 address 值为空。因为 itemprop="address" 没绑定到任何 itemscope,只是个空壳。
- ✅ 正确:
<div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress">... - ❌ 错误:
<div itemprop="address"><div itemscope itemtype="https://schema.org/PostalAddress">... - ⚠️ 地址必须补全关键字段:
addressLocality、addressRegion、postalCode、addressCountry缺一不可,否则 LocalBusiness 富媒体可能不触发地图展示
https://schema.org/Restaurant,而不是把菜单项、评论、营业时间全塞进 https://schema.org/WebPage。Google 不关心你写了多少 itemprop,只认那个最外层的 itemtype 是否准确描述了用户打开页面时最想了解的对象。



















