Hướng dẫn về schema Recipe

Cách triển khai đánh dấu schema.org/Recipe cho kết quả nhiều định dạng của Google, gồm các thuộc tính bắt buộc và khuyến nghị, ItemList cho băng chuyền, quy tắc có điều kiện về dinh dưỡng, thời gian, xếp hạng, video và yêu cầu chỉ dùng cho món ăn thực tế.

Xuất bản lần đầu: 1 thg 7, 2026 · Cập nhật lần cuối: 22 thg 8, 2026 · Advanced
Ngôn ngữ

Schema Recipe (schema.org/Recipe) cho công cụ tìm kiếm biết tên món ăn, hình ảnh, thời gian nấu, điểm đánh giá, nguyên liệu và thông tin dinh dưỡng để trang có thể đủ điều kiện nhận kết quả công thức nhiều định dạng. Chỉ image và name là bắt buộc, nhưng thẻ đầy đủ còn dựa vào các thuộc tính được khuyến nghị như aggregateRating, author, cookTime, prepTime, totalTime, recipeYield, recipeIngredient, recipeInstructions, recipeCategory, recipeCuisine, keywords, datePublished, nutrition.calories và video. Băng chuyền nhiều công thức cần một trang ItemList ở cấp máy chủ; đánh dấu từng công thức riêng lẻ chỉ có thể tạo một thẻ đơn. Đánh dấu Recipe chỉ hợp lệ cho món ăn thực tế, không phải nội dung kiểu “facial scrub” hay “party ideas”. Mã hợp lệ chỉ giúp trang đủ điều kiện; Google vẫn quyết định có hiển thị kết quả hay không.

TL;DR — schema.org/Recipe markup (thường JSON-LD) làm một recipe trang eligible cho Google recipe rich kết quả — một visual card (photo, star rating, cook time, calories) đó có thể xuất hiện as một carousel/grid on đó SERP và với recipe badges trong Google Images. Chỉ imagename là strictly bắt buộc; đó card là thực sự được xây dựng từ đó được khuyến nghị set (aggregateRating, author, cookTime, prepTime, totalTime, recipeYield, recipeIngredient, recipeInstructions, recipeCategory, recipeCuisine, keywords, datePublished, nutrition.calories, video). Hai implementation facts hầu hết round-ups skip: đó multi-recipe carousel là một host-cấp độ feature đó requires an ItemList trang — either một summary trang linking để tách biệt recipe các trang, hoặc an all-trong-một trang linking để anchors on itself — theo-recipe markup alone earns một single card, không bao giờ một carousel — và Recipe markup là chỉ hợp lệ cho thực tế dishes (“facial scrub” (bản dịch) «facial scrub» và “party ideas” là Google own counterexamples). Times dùng ISO 8601 durations (PT20M), và đó hầu hết phổ biến reason một hợp lệ recipe không cho thấy là một nội dung-policy mismatch giữa markup và visible trang. Along với VideoObject, này là một of đó hai structured-dữ liệu types trong đó CreativeWork cluster đó produces một genuine, visible rich kết quả — không một được ghi lại xếp hạng, CTR, hoặc traffic factor, chỉ một real visual upgrade khi shown.

Evidence for this claim Schema.org Recipe describes a recipe and its ingredients, instructions, timing, nutrition, and related metadata. Scope: Schema.org Recipe vocabulary. Confidence: high · Verified: Schema.org: Recipe Evidence for this claim Google's Recipe feature requires name and image and documents additional recommended properties; complete valid markup earns eligibility, not guaranteed display or ranking. Scope: Current Google Recipe structured-data requirements. Confidence: high · Verified: Google Search Central: Recipe structured data

Điều gì recipe rich kết quả looks như — và Cách nó được xây dựng

Google renders Recipe markup as visual card: image thumbnail, name, aggregateRating stars và count, và cook time (từ totalTime hoặc cookTime). On nhiều recipe các truy vấn những điều đó cards là grouped vào carousel hoặc grid tại top của kết quả, và marked-lên recipes cũng earn recipe badges trong Google Images, mà là có ý nghĩa phát hiện surface cho food nội dung.

Google cách diễn đạt of đó toàn bộ point: “Help users find your recipe content by telling Google about your recipe with structured data.” (bản dịch) «Help người dùng tìm của bạn recipe nội dung by telling Google về của bạn recipe với dữ liệu có cấu trúc.» đó là đó mental model — bạn là không asking cho một xếp hạng boost, bạn là đang làm đó nội dung machine-readable đủ để qualify cho một cụ thể, visible feature.

Bắt buộc so với. được khuyến nghị — và Vì sao “bắt buộc” undersells nó

Đây là thuộc tính bảng đó matters. Google chỉ marks hai properties as bắt buộc, mà là genuinely misleading nếu bạn dừng reading ở đó — recipe với chỉ nameimage validates nhưng produces thin, unattractive kết quả.

Bắt buộc

Thuộc tínhNotes
namedish name. phải là thực dish (nội dung policy dưới).
imagePhoto của finished dish. phải là crawlable, indexable, trong supported format, và representative của dish. Google khuyến nghị multiple images tại 16x9, 4x3, và 1x1 ratios, mỗi ít nhất 50 000 pixels — có không tách biệt 1 200px-wide requirement some các hướng dẫn cite.

Được khuyến nghị (Đây là Điều gì Google dùng để xây dựng fuller card, Khi nó decides để hiển thị một — populating them không force display)

Thuộc tínhĐiều gì điều này drives
aggregateRatingĐó star rating + count on đó card. Follows Google review-snippet guidelines; nếu bạn cho thấy một single review thay vì an aggregate, đó reviewer phải được một named person hoặc organization.
authorAttribution.
datePublishedFreshness tín hiệu; ISO 8601 date.
descriptionSummary text.
keywordsFree-text tags (e.g., “winter, comfort food” (bản dịch) «winter, comfort food»). Không đó giống nhau as recipeCategory.
nutrition.caloriesFeeds đó calorie hình Google có thể cho thấy. Conditional: nếu bạn set nutrition.calories, recipeYield phải cũng là được định nghĩa.
prepTimePrep duration, ISO 8601 (PT15M). Google hướng dẫn: luôn pair điều này với cookTime.
cookTimeCook duration, ISO 8601 (PT1H). Pair điều này với prepTime.
totalTimeTotal duration. Dùng totalTime, hoặc đó prepTime + cookTime combination — Google accepts either.
recipeCategoryMeal loại — “appetizer”, “dessert”, “main course”.
recipeCuisineRegional cuisine — “Mediterranean” (bản dịch) «Mediterranean», “Thai”.
recipeIngredientMột entry theo ingredient, including quantity (“2 cups flour” (bản dịch) «2 cups flour»).
recipeInstructionsĐó steps — ideally HowToStep objects, tùy chọn grouped vào HowToSection.
recipeYieldServings hoặc amount produced. Bắt buộc nếu bạn supply bất kỳ theo-serving nutrition info.
videoMỘT VideoObject cho an embedded cooking video — follow VideoObject own bắt buộc/được khuyến nghị các trường (see dưới).

totalTimeprepTime/cookTime pair là cả hai acceptable để Google; supply totalTime trực tiếp Khi Bạn có thể, since nó single duration phần lớn có khả năng để render on card.

Times sử dụng ISO 8601 durations, không free text

recurring validation thất bại: cookTime: "20 minutes" là không hợp lệ. Durations sử dụng ISO 8601 format — PT (period của time) plus giá trị — so 20 minutes là PT20M, hour và half là PT1H30M. Dates như datePublished sử dụng ISO 8601 dates (2026-07-01). Getting những điều này formats sai là một của phần lớn phổ biến reasons recipe fails Rich Kết quả Kiểm thử.

Này là đó chi tiết triển khai generic “types of schema” (bản dịch) «types of schema» listicles gần như luôn skip. Có hai khác nhau điều ở đây:

  • ** single recipe card** — earned by Recipe markup on riêng lẻ recipe trang.
  • ** recipe carousel/grid** — host carousel, mà là tách biệt feature.

để là eligible cho multi-recipe carousel, bạn thêm ItemList trang — và Google host-carousel tài liệu hỗ trợ hai khác trang models, không chỉ một:

  • Summary trang — một trang (một category hoặc roundup trang — “15 Weeknight Pastas” (bản dịch) «15 Weeknight Pastas») với một ngắn mô tả of mỗi item, nơi mỗi ListItem points, trong order, để đó URL of một tách biệt recipe detail trang đó itself có đầy đủ Recipe markup. Này là đó pattern hầu hết các hướng dẫn mô tả.
  • All-trong-một trang — một single trang đó contains đó đầy đủ markup cho mỗi item itself và không link out để tách biệt detail các trang; mỗi ListItem carries an item object (với name và một url đó là an anchor on đó giống nhau trang) rather hơn một link để elsewhere.

Either model supplies sequence Google cần cho carousel; mà một fits phụ thuộc vào liệu của bạn recipes đã trực tiếp on của họ own các URL (summary trang) hoặc bạn’re presenting them all on một dài trang (all-trong-một trang).

Đó practical consequence: bạn không thể nhận một carousel từ một ordinary recipe trang. MỘT single recipe trang với excellent markup earns một single card. Nếu bạn muốn đó carousel, bạn cần một of đó hai ItemList trang models trên, layered on top of (hoặc containing) đầy đủ Recipe markup. Bị thiếu này là đó number-một reason mọi người chẳng hạn “my markup is perfect but I’m not getting a carousel.” (bản dịch) «my markup là perfect nhưng I’m không getting một carousel.»

nutrition panel

nutrition là một NutritionInformation object, và nutrition.calories là đó trường Google calls out by name — điều này feeds đó calorie hình Google có thể cho thấy trong đó rich kết quả. đó là một dữ liệu requirement, không một promise of một distinct expandable nutrition panel mỗi khi; Google tài liệu mô tả đó trường, không một guaranteed UI element. có cũng một condition attached: nếu bạn set nutrition.calories, recipeYield phải được định nghĩa cũng, since calories là stated theo serving và Google cần đó serving count để làm hợp lý of đó number. Bạn có thể thêm fatContent, proteinContent, carbohydrateContent, sodiumContent, và đó rest, nhưng calories (paired với recipeYield) là đó combination đó hầu hết reliably surfaces. Các giá trị là strings với units (“240 calories” (bản dịch) «240 calories», “9 g”). đây là một nhỏ block đó adds một visible, differentiating detail để của bạn card, so đây là worth populating cho bất kỳ recipe nơi bạn có thể compute điều này honestly.

Evidence for this claim If nutrition.calories is supplied, Google requires recipeYield to identify the number of servings. Current documentation describes a data condition; it does not promise a distinct expandable nutrition panel in every result. Scope: web Confidence: high · Verified: Recipe structured data

Video: nơi Recipe đáp ứng VideoObject

nhiều recipe các trang embed cooking video, và video thuộc tính là nơi Recipe và VideoObject — hai CreativeWork types đó produce genuine, visible rich kết quả — intersect. Google hướng dẫn là rõ ràng: video takes đầy đủ VideoObject và phải follow đó feature own bắt buộc và được khuyến nghị properties (name, description, thumbnailUrl, uploadDate, và contentUrl hoặc embedUrl) — supplying bare video URL không phải giống nhau as được ghi lại subprofile. Đã xong right, recipe có thể qualify cho video treatment recipe card, và video becomes eligible cho của nó own surfaces. theo-trường requirements cho video trực tiếp với VideoObject topic — giống nhau object nests bên trong recipe, so nó worth getting đó markup right thay vì stubbing trong bare video: {}.

nội dung policy: chỉ thực dishes, matching visible trang

Đây là lý do phổ biến nhất khiến mã đánh dấu hợp lệ nhưng không được hiển thị. Recipe chỉ dành cho món ăn thực tế. Google nêu rõ: “Use Recipe structured data for content about preparing a particular dish. For example, ‘facial scrub’ or ‘party ideas’ are not valid names for a dish.” (bản dịch) «Hãy dùng dữ liệu có cấu trúc Recipe cho nội dung hướng dẫn chuẩn bị một món ăn cụ thể. Chẳng hạn, “tẩy tế bào chết cho mặt” hoặc “ý tưởng cho bữa tiệc” không phải tên món ăn hợp lệ.» Một “công thức” chất tẩy rửa tự làm, bài viết dạng “công thức thành công” hoặc danh sách ý tưởng tiệc được khoác mã Recipe đều vi phạm chính sách nội dung. Mã đó có thể vượt qua trình kiểm tra cú pháp nhưng vẫn không bao giờ nhận được thẻ, thậm chí có thể bị xử lý thủ công.

thứ hai half của giống nhau principle: ** markup phải reflect visible trang.** nếu của bạn JSON-LD lists ingredients, times, và rating đó không phải thực ra on trang người dùng sees, đó mismatch Google xử lý as spam tín hiệu. Mark lên Điều gì genuinely ở đó.

Vì sao của bạn hợp lệ recipe vẫn hiển thị không rich kết quả

Eligibility không phải display. thông thường chain: trang có để là được lập chỉ mục, markup có để là hợp lệ, nội dung có để là thực dish shown on trang, và Google các hệ thống vẫn có để quyết định nó worth cho thấy — giống nhau eligibility-không-bảo đảm rule đó governs mỗi structured-dữ liệu loại. nếu bạn’ve cleared hợp lệ markup và nội dung policy và vẫn see không card, phổ biến culprits là: times trong free text thay vì ISO 8601, aggregateRating với không count, image đó không đáp ứng size/aspect hướng dẫn, hoặc expecting carousel không có ItemList trang.

cho nơi Recipe sits trong wider structured-dữ liệu picture, see rộng hơn Schema MarkupDữ liệu có cấu trúc hubs điều này bài viết nests dưới.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.