正确答案是:必须使用 itemtype="https://www.php.cn/link/e9c1be744cb5b160145ad4e48b128149"(microdata)或 vocab+typeof(rdfa),typeof 不是 html 属性;itemtype 必须为 https 完整 url,vocab 仅在 rdfa 中有效且需返回 200。

typeof 不是 HTML 标准属性,它根本不存在于 HTML 规范中,也不会被浏览器解析、验证或用于结构化数据。
你真正想用的,是 itemtype(配合 itemscope 和 itemprop),而 vocab 是另一个独立但常被混淆的属性——它用于为整个页面或某个作用域批量声明词汇表前缀,不直接定义实体类型。
itemtype 必须是完整 HTTPS URL,不是字符串或缩写
itemtype 的作用非常窄:它告诉解析器“这个 itemscope 块描述的是哪一类事物”,比如 Person、Organization、Article。但它必须指向一个外部可验证的词汇表地址,例如:
- ✅ 正确:
itemtype="@#@#@#@#@#@#@#@#@#@0" - ✅ 正确:
itemtype="@#@#@#@#@#@#@#@#@#@1" - ❌ 错误:
itemtype="Person"(纯字符串,无协议、无域名) - ❌ 错误:
itemtype="@#@#@#@#@#@#@#@#@#@2"(HTTP 协议已被 Google、Bing 等拒绝) - ❌ 错误:
itemtype="/vocab/person"(相对路径,无法验证)
Google Rich Results Test、Schema Markup Validator 会直接忽略整个 itemscope 区块,如果 itemtype 不符合要求。
vocab 是前缀声明工具,不能替代 itemtype
vocab 通常和 typeof 混淆,是因为 RDFa 规范里确实有 typeof ——但它属于 RDFa(Resource Description Framework in Attributes),不是 HTML5 原生微数据(Microdata)体系。
- 如果你用 Microdata(即
itemscope/itemtype/itemprop),vocab完全无效,浏览器和结构化数据工具不会读它。 - 如果你用 RDFa(如
property+typeof+vocab),那才需要配对:<div vocab="https://schema.org/" typeof="Person"> <span property="name">张三</span> </div>
这里vocab提供前缀,typeof才是类型声明(等价于 Microdata 中的itemtype)。
但注意:RDFa 的 typeof 值是局部词(如 Person),靠 vocab 拼出完整 URI(@#@#@#@#@#@#@#@#@#@0);而 Microdata 的 itemtype 必须自己写全。
同一页面混用 Microdata 和 RDFa 容易失效
- Google 主要支持 Microdata 和 JSON-LD,对 RDFa 支持有限且不稳定;
- 若在同一个元素上同时写
itemscope itemtype和vocab typeof,解析器可能只认一种,或直接跳过; -
vocab不能写在里“全局生效”,它只对自身所在元素及其子元素起作用; -
vocab值也必须是 HTTPS URL,且需返回 HTTP 200(哪怕只是 HTML 页面)。
真正要定义实体类型,只有一条路:用 Microdata 就老老实实写 itemtype="@#@#@#@#@#@#@#@#@#@4";用 RDFa 就配 vocab + typeof,但得确认目标平台(如百度、Google)是否识别。
最常被忽略的一点:就算 URL 格式对了,如果该 URL 返回 404 或重定向到非 HTTPS 地址,结构化数据也会被判定为无效——这不是前端能绕过的校验。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











