食谱 Recipe:食材、步骤、烹饪时间与菜谱卡片
菜谱是富媒体结果展示最充分的类型之一:评分星级、烹饪时间、配图、营养信息都可能出现在搜索结果里,多个菜谱还能组成可滑动的轮播。要拿到这些展示,关键是把食材、步骤、时间这些信息从纯文字变成结构化数据,并保证它们和页面可见内容完全一致。
Recipe 是什么#
Recipe 描述一份可烹饪的菜谱。Google 用它在搜索结果中生成菜谱富媒体卡片,可能包含菜名、配图、评分、烹饪时长、卡路里等。多份菜谱还能在「菜谱轮播」(host carousel)中横向排列。
官方文档入口:Google Search Central:Recipe structured data。
必填与推荐字段#
| 字段 | 必填 | 说明 |
|---|---|---|
name | 必填 | 菜谱名称 |
image | 必填 | 成品图,建议多种比例(1:1、4:3、16:9) |
recipeIngredient | 推荐 | 每种食材一条,含用量 |
recipeInstructions | 推荐 | 用 HowToStep 分步,而非一大段文字 |
prepTime / cookTime / totalTime | 推荐 | ISO 8601 时长,如 PT30M |
recipeYield | 推荐 | 份量/产出,如「4 人份」 |
nutrition | 推荐 | NutritionInformation,如 calories |
aggregateRating | 推荐 | 真实用户评分,页面要可见 |
video | 推荐 | 嵌套 VideoObject,做菜视频 |
author / datePublished | 推荐 | 作者与发布日期 |
完整 JSON-LD 示例#
{
"@context": "https://schema.org",
"@type": "Recipe",
"name": "番茄炒蛋",
"image": [
"https://example.com/photos/tomato-egg-1x1.webp",
"https://example.com/photos/tomato-egg-4x3.webp",
"https://example.com/photos/tomato-egg-16x9.webp"
],
"author": { "@type": "Person", "name": "林记厨房" },
"datePublished": "2026-06-24",
"description": "家常番茄炒蛋,10 分钟出锅。",
"prepTime": "PT5M",
"cookTime": "PT5M",
"totalTime": "PT10M",
"recipeYield": "2 人份",
"recipeCategory": "主菜",
"recipeCuisine": "中餐",
"nutrition": {
"@type": "NutritionInformation",
"calories": "220 kcal"
},
"recipeIngredient": [
"番茄 2 个",
"鸡蛋 3 个",
"食盐 适量",
"白糖 1 小勺"
],
"recipeInstructions": [
{ "@type": "HowToStep", "text": "鸡蛋打散,番茄切块。" },
{ "@type": "HowToStep", "text": "热油炒蛋盛出。" },
{ "@type": "HowToStep", "text": "炒番茄出汁,加盐糖,倒回鸡蛋翻匀出锅。" }
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.8,
"ratingCount": 152
}
}
时间用 ISO 8601 时长#
所有时间字段必须用 ISO 8601 时长格式,而不是中文或纯数字。
| 含义 | 正确写法 | 错误写法 |
|---|---|---|
| 30 分钟 | PT30M | 30 分钟 / 30 |
| 1 小时 30 分 | PT1H30M | 1.5 小时 |
| 2 小时 | PT2H | 2h |
同时给出 prepTime 和 cookTime 时,建议也提供 totalTime,三者逻辑要自洽。
步骤用 HowToStep#
把 recipeInstructions 写成 HowToStep 数组,比一整段文字更容易被解析,也能在步骤展示中表现更好。需要分组时可以用 HowToSection 包裹若干步骤(例如「准备」「烹饪」「摆盘」)。每步可附 name、url(锚点)、image。
菜谱轮播 ItemList#
要让多份菜谱组成可横向滑动的轮播,需要在列表页用 ItemList,每一项 url 指向各自独立的菜谱详情页,真正的 Recipe 标记放在详情页。
{
"@context": "https://schema.org",
"@type": "ItemList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"url": "https://example.com/recipes/tomato-egg"
},
{
"@type": "ListItem",
"position": 2,
"url": "https://example.com/recipes/egg-fried-rice"
}
]
}
评分要真实可见#
给菜谱加 aggregateRating 很有助于点击率,但评分必须来自页面上真实可见的用户评价,数据要真实。没有评价系统、没有真实数据时,不要凭空写星级——这点和评价摘要 Review的合规要求一致。
本站为什么不实装 Recipe#
MagicSEO 讲的是 SEO,不是菜谱站,本页没有真实菜谱、食材和烹饪步骤。因此不会为了示范而硬塞 Recipe 标记。
验证和监控#
- 用 Rich Results Test 检查必填与推荐字段。
- 核对食材、步骤、时间、评分与页面可见内容一致。
- 确认所有时间为 ISO 8601 时长格式。
- 做轮播时检查 ItemList 的每个 url 都能打开对应菜谱详情页。
- 上线后在 Search Console 的菜谱增强报告中监控无效项。
常见错误#
| 错误 | 为什么危险 | 修正 |
|---|---|---|
| 时间写中文或纯数字 | 无法解析 | 用 PT30M、PT1H30M |
| 步骤塞成一大段 | 步骤展示差 | 拆成 HowToStep 数组 |
| 凭空写评分星级 | 结构化数据违规 | 仅标记真实可见评价 |
| 缺成品图 | image 为必填 | 提供多比例成品图 |
| 轮播聚合外站菜谱 | 违反指南 | ItemList 只指向本站菜谱 |
Recipe 上线清单#
- name 与 image(多比例)齐全
- recipeIngredient 每种食材一条含用量
- recipeInstructions 用 HowToStep 分步
- prepTime/cookTime/totalTime 用 ISO 8601 时长
- recipeYield、nutrition 视情况补充
- aggregateRating 来自真实可见评价
- video(如有)嵌套合规 VideoObject
- 轮播用 ItemList 指向本站详情页
- 页面可见内容与 JSON-LD 一致
- Rich Results Test 无关键错误
常见问题#
Recipe 结构化数据必填哪些字段?
Google 对 Recipe 的硬性要求是 name 和 image。但要获得有意义的菜谱富媒体展示,强烈建议补齐 recipeIngredient、recipeInstructions、以及 cookTime/prepTime/totalTime、recipeYield、nutrition、aggregateRating、video 等推荐字段。字段越完整,菜谱卡片越丰富。
时间字段为什么要用 ISO 8601 时长格式?
cookTime、prepTime、totalTime 必须使用 ISO 8601 时长格式,例如 PT30M 表示 30 分钟、PT1H30M 表示 1 小时 30 分钟。直接写中文“半小时”或数字 30 无法被解析。如果同时提供 prepTime 和 cookTime,建议也提供 totalTime。
菜谱轮播(host carousel)怎么做?
菜谱轮播需要在列表页用 ItemList 把多个菜谱串起来,列表里的每一项通过 url 指向各自独立的菜谱详情页,真正的 Recipe 标记放在详情页上。注意这是你自己网站内多个菜谱的轮播,不要把别人网站的菜谱聚合进来。
可以给菜谱加评分星级吗?
可以,但评分必须来自页面上真实可见的用户评价。把 aggregateRating 嵌入 Recipe 时,页面要展示对应的平均分和评价数量,且数据真实。没有真实评价时不要凭空写星级,否则属于结构化数据违规。