itemtype 必须是完整 HTTPS URL,即以 https://www.php.cn/link/b8eadb229854b2add23d0371cc31b937 开头的绝对地址,如 https://www.php.cn/link/b8eadb229854b2add23d0371cc31b937Person;不能省略协议、使用 HTTP、相对路径、拼写错误或大小写错误,且该 URL 需可访问并精确匹配 schema.org 官方定义的顶级 Type。

itemtype 必须是完整 HTTPS URL,不能缩写或省略协议
直接结论:itemtype 值不是字符串标签,而是指向 schema.org 词汇表的可验证地址。写成 "Person"、"https://www.php.cn/link/b8eadb229854b2add23d0371cc31b937Person"(少一个 s)、"./Person" 或 "http://schema.org/Person" 全部无效。
主流解析器(Google Rich Results Test、Bing Markup Validator)只接受以 https:// 开头、路径精确匹配 schema.org 官方定义的绝对 URL。哪怕页面本身是 HTTP,itemtype 也必须用 HTTPS。
-
https://www.php.cn/link/b8eadb229854b2add23d0371cc31b937Person✅ 正确(注意是https,不是http) -
https://www.php.cn/link/b8eadb229854b2add23d0371cc31b937Product✅ 正确 -
https://www.php.cn/link/b8eadb229854b2add23d0371cc31b937LocalBusiness✅ 正确 -
https://www.php.cn/link/b8eadb229854b2add23d0371cc31b937Article✅ 正确 -
https://www.php.cn/link/b8eadb229854b2add23d0371cc31b937Event✅ 正确
这些是常用顶级分类,也是 schema.org 官方定义的“Type”,不是你自创的类名,也不能大小写混用(person 或 PRODUCT 都会被忽略)。
为什么不能用相对路径或本地别名
itemtype 的作用不是“告诉浏览器怎么渲染”,而是“告诉爬虫这个区块描述的是哪一类事物”。它依赖外部词汇表的语义一致性——解析器会尝试 HTTP GET 这个 URL,只要返回 200(哪怕只是 HTML 页面),就认为该类型有效;如果连通失败、重定向到 404、或协议不匹配,整个 itemscope 块会被跳过。
立即学习“前端免费学习笔记(深入)”;
常见翻车点:
- 开发环境本地起服务,写了
itemtype="http://localhost:3000/vocab/Person"→ 解析器无法访问,直接丢弃 - 复制别人代码时漏掉末尾斜杠,比如
https://www.php.cn/link/b8eadb229854b2add23d0371cc31b937Person/(多了一个 /)→ 返回 404,结构化数据失效 - 从旧文档抄了
http://schema.org/Person→ 现代工具强制拒绝 HTTP 协议
如何快速查准顶级分类,避开嵌套陷阱
别靠记忆或拼写猜测。打开 https://www.php.cn/link/b8eadb229854b2add23d0371cc31b937,在搜索框输入关键词(如 “restaurant”、“book”、“course”),看返回结果里带 “Type” 标签的那一行——那就是合法顶级分类。
注意区分:
-
https://www.php.cn/link/b8eadb229854b2add23d0371cc31b937Restaurant是顶级 Type,可直接用作itemtype -
https://www.php.cn/link/b8eadb229854b2add23d0371cc31b937price是属性(Property),只能出现在itemprop里,绝不能当itemtype -
https://www.php.cn/link/b8eadb229854b2add23d0371cc31b937PostalAddress是嵌套子类型,通常作为address属性的值出现,一般不单独作顶级itemtype(除非你真在描述一个独立地址对象)
如果你不确定某个词是不是顶级分类,粘贴进 Google Rich Results Test 里测一下:报错 “Unrecognized type” 就说明 URL 写错了,或者该词根本不是 Type。
多个顶级分类能同时写吗
不能。一个 itemscope 元素只允许一个 itemtype,但你可以用空格分隔多个等效类型(schema.org 支持多类型声明),例如:
<div itemscope itemtype="https://www.php.cn/link/b8eadb229854b2add23d0371cc31b937LocalBusiness https://www.php.cn/link/b8eadb229854b2add23d0371cc31b937Restaurant">
这种写法表示“它既是 LocalBusiness,又是 Restaurant”,两个 URL 都必须存在且有效。但别滥用——多数场景只需一个最精准的顶级分类。比如餐厅页面,优先用 https://www.php.cn/link/b8eadb229854b2add23d0371cc31b937Restaurant,而不是宽泛的 https://www.php.cn/link/b8eadb229854b2add23d0371cc31b937LocalBusiness。
真正容易被忽略的是:URL 必须可访问、大小写敏感、无多余字符,而且它和 itemprop 的配合不是“语法对就行”,而是“语义必须闭环”——比如用了 itemtype="https://www.php.cn/link/b8eadb229854b2add23d0371cc31b937Offer",里面却写了 itemprop="author",Google 会直接报错。



















