语义标注必须同时使用itemscope、itemtype和itemprop三者配合,缺一不可;itemscope需置于块级容器(如)上,itemtype须为完整https url且大小写敏感,itemprop须在作用域内声明字段并遵循值类型规范。

直接加 itemscope 和 itemtype 不等于完成语义标注——它们只是划定作用域和声明类型契约,没配 itemprop 就像签了合同但没填条款,搜索引擎完全无视。
itemscope 必须套在最外层容器上,不能只加在文本元素里
常见错误是把 itemscope 和 itemtype 直接写在 <p></p> 或 <h1></h1> 上,比如:
<h1 itemscope itemtype="https://schema.org/Product">无线耳机</h1>
这会导致整个实体作用域被压缩成单个标题,后续所有 itemprop 都找不到合法父级。正确做法是用 <div>、<code><section></section> 或已有语义标签(如 <article></article>)包裹整块内容:
<article itemscope itemtype="https://schema.org/Product"><h1 itemprop="name">无线耳机</h1> <p itemprop="description">主动降噪,续航30小时</p> </article>
-
itemscope只能出现在块级容器上,浏览器不校验但结构化数据提取器会跳过非法位置 - 优先复用
<article></article>、<section></section>等语义标签作容器,避免无意义的<div> 堆砌 <li>嵌套多个实体时,每个 <code>itemscope必须独立闭合,不能靠 CSS 或 JS 动态拼接 - 错:
itemtype="https://schema.org/product"(小写 product)→ 被丢弃 - 错:
itemtype="https://schema.org/Product/"(末尾多斜杠)→ 不识别 - 错:
itemtype="http://schema.org/Product"(HTTP 协议)→ 直接忽略 - 对:
itemtype="https://schema.org/Product" -
itemprop必须出现在有itemscope的祖先元素内部,且不能跨层级“悬空” - 属性值只能是纯文本或 URL 字符串;含 HTML 标签(如
<sup></sup>)、不间断空格()会导致字段解析失败 - 隐藏字段(如 SKU、库存状态)必须用
<meta itemprop="sku" content="AB123">,且content属性不可省略 -
<img itemprop="image" src="...">无效——itemprop="image"要求值为 URL,得改用<link itemprop="image" href="...">或<meta itemprop="image" content="...">
itemtype 必须是完整 HTTPS URL,大小写和斜杠都不能错
2026 年主流搜索引擎(Google、Bing)已彻底弃用 http:// 协议和旧 vocab(如 http://data-vocabulary.org/Person),且对拼写零容忍:
Schema.org 官方文档明确要求使用完整大写首字母类名,且必须从 https://schema.org/ 开始。查类型时直接访问 https://schema.org/Product 页面,复制地址栏 URL 最保险。
itemscope + itemtype 本身不携带任何字段,必须配合 itemprop 才生效
只写 <div itemscope itemtype="https://schema.org/LocalBusiness"></div> 是合法 HTML,但结构化数据测试工具会报告“0 个属性”,因为没声明任何字段归属。关键点:
嵌套对象必须让 itemprop 和 itemscope 在同一元素上
当属性本身是另一个实体(如作者是 Person),不能把 itemprop 和 itemscope 拆到不同层级:
❌ 错误: <div itemprop="author"> <div itemscope itemtype="https://schema.org/Person">张三</div> </div> ✅ 正确: <div itemprop="author" itemscope itemtype="https://schema.org/Person">张三</div>
否则 itemprop="author" 没绑定任何作用域,整个嵌套块被丢弃。LocalBusiness 的 address 同理——必须用 <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress">,缺 <code>postalCode 或 addressCountry 会导致地图信息无法展示。
真正容易被忽略的是:微数据不是“加完就生效”,它依赖浏览器 DOM 解析顺序和搜索引擎抓取时的静态 HTML 快照。动态注入的 itemscope(比如 JS 拼字符串后 innerHTML 插入)大概率不被识别——必须服务端渲染或静态生成时写死在 HTML 源码里。











