结构化数据 · 类型图鉴 第 7 篇

食谱 Recipe:食材、步骤、烹饪时间与菜谱卡片

约 14 分钟阅读 更新于 2026-06-24 MagicSEO 编辑部 · 人工审核 类型图鉴

菜谱是富媒体结果展示最充分的类型之一:评分星级、烹饪时间、配图、营养信息都可能出现在搜索结果里,多个菜谱还能组成可滑动的轮播。要拿到这些展示,关键是把食材、步骤、时间这些信息从纯文字变成结构化数据,并保证它们和页面可见内容完全一致。

Recipe 是什么#

Recipe 描述一份可烹饪的菜谱。Google 用它在搜索结果中生成菜谱富媒体卡片,可能包含菜名、配图、评分、烹饪时长、卡路里等。多份菜谱还能在「菜谱轮播」(host carousel)中横向排列。

官方文档入口:Google Search Central:Recipe structured data

字段越全,卡片越丰富必填只有 name 和 image,但富媒体效果几乎完全取决于你补了多少推荐字段:时间、份量、评分、营养、视频。

必填与推荐字段#

字段必填说明
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 示例#

recipe.json
{
  "@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 分钟PT30M30 分钟 / 30
1 小时 30 分PT1H30M1.5 小时
2 小时PT2H2h

同时给出 prepTimecookTime 时,建议也提供 totalTime,三者逻辑要自洽。

步骤用 HowToStep#

recipeInstructions 写成 HowToStep 数组,比一整段文字更容易被解析,也能在步骤展示中表现更好。需要分组时可以用 HowToSection 包裹若干步骤(例如「准备」「烹饪」「摆盘」)。每步可附 nameurl(锚点)、image

要让多份菜谱组成可横向滑动的轮播,需要在列表页用 ItemList,每一项 url 指向各自独立的菜谱详情页,真正的 Recipe 标记放在详情页。

recipe-carousel.json
{
  "@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"
    }
  ]
}
轮播只串自己的菜谱ItemList 里的 url 应全部指向你自己网站的菜谱详情页,不要聚合别人网站的菜谱。

评分要真实可见#

给菜谱加 aggregateRating 很有助于点击率,但评分必须来自页面上真实可见的用户评价,数据要真实。没有评价系统、没有真实数据时,不要凭空写星级——这点和评价摘要 Review的合规要求一致。

本站为什么不实装 Recipe#

MagicSEO 讲的是 SEO,不是菜谱站,本页没有真实菜谱、食材和烹饪步骤。因此不会为了示范而硬塞 Recipe 标记。

本站示范本页继续使用 Article、BreadcrumbList、FAQPage。结构化数据应当如实描述页面真实内容,而不是为了展示某种卡片去伪装页面类型。

验证和监控#

  1. Rich Results Test 检查必填与推荐字段。
  2. 核对食材、步骤、时间、评分与页面可见内容一致。
  3. 确认所有时间为 ISO 8601 时长格式。
  4. 做轮播时检查 ItemList 的每个 url 都能打开对应菜谱详情页。
  5. 上线后在 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 时,页面要展示对应的平均分和评价数量,且数据真实。没有真实评价时不要凭空写星级,否则属于结构化数据违规。