应使用 https://schema.org/restaurant 作为 itemtype,必须为 https 协议且不可省略末尾斜杠;name 和 address(需嵌套 postaladdress)为必需字段;telephone 需带国家代码,pricerange 限 $ 至 $$$$,openinghours 用 mo-su 格式。

itemtype 应该用哪个 Schema.org 类型
描述餐厅必须用 https://schema.org/Restaurant,不能用 LocalBusiness 或 FoodEstablishment 作为顶层类型——后者是抽象父类,搜索引擎不支持直接实例化。Google Structured Data Testing Tool 会报 Missing field "name" 或 Invalid type 错误,就是因为用了非具体类型。
实际写法必须是:
<div itemscope itemtype="https://schema.org/Restaurant"> <p>注意:协议必须是 <code>https</code>,用 <code>http</code> 会被现代爬虫忽略;末尾斜杠不能省略,<code>https://schema.org/Restaurant/</code> 是无效 URL。</p> <h3>必需字段和常见漏项</h3> <p><code>name</code> 和 <code>address</code> 是 Google 索引餐厅的硬性要求,缺一不可。只加 <code>itemprop="name"</code> 但没给文本内容,等同于没填;地址必须包裹在 <code>PostalAddress</code> 嵌套结构里,不能直接写字符串。</p> <p>典型错误写法:</p> <pre class="brush:php;toolbar:false;"><span itemprop="address">北京市朝阳区建国路8号</span> <!-- ❌ 不被识别 -->
正确嵌套方式:
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
<div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"> <span itemprop="streetAddress">建国路8号</span> <span itemprop="addressLocality">朝阳区</span> <span itemprop="addressRegion">北京市</span> </div>
-
telephone要带国家代码(如+86),纯手机号(13800138000)可能被忽略 -
priceRange必须是$、$$、$$$或$$$$,不能写 “人均150” 或数字 -
openingHours格式严格:用Mo-Su 11:00-22:00,不能写中文“周一至周日”
如何嵌套菜单和菜品信息
菜单不是简单挂个链接就行。menu 属性值必须是 URL 类型,指向一个真实可访问的菜单页(如 /menu.html),不能是 PDF 或空锚点。如果想内联描述菜品,得用 hasMenu + Menu 类型再嵌一层。
例如内联单道菜:
<div itemprop="hasMenu" itemscope itemtype="https://schema.org/Menu">
<div itemprop="hasMenuItem" itemscope itemtype="https://schema.org/FoodEvent">
<span itemprop="name">宫保鸡丁</span>
<span itemprop="description">花生、鸡肉、干辣椒炒制</span>
</div>
</div>
注意:FoodEvent 在这里只是占位语义,实际更常用 MenuItem(需配合 Menu 父级),但 MenuItem 的 offers 子属性容易引发嵌套过深问题,中小站点建议优先用外链 menu 属性。
验证失败时先查这三处
即使结构看起来正确,也常因细节被 Google 拒绝。最常卡住的位置:
- 页面 HTTP 状态码不是
200(比如测试页设了404或重定向) -
itemprop值出现在script标签或注释里——Microdata 只解析可见 HTML 节点 - 同一页面多个
Restaurant实体共存时,没用itemid区分,导致属性被合并错乱
用 Rich Results Test 工具抓取后显示 “No rich results detected”,大概率是这三项之一。别急着重写整个结构,先检查网络响应和 DOM 可见性。










