Microdata 是结构化数据的轻量表达方式,不改变渲染而为HTML元素添加机器可读属性;必须用itemscope开启作用域,itemprop依附其内,itemtype应指向schema.org标准URL,嵌套类型需逐层声明,适合遗留系统渐进增强。

Microdata 不是 HTML5 的“新功能”,而是结构化数据的轻量表达方式
HTML 本身从来不是“无结构化标记”——<h1>、<article>、<nav> 都在表达语义。但搜索引擎和爬虫无法仅靠这些推断“这是一篇食谱,作者叫张三,用时45分钟”。Microdata 解决的正是这个缺口:它不改变渲染,只在已有标签上叠加机器可读的属性。
itemprop 必须依附于有 itemscope 的元素,否则无效
常见错误是直接写 <p itemprop="name">苹果派</p>,但没声明父容器是某个类型(如 Recipe)。这会导致所有 itemprop 被忽略。
-
itemscope是开关,必须出现在包裹性元素(如<div>或<article>)上 -
itemtype应指向标准词汇表,推荐用https://schema.org/Recipe这类 URL,而非自定义字符串 -
itemid可选,但若提供,必须是全局唯一 URI(比如https://example.com/recipe/apple-pie),不能是相对路径或 ID
<article itemscope itemtype="https://schema.org/Recipe"> <h2 itemprop="name">苹果派</h2> <p>作者:<span itemprop="author">张三</span></p> <meta itemprop="totalTime" content="PT45M"> </article>
与 JSON-LD 相比,Microdata 更易出错但更贴近 DOM 流程
JSON-LD 是当前 Google 推荐的主流方案,因为它是独立 script 块,不干扰 HTML 结构。而 Microdata 的优势在于:修改某段内容时,结构化数据能随 DOM 同步更新(比如用 JS 动态插入 itemprop 元素),适合 CMS 输出或服务端模板直出。
-
浏览器原生支持
document.getItems()(但兼容性差,Chrome 仅曾短暂支持后移除) - SEO 效果与 JSON-LD 一致,只要语法合法,Google Structured Data Testing Tool 都能识别
- 嵌套复杂时极易漏掉
itemscope—— 比如author是Person类型,就必须再套一层<span itemscope itemtype="https://schema.org/Person"><span itemprop="name">张三</span></span>
Microdata 的真实价值在遗留系统和渐进增强场景
如果你正在维护一个老 PHP 模板站,没法改整体架构,又需要快速上线结构化数据,Microdata 就比 JSON-LD 更容易 patch:只需在现有 <h1> 上加 itemprop,在包裹 <div> 上加 itemscope 即可。但要注意:
立即学习“前端免费学习笔记(深入)”;
- 不要混用 Microdata 和 RDFa(尤其
property和itemprop冲突) -
content属性仅对空元素或元数据有效(如<meta itemprop="datePublished" content="2024-03-15">),不可用于可见文本节点 - 值为空白字符(空格、换行)的
itemprop元素会被解析为 null,不是空字符串
真正难的不是写对语法,而是持续维护 schema.org 类型层级关系——比如 AggregateRating 必须嵌套在 itemReviewed 下,这种约束在 HTML 层面没有任何报错提示。











