itemtype必须与itemscope成对使用,声明结构化数据类型;Event类型需用https://schema.org/Event,时间须ISO 8601格式并用time元素,地点需嵌套Place及PostalAddress类型,name和startDate为必填字段。

itemtype 属性必须搭配 itemscope 使用才有效
单独写 itemtype 没有意义,浏览器和搜索引擎不会识别。它必须和 itemscope 成对出现,用来声明当前元素是一个结构化数据实体,且类型由 itemtype 指定。
活动详情最常用的是 Schema.org 的 Event 类型,对应 URL 是 https://schema.org/Event。注意:必须用完整 HTTPS 地址,不能省略协议或写成相对路径。
-
itemscope放在包裹整个活动信息的最外层容器上(比如<div>或<section>) -
itemtype紧跟其后,值为https://schema.org/Event - 内部属性(如名称、时间、地点)要用
itemprop标记,不能只靠 class 或 id
活动时间必须用 ISO 8601 格式,且推荐用 time 元素
搜索引擎对 startDate 和 endDate 的解析非常敏感。如果写成 “2024年10月25日” 或 “Oct 25, 2024”,大概率被忽略或误判。
正确做法是用 <time> 标签包裹,并通过 datetime 属性提供机器可读的时间字符串:
立即学习“前端免费学习笔记(深入)”;
<time itemprop="startDate" datetime="2024-10-25T14:00">10月25日 14:00</time>
-
datetime值必须符合 ISO 8601(支持YYYY-MM-DD、YYYY-MM-DDTHH:MM、带时区的完整格式) - 显示文本可以本地化(如“下午2点”),但
datetime不能含中文、空格或描述性文字 - 如果只有日期没有具体时间,写成
2024-10-25即可,不要补T00:00—— 否则可能被当成全天活动误判
地点信息要嵌套 Place 类型,不能只写文字
只写 <span itemprop="location">北京市朝阳区xxx大厦</span> 是不够的。搜索引擎期望 location 是一个结构化对象,不是纯字符串。
需要在 location 内部再启一个 itemscope + itemtype="https://schema.org/Place":
<div itemprop="location" itemscope itemtype="https://schema.org/Place">
<span itemprop="name">xxx大厦</span>
<span itemprop="address" itemscope itemtype="https://schema.org/PostalAddress">
<span itemprop="addressLocality">朝阳区</span>
<span itemprop="streetAddress">建国路88号</span>
</span>
</div>
-
address推荐进一步细化为PostalAddress类型,否则地址字段可能不被提取 -
name是场所名(如“中关村创业大街”),不是“地点”二字;addressLocality是区/县,不是城市全称 - 避免把电话、票价等无关字段塞进
Place里 —— 它们属于Event顶层属性
常见校验失败原因:缺失必填字段或嵌套错位
Google Rich Results Test 或 Schema Markup Validator 报错,最常见的不是语法错误,而是语义缺失:
-
name(活动标题)和startDate是Event的强制属性,缺一不可 -
itemprop必须直接出现在带itemscope的父元素内部,不能隔一层 div(即不能“跨级继承”) - 多个同名属性(如两个
itemprop="name")会被合并或覆盖,应确保唯一性 - 使用了
itemtype但没声明对应属性(比如写了itemtype="https://schema.org/Event"却漏掉itemprop="name"),校验器会警告“missing field”
嵌套层级容易出错的地方在于:每个 itemscope 只能有一个 itemtype,且子类型必须是父类型允许的属性值类型 —— 比如 location 允许 Place,但不允许直接套 Organization。



















