itemtype属性用于声明itemscope元素所描述的事物类型,必须是可验证的https url,如https://www.php.cn/link/2ad908ea29b45df4bf8b2a3136690429;写错协议、路径或类型会导致结构化数据失效。

itemtype 属性不是用来“选中某个元素”或“触发交互”的,它的作用非常明确:告诉搜索引擎、爬虫或解析器,“这个带 itemscope 的元素描述的是哪一类事物”,且必须是一个可验证的、外部定义的词汇表 URL。
它本身不改变页面渲染,也不影响 JS 行为,但一旦写错或指向无效地址,结构化数据就失效——Google Rich Results Test 会直接报错或忽略整个 itemscope 块。
itemtype 必须是完整 HTTPS URL,不能是相对路径或缩写
常见错误是把 itemtype 写成类似 @#@#@#@#@#@#@#@#@#@0(少一个 s),或者用本地路径如 /vocab/person,甚至直接写 Person。
- ✅ 正确:
itemtype="@#@#@#@#@#@#@#@#@#@1" - ❌ 错误:
itemtype="@#@#@#@#@#@#@#@#@#@0"(HTTP 协议已被主流解析器拒绝) - ❌ 错误:
itemtype="Person"或itemtype="./person"
WHATWG 和 Google Structured Data Testing Tool 都强制要求:必须是绝对 HTTPS URL,且该 URL 在 HTTP 层能返回 200(哪怕内容是 HTML 页面,不是 JSON-LD)。
同一个 itemscope 元素只能有一个 itemtype,但可叠加多个 itemprop
itemtype 定义的是“类型主干”,不是“属性列表”。你不能这样写:
<div itemscope itemtype="https://www.php.cn/link/2ad908ea29b45df4bf8b2a3136690429">
<p>浏览器会忽略第二个 <code>itemtype</code>,只认第一个。如果真要表达“既是人又是组织成员”,应该用嵌套:</p>
<pre class="brush:html;toolbar:false;"><div itemscope itemtype="https://www.php.cn/link/2ad908ea29b45df4bf8b2a3136690429">
<span itemprop="jobTitle">工程师</span>
<div itemprop="worksFor" itemscope itemtype="https://schema.org/Organization">
<span itemprop="name">某科技公司</span>
</div>
</div>
注意:itemprop="worksFor" 指向的是另一个 itemscope 元素,而不是字符串值——这是微数据和 JSON-LD 的关键区别之一。
itemtype 的 URL 必须对应实际词汇表定义,否则字段名(itemprop)不被识别
比如你写了 itemtype="@#@#@#@#@#@#@#@#@#@3",那里面合法的 itemprop 就包括 name、author、isbn 等;但如果你误写成 itemtype="@#@#@#@#@#@#@#@#@#@4",再用 itemprop="isbn",Google 就不会把它当图书 ISBN 解析——即使值看起来是对的。
验证方法很简单:打开 itemtype URL(如 @#@#@#@#@#@#@#@#@#@3),搜索页面里是否明确列出你要用的 itemprop 名称及其预期类型。Schema.org 页面每个类下面都有 “Properties” 列表,那是唯一权威依据。
itemtype 的本质是“类型断言”,不是“样式开关”或“JS 钩子”。它脆弱但关键:URL 少一个 s,整个区块就白标;类型选错,字段再对也进不了搜索结果。真正起作用的永远是「URL 可访问 + 类型匹配 + 属性在该类型下有效」这三者同时成立。











