Panduan Recipe Schema
cara implement schema.org/Recipe markup untuk Google's recipe rich hasil — two diperlukan properties vs. recommended set itu membangun fuller card, why carousel perlu sebuah ItemList summary atau semua-di-one halaman, conditional nutrition/time/rating fields, video property, dan konten-policy aturan itu hanya nyata dishes qualify.
Bahasa
Recipe schema (schema.org/Recipe) adalah data terstruktur itu tells mesin pencari sebuah halaman's dish name, photo, cook time, ratings, ingredients, dan nutrition, so halaman dapat earn Google's recipe rich hasil — sebuah visual card dengan sebuah star rating dan cook time itu dapat appear sebagai sebuah carousel atau grid dan dengan recipe badges di Google Images. hanya two properties adalah strictly diperlukan — image dan name — tetapi fuller card adalah populated dari recommended set: aggregateRating, author, cookTime, prepTime, totalTime, recipeYield, recipeIngredient, recipeInstructions, recipeCategory, recipeCuisine, keywords, datePublished, nutrition.calories, dan video. Two things trip people up: multi-recipe carousel adalah sebuah host-tingkat fitur itu perlu sebuah ItemList halaman (either sebuah summary halaman linking untuk separate recipe halaman, atau sebuah semua-di-one halaman linking untuk anchors pada itself) — individual recipe markup alone earns di sebagian besar sebuah single card, not sebuah carousel — dan Recipe markup adalah hanya valid untuk actual dishes, dengan Google's own counterexamples menjadi itu 'facial scrub' dan 'party ideas' adalah not valid recipe names. Along dengan VideoObject, ini adalah one dari two structured-data jenis di CreativeWork family itu produces sebuah genuine, terlihat rich hasil — Google doesn't publish peringkat, CTR, atau traffic angka untuk ini, tetapi visual upgrade adalah nyata when ini menampilkan. Valid markup hanya membuat Anda eligible; Google masih decides whether untuk tampilkan hasil.
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 dataTL;DR — Recipe schema adalah code Anda tambahkan untuk sebuah recipe halaman itu labels cooking detail untuk mesin pencari — “this is the dish name,” (terjemahan) “ini adalah dish name,” “this is the photo,” (terjemahan) “ini adalah photo,” “it takes 20 minutes to cook,” (terjemahan) “ini takes 20 minutes untuk cook,” “these are the ingredients,” (terjemahan) “ini adalah ingredients,” “here are the steps,” (terjemahan) “here adalah langkah,” “readers rated it 4.7 stars.” (terjemahan) “readers rated ini 4,7 stars.” menambahkan ini correctly membuat halaman eligible untuk Google’s recipe rich hasil — visual card Anda see dengan sebuah photo, star rating, dan cook time. Unlike sebuah lot dari schema jenis, ini one memiliki sebuah nyata, terlihat payoff. ini melakukan not guarantee card menampilkan up, dan sebuah multi-recipe carousel perlu sebuah extra piece (sebuah
ItemListhalaman) pada top dari per-recipe markup.
What Recipe schema adalah
When Anda lihat sebuah recipe halaman, Anda dapat tell dish name dari cook time dari
ingredient list hanya oleh reading. sebuah mesin pencari sees plain text dan memiliki untuk
guess where recipe stops dan blog story begins. Recipe schema spells ini
out di code, menggunakan shared schema.org vocabulary —
ini tags setiap piece dari halaman dengan what ini actually adalah: name, sebuah image,
prepTime dan cookTime, recipeIngredient list,
recipeInstructions langkah, dan apa pun star aggregateRating.
ini adalah almost selalu written sebagai JSON-LD — sebuah kecil block dari code itu sits di halaman tanpa mengubah how halaman looks.
Why ini adalah worth doing
payoff adalah recipe rich hasil, dan ini adalah sebuah baik one. pada recipe searches Google menampilkan enhanced cards dengan sebuah photo, sebuah star rating, cook time, dan sometimes sebuah calorie count — dan ini groups them ke sebuah carousel atau grid di top dari halaman. Marked-up recipes juga get recipe badges di Google Images. sebuah card like itu stands out more visually daripada sebuah plain blue tautan, though Google doesn’t publish sebuah guaranteed click-melalui atau peringkat lift untuk ini — payoff adalah visual nyata estate itself, not sebuah documented traffic angka.
ini adalah one dari two structured-data jenis (dengan VideoObject, which banyak recipe halaman gunakan untuk sebuah embedded cooking video) itu genuinely earns sebuah mainstream rich hasil. jika Anda run sebuah food situs, ini adalah worth doing properly.
two things Anda harus memiliki
Google hanya strictly memerlukan two properties:
- name — name dari dish (sebuah nyata dish — more pada itu below).
- image — sebuah photo dari finished dish. Google’s own condition: dapat di-crawl, dapat diindeks, di sebuah didukung format, dan representative dari dish — ini recommends multiple images di 16x9, 4x3, dan 1x1 ratios, setiap setidaknya 50 000 pixels. (beberapa guides claim sebuah spesifik 1,200px-wide requirement; Google’s docs don’t state one.)
tetapi two properties get Anda sebuah bare-minimum valid recipe, not full card. fuller card — one people actually engage dengan — adalah populated dari recommended properties, though having them doesn’t guarantee Google renders setiap field:
- author, datePublished, deskripsi
- prepTime, cookTime, totalTime — times ditampilkan pada card.
- recipeYield — how banyak servings.
- recipeIngredient — ingredient list.
- recipeInstructions — langkah.
- aggregateRating — star rating (dari genuine reader ratings).
- nutrition dengan calories — feeds nutrition panel.
- recipeCategory, recipeCuisine, keywords — help Google memahami dan file recipe.
- video — jika Anda memiliki sebuah cooking video.
thing sebagian besar people get wrong
Individual recipe markup melakukan not, oleh itself, produce sebuah carousel. nice
multi-recipe carousel Anda see di top dari sebuah search adalah sebuah separate fitur itu
perlu sebuah ItemList summary halaman — sebuah halaman listing several recipes itu setiap tautan
out untuk mereka own recipe halaman. Per-recipe markup earns di sebagian besar sebuah single card. More
pada itu di Advanced tab.
Two more beginner traps:
- Valid markup ≠ guaranteed rich hasil. ini membuat Anda eligible; Google masih decides whether untuk display card.
- hanya nyata dishes count. Recipe markup adalah untuk food Anda actually prepare dan eat. Google literally says “facial scrub” (terjemahan) “facial scrub” atau “party ideas” (terjemahan) “party ideas” adalah not valid recipe names. Marking up non-food “recipes” (terjemahan) “recipes” adalah sebuah konten-policy violation.
ingin full versi — carousel/ItemList mechanics, nutrition panel,
ISO 8601 time format, dan why validated recipes masih don’t tampilkan? Switch untuk
Advanced tab.
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 dataTL;DR — schema.org/Recipe markup (biasanya JSON-LD) membuat sebuah recipe halaman eligible untuk Google’s recipe rich hasil — sebuah visual card (photo, star rating, cook time, calories) itu dapat appear sebagai sebuah carousel/grid pada SERP dan dengan recipe badges di Google Images. hanya
imagedannameadalah strictly diperlukan; card adalah really dibangun dari recommended set (aggregateRating,author,cookTime,prepTime,totalTime,recipeYield,recipeIngredient,recipeInstructions,recipeCategory,recipeCuisine,keywords,datePublished,nutrition.calories,video). Two implementation facts sebagian besar round-ups skip: multi-recipe carousel adalah sebuah host-tingkat fitur itu memerlukan sebuahItemListhalaman — either sebuah summary halaman linking untuk separate recipe halaman, atau sebuah semua-di-one halaman linking untuk anchors pada itself — per-recipe markup alone earns sebuah single card, tidak pernah sebuah carousel — dan Recipe markup adalah hanya valid untuk actual dishes (“facial scrub” (terjemahan) “facial scrub” dan “party ideas” (terjemahan) “party ideas” adalah Google’s own counterexamples). Times gunakan ISO 8601 durations (PT20M), dan paling umum alasan sebuah valid recipe doesn’t tampilkan adalah sebuah konten-policy mismatch antara markup dan terlihat halaman. Along dengan VideoObject, ini adalah one dari two structured-data jenis di CreativeWork cluster itu produces sebuah genuine, terlihat rich hasil — not sebuah documented peringkat, CTR, atau traffic factor, hanya sebuah nyata visual upgrade when ditampilkan.
What recipe rich hasil looks like — dan how ini adalah dibangun
Google renders Recipe markup sebagai sebuah visual card: image thumbnail, name,
aggregateRating stars dan count, dan cook time (dari totalTime atau
cookTime). pada banyak recipe kueri itu cards adalah grouped ke sebuah carousel atau
grid di top dari hasil, dan marked-up recipes juga earn recipe badges di
Google Images, which adalah sebuah meaningful penemuan surface untuk food konten.
Google’s framing dari whole poin: “Help users find your recipe content by telling Google about your recipe with structured data.” (terjemahan) “Help pengguna temukan Anda recipe konten oleh telling Google tentang Anda recipe dengan data terstruktur.” itu’s mental model — Anda’re not asking untuk sebuah peringkat boost, Anda’re membuat konten machine-readable enough untuk qualify untuk sebuah spesifik, terlihat fitur.
diperlukan vs. recommended — dan why “required” (terjemahan) “diperlukan” undersells ini
ini adalah property table itu penting. Google hanya marks two properties sebagai
diperlukan, which adalah genuinely misleading jika Anda stop reading there — sebuah recipe dengan
hanya name dan image validates tetapi produces sebuah thin, unattractive hasil.
diperlukan
| Property | Notes |
|---|---|
name | dish name. harus menjadi sebuah nyata dish (konten policy below). |
image | Photo dari finished dish. harus menjadi dapat di-crawl, dapat diindeks, di sebuah didukung format, dan representative dari dish. Google recommends multiple images di 16x9, 4x3, dan 1x1 ratios, setiap setidaknya 50 000 pixels — there’s no separate 1,200px-wide requirement beberapa guides cite. |
Recommended (ini adalah what Google menggunakan untuk bangun fuller card, when ini decides untuk tampilkan one — populating them doesn’t force display)
| Property | What ini drives |
|---|---|
aggregateRating | star rating + count pada card. mengikuti Google’s review-snippet guidelines; jika Anda tampilkan sebuah single review alih-alih sebuah aggregate, reviewer harus menjadi sebuah named person atau organization. |
author | Attribution. |
datePublished | Freshness signal; ISO 8601 date. |
description | Summary text. |
keywords | Free-text tags (e.g., “winter, comfort food” (terjemahan) “winter, comfort food”). Not yang sama sebagai recipeCategory. |
nutrition.calories | Feeds calorie figure Google dapat tampilkan. Conditional: jika Anda set nutrition.calories, recipeYield harus juga menjadi defined. |
prepTime | Prep duration, ISO 8601 (PT15M). Google’s guidance: selalu pair ini dengan cookTime. |
cookTime | Cook duration, ISO 8601 (PT1H). Pair ini dengan prepTime. |
totalTime | Total duration. gunakan totalTime, atau prepTime + cookTime combination — Google accepts either. |
recipeCategory | Meal jenis — “appetizer” (terjemahan) “appetizer”, “dessert” (terjemahan) “dessert”, “main course” (terjemahan) “main course”. |
recipeCuisine | Regional cuisine — “Mediterranean” (terjemahan) “Mediterranean”, “Thai” (terjemahan) “Thai”. |
recipeIngredient | One entry per ingredient, including quantity (“2 cups flour” (terjemahan) “2 cups flour”). |
recipeInstructions | langkah — ideally HowToStep objects, optionally grouped ke HowToSection. |
recipeYield | Servings atau amount produced. diperlukan jika Anda supply apa pun per-serving nutrition info. |
video | sebuah VideoObject untuk sebuah embedded cooking video — ikuti VideoObject’s own diperlukan/recommended fields (see below). |
totalTime dan prepTime/cookTime pair adalah both acceptable untuk Google; supply
totalTime directly when Anda dapat, since ini adalah single duration sebagian besar mungkin untuk
render pada card.
Times gunakan ISO 8601 durations, not free text
sebuah recurring validation failure: cookTime: "20 minutes" adalah invalid. Durations gunakan
ISO 8601 format — PT (period dari time) plus nilai — so 20 minutes adalah
PT20M, sebuah hour dan sebuah half adalah PT1H30M. Dates like datePublished gunakan ISO 8601
dates (2026-07-01). Getting ini formats wrong adalah one dari paling umum alasan sebuah
recipe fails Rich hasil Test.
carousel perlu sebuah ItemList — individual markup doesn’t
ini adalah implementation detail generic “types of schema” (terjemahan) “jenis dari schema” listicles almost selalu skip. ada two berbeda things here:
- ** single recipe card** — earned oleh Recipe markup pada individual recipe halaman.
- ** recipe carousel/grid** — sebuah host carousel, which adalah sebuah separate fitur.
untuk menjadi eligible untuk multi-recipe carousel, Anda tambahkan sebuah ItemList halaman — dan
Google’s host-carousel documentation mendukung two berbeda halaman models, not
hanya one:
- Summary halaman — sebuah halaman (sebuah category atau roundup halaman — “15 Weeknight Pastas” (terjemahan) “15 Weeknight Pastas”)
dengan sebuah pendek deskripsi dari setiap item, where setiap
ListItempoin, di order, untuk URL dari sebuah separate recipe detail halaman itu itself memiliki full Recipe markup. ini adalah pattern sebagian besar guides describe. - semua-di-one halaman — sebuah single halaman itu berisi full markup untuk setiap item
itself dan doesn’t tautan out untuk separate detail halaman; setiap
ListItemcarries sebuahitemobject (dengannamedan sebuahurlitu’s sebuah anchor pada sama halaman) rather daripada sebuah tautan untuk elsewhere.
Either model supplies sequence Google perlu untuk carousel; which one fits depends pada whether Anda recipes sudah live pada mereka own URLs (summary halaman) atau Anda’re presenting them semua pada one panjang halaman (semua-di-one halaman).
practical consequence: Anda cannot get sebuah carousel dari one ordinary recipe
halaman. sebuah single recipe halaman dengan excellent markup earns sebuah single card. jika Anda ingin
carousel, Anda perlu one dari two ItemList halaman models above, layered pada top dari
(atau containing) full Recipe markup. Missing ini adalah angka-one alasan people say
“my markup is perfect but I’m not getting a carousel.” (terjemahan) “my markup adalah perfect tetapi I’m not getting sebuah carousel.”
nutrition panel
nutrition adalah sebuah NutritionInformation object, dan nutrition.calories adalah field
Google panggilan out oleh name — ini feeds calorie figure Google dapat tampilkan di rich
hasil. itu’s sebuah data requirement, not sebuah promise dari sebuah distinct expandable nutrition
panel setiap time; Google’s docs describe field, not sebuah guaranteed UI element.
There’s juga sebuah condition attached: jika Anda set nutrition.calories, recipeYield
harus menjadi defined too, since calories adalah stated per serving dan Google perlu
serving count untuk membuat sense dari angka. Anda dapat tambahkan fatContent, proteinContent,
carbohydrateContent, sodiumContent, dan rest, tetapi calories (paired dengan
recipeYield) adalah combination itu sebagian besar reliably surfaces. nilai adalah strings
dengan units (“240 calories” (terjemahan) “240 calories”, “9 g” (terjemahan) “9 g”). ini adalah sebuah kecil block itu menambahkan sebuah terlihat,
differentiating detail untuk Anda card, so ini adalah worth populating untuk apa pun recipe where
Anda dapat compute ini honestly.
Video: where Recipe meets VideoObject
banyak recipe halaman embed sebuah cooking video, dan video property adalah where Recipe
dan VideoObject — two CreativeWork jenis itu produce genuine, terlihat rich
hasil — intersect. Google’s guidance adalah explicit: video takes sebuah full
VideoObject dan harus ikuti itu fitur’s own diperlukan dan recommended
properties (name, description, thumbnailUrl, uploadDate, dan sebuah contentUrl
atau embedUrl) — supplying sebuah bare video URL adalah not yang sama sebagai documented
subprofile. Done right, recipe dapat qualify untuk video treatment dan recipe
card, dan video becomes eligible untuk -nya own surfaces. per-field
requirements untuk video live dengan VideoObject topic — yang sama object
nests inside sebuah recipe, so ini adalah worth getting itu markup right alih-alih stubbing
di sebuah bare video: {}.
konten policy: hanya nyata dishes, matching terlihat halaman
ini adalah paling umum alasan otherwise-valid markup doesn’t display. Recipe markup adalah scoped untuk actual food. Google adalah blunt tentang ini: “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.” (terjemahan) “gunakan Recipe data terstruktur untuk konten tentang preparing sebuah particular dish. misalnya, ‘facial scrub’ atau ‘party ideas’ adalah not valid names untuk sebuah dish.” sebuah DIY cleaning “recipe,” (terjemahan) “recipe,” sebuah “recipe for success” (terjemahan) “recipe untuk success” listicle, atau sebuah roundup dari party ideas dressed up sebagai Recipe markup adalah sebuah policy violation — markup dapat pass syntactic validator dan masih tidak pernah earn sebuah card, atau get manually actioned.
kedua half dari yang sama principle: ** markup harus reflect terlihat halaman.** jika Anda JSON-LD lists ingredients, times, dan sebuah rating itu aren’t actually pada halaman sebuah pengguna sees, itu’s sebuah mismatch Google treats sebagai sebuah spam signal. Mark up what’s genuinely there.
Why Anda valid recipe masih menampilkan no rich hasil
Eligibility adalah not display. usual chain: halaman memiliki untuk menjadi terindeks,
markup memiliki untuk menjadi valid, konten memiliki untuk menjadi sebuah nyata dish ditampilkan pada halaman,
dan Google’s sistem masih memiliki untuk decide ini adalah worth showing — yang sama
eligibility-not-guarantee aturan itu governs setiap structured-data jenis. jika Anda’ve
cleared valid markup dan konten policy dan masih see no card, umum culprits
adalah: times di free text alih-alih ISO 8601, sebuah aggregateRating dengan no count, sebuah
image itu doesn’t meet size/aspect guidance, atau expecting sebuah carousel without sebuah
ItemList halaman.
untuk where Recipe sits di wider structured-data picture, see broader Schema Markup dan data terstruktur hubs ini artikel nests di bawah.
AI summary
sebuah condensed take pada Advanced versi:
- What ini adalah:
schema.org/Recipemarkup (biasanya JSON-LD) itu labels sebuah recipe halaman’s dish name, photo, times, ingredients, langkah, nutrition, video, dan ratings so Google dapat produce recipe rich hasil — sebuah visual card (photo, stars, cook time, calories) itu dapat appear sebagai sebuah carousel/grid dan dengan recipe badges di Google Images. - terlihat payoff, not sebuah documented peringkat factor: dengan VideoObject, one dari two CreativeWork jenis itu produces sebuah genuine, mainstream, terlihat rich hasil. Google doesn’t publish peringkat, CTR, atau traffic angka untuk ini.
- diperlukan vs. recommended: hanya
imagedannameadalah diperlukan, tetapi itu produces sebuah thin hasil. fuller card adalah populated dari recommended set when Google chooses untuk tampilkan ini:aggregateRating,author,cookTime,prepTime,totalTime,recipeYield,recipeIngredient,recipeInstructions,recipeCategory,recipeCuisine,keywords,datePublished,nutrition.calories,video. - Image condition: dapat di-crawl, dapat diindeks, didukung format, representative dari dish; Google recommends multiple images di 16:9/4:3/1:1, setiap setidaknya 50 000 pixels — no separate 1,200px-wide aturan sebagai beberapa guides claim.
- Conditional fields:
nutrition.caloriesmemerlukanrecipeYield;prepTimepairs dengancookTime(atau gunakantotalTimealih-alih pair); sebuah single review (not sebuah aggregate) perlu sebuah namedPerson/Organizationreviewer. - Carousel perlu sebuah
ItemListhalaman — two models: sebuah summary halaman whoseListItems tautan untuk separate recipe detail halaman, atau sebuah semua-di-one halaman whoseListItems poin untuk anchors pada itself. Per-recipe markup alone earns sebuah single card, tidak pernah sebuah carousel — paling commonly missed langkah. - Times adalah ISO 8601 durations:
PT20M,PT1H30M— not “20 minutes” (terjemahan) “20 minutes”. Wrong duration format adalah sebuah top validation failure. - Video:
videoproperty takes sebuah fullVideoObjectfollowing itu fitur’s own diperlukan/recommended fields (name,description,thumbnailUrl,uploadDate,contentUrl/embedUrl) — sebuah bare URL doesn’t satisfy ini. - konten policy (top alasan valid markup doesn’t tampilkan): hanya actual dishes qualify — Google’s own counterexamples adalah “facial scrub” (terjemahan) “facial scrub” dan “party ideas” (terjemahan) “party ideas”. markup harus juga reflect terlihat halaman.
- Eligibility ≠ display: terindeks halaman + valid markup + nyata dish ditampilkan pada halaman + Google deciding ini adalah worth showing. Valid markup hanya membuat Anda eligible.
Official documentation
Primary-source documentation dari mesin pencari.
Google — data terstruktur
- Recipe (Recipe, HowTo) data terstruktur — authoritative reference: diperlukan (
image,name) vs. recommended properties, konten-policy guidelines (hanya nyata dishes), dan nutrition/time/rating fields. - Recipe host carousel / summary halaman (search gallery) — where
ItemListsummary-halaman pattern itu powers multi-recipe carousel adalah described. - VideoObject data terstruktur — requirements untuk
VideoObjectitu nests di sebuah recipe’svideoproperty. - Rich hasil Test — validate recipe markup dan periksa rich-hasil eligibility.
Bing / Microsoft
- Marking up Anda situs dengan data terstruktur — Bing’s umum structured-data mendukung (schema.org, JSON-LD recommended).
Quotes dari source
pada—record statements dari Google. Where sebuah source halaman exposes text, tautan adalah sebuah deep tautan itu jumps untuk quoted passage.
Google docs — poin dari Recipe markup
- “Help users find your recipe content by telling Google about your recipe with structured data.” (terjemahan) “Help pengguna temukan Anda recipe konten oleh telling Google tentang Anda recipe dengan data terstruktur.” Jump untuk quote
Google docs — konten policy (hanya nyata dishes)
- “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.” (terjemahan) “gunakan Recipe data terstruktur untuk konten tentang preparing sebuah particular dish. misalnya, ‘facial scrub’ atau ‘party ideas’ adalah not valid names untuk sebuah dish.” Jump untuk quote
Recipe schema cheat sheet
diperlukan ( bare minimum untuk validate)
Recipe.name + Recipe.image. itu’s ini — tetapi ini produces sebuah thin card. nyata
dishes hanya.
Recommended — what membangun fuller card, when Google menampilkan one
| Property | Drives | Condition |
|---|---|---|
aggregateRating | Star rating + count | mengikuti review-snippet aturan; single review perlu sebuah named reviewer |
author | Attribution | — |
datePublished | Freshness (ISO 8601 date) | — |
description | Summary text | — |
keywords | Free-text tags | — |
nutrition.calories | Calorie figure | memerlukan recipeYield untuk juga menjadi set |
prepTime | Prep duration (PT15M) | Pair dengan cookTime |
cookTime | Cook duration (PT1H) | Pair dengan prepTime |
totalTime | Total duration | gunakan ini, atau prepTime+cookTime |
recipeCategory | Meal jenis (dessert, main course) | — |
recipeCuisine | Cuisine (Thai, Italian) | — |
recipeIngredient | Ingredient list (one entry setiap, w/ quantity) | — |
recipeInstructions | langkah (HowToStep) | — |
recipeYield | Servings | diperlukan jika nutrition.calories adalah set |
video | Nested VideoObject (cooking video) | harus ikuti VideoObject’s own diperlukan fields |
Single card vs. carousel
| Single recipe card | Recipe carousel/grid | |
|---|---|---|
| Where ini lives | Individual recipe halaman | ItemList halaman (summary atau semua-di-one) |
| Markup | Recipe pada halaman | Summary: ItemList → ListItem → separate recipe URLs. semua-di-one: ItemList → ListItem → anchors pada yang sama halaman |
| Earned oleh per-recipe markup alone? | Yes | No — perlu one dari two ItemList halaman models |
Formats itu break validation
- Times harus menjadi ISO 8601 durations:
PT20M, not “20 minutes” (terjemahan) “20 minutes”. - Dates harus menjadi ISO 8601:
2026-07-01. aggregateRatingperlu sebuahratingCount/reviewCount.imageharus menjadi dapat di-crawl/dapat diindeks/didukung format; Google recommends multiple images, 16x9 / 4x3 / 1x1, setiap setidaknya 50 000 pixels (not sebuah 1,200px-wide aturan).
Fast facts
- Format: JSON-LD (recommended, sebagian besar maintainable).
- Valid markup = eligible, not guaranteed untuk tampilkan — dan not sebuah documented peringkat/CTR factor.
- hanya nyata dishes — “facial scrub” (terjemahan) “facial scrub” / “party ideas” (terjemahan) “party ideas” adalah Google’s invalid contoh.
videotakes sebuah fullVideoObject, not sebuah bare URL.- Markup harus match terlihat halaman.
melakukan I get sebuah card, sebuah carousel, atau nothing?
berfungsi down pertanyaan:
1. adalah halaman tentang preparing sebuah actual dish?
- No — ini adalah sebuah “recipe for success,” (terjemahan) “recipe untuk success,” sebuah DIY/craft “recipe,” (terjemahan) “recipe,” sebuah party-ideas roundup, sebuah facial scrub → Recipe markup adalah not valid. Google names “facial scrub” (terjemahan) “facial scrub” dan “party ideas” (terjemahan) “party ideas” sebagai invalid dish names. Don’t mark ini up sebagai sebuah Recipe.
- Yes → continue.
2. melakukan markup match what sebuah pengguna actually sees pada halaman?
- No (times, ingredients, atau sebuah rating di JSON-LD itu aren’t pada halaman) → fix itu pertama; sebuah mismatch adalah sebuah konten-policy masalah itu dapat suppress hasil bahkan when syntax validates.
- Yes → continue.
3. melakukan Anda memiliki name + image, plus recommended set?
- hanya
name+image→ ini validates, tetapi Anda’ll get sebuah thin card. tambahkanaggregateRating, times (ISO 8601),recipeIngredient,recipeInstructions,recipeYield,nutrition.calories,recipeCategory/recipeCuisine. - Full recommended set pada sebuah single recipe halaman → Anda’re eligible untuk sebuah single recipe card.
4. melakukan Anda ingin multi-recipe carousel/grid?
- Yes, dan Anda recipes setiap memiliki mereka own halaman → tambahkan sebuah
ItemListsummary halaman (sebuah roundup/category halaman) whose JSON-LD lists, di order, URLs dari individual recipe halaman itu setiap carry full Recipe markup. - Yes, tetapi Anda present semua recipes pada one panjang halaman → gunakan semua-di-one
ItemListhalaman model instead: setiapListItemcarries item’s own markup dan poin untuk sebuah anchor pada itu sama halaman alih-alih sebuah separate URL. - No → single recipe card dari langkah 3 adalah semua Anda perlu.
- Either cara: per-recipe markup alone akan not produce sebuah carousel — Anda perlu one
dari two
ItemListhalaman models.
5. Embedding sebuah cooking video?
- tambahkan
videoproperty sebagai sebuah fullVideoObject(name,description,thumbnailUrl,uploadDate,contentUrl/embedUrl) — not sebuah bare URL — so ini dapat qualify untuk video treatment alongside recipe card.
aturan dari thumb: per-recipe markup earns card; ItemList summary
halaman earns carousel; dan none dari ini penting jika halaman isn’t sebuah nyata dish
matching terlihat konten.
Recipe schema myths dan mistakes untuk hindari
Myth: “Adding Recipe schema guarantees a rich result.” (terjemahan) “menambahkan Recipe schema guarantees sebuah rich hasil.” No structured-data jenis guarantees display. Recipe markup membuat halaman eligible; halaman masih memiliki untuk menjadi terindeks, menjadi sebuah nyata dish, match terlihat konten, dan memiliki Google’s sistem decide card adalah worth showing. Valid ≠ displayed.
Myth: “Any list-style content counts as a recipe.” (terjemahan) “apa pun list-style konten counts sebagai sebuah recipe.” salah, dan ini adalah sebuah konten-policy violation. Recipe markup adalah untuk actual dishes. Google’s own counterexamples: “‘facial scrub’ or ‘party ideas’ are not valid names for a dish.” (terjemahan) “‘facial scrub’ atau ‘party ideas’ adalah not valid names untuk sebuah dish.” sebuah “recipe for productivity,” (terjemahan) “recipe untuk productivity,” sebuah craft tutorial, atau sebuah DIY cleaner isn’t sebuah Recipe — bahkan jika ini happens untuk memiliki sebuah numbered list dari langkah.
Myth: “Individual recipe markup alone gets you a carousel.” (terjemahan) “Individual recipe markup alone gets Anda sebuah carousel.”
salah. multi-recipe carousel/grid adalah sebuah host-tingkat fitur itu memerlukan sebuah
ItemList halaman — either sebuah summary halaman linking untuk separate recipe halaman, atau sebuah
semua-di-one halaman linking untuk anchors pada itself. Per-recipe markup, no penting how
complete, earns di sebagian besar sebuah single card. ini adalah paling umum “my markup is perfect
but no carousel” (terjemahan) “my markup adalah perfect
tetapi no carousel” cause.
Mistake: times sebagai free text. cookTime: "20 minutes" fails. Durations adalah ISO
8601: PT20M, PT1H30M. Dates adalah ISO 8601 too: 2026-07-01. juga pair prepTime
dengan cookTime (atau supply totalTime alih-alih pair) alih-alih mixing them
inconsistently.
Mistake: aggregateRating dengan no count. sebuah rating nilai without sebuah
ratingCount/reviewCount adalah invalid — dan ratings harus menjadi genuine reader
ratings actually ditampilkan pada halaman, not fabricated atau imported dari elsewhere. jika Anda
tampilkan sebuah single review alih-alih sebuah aggregate, ini perlu sebuah named Person atau
Organization reviewer.
Mistake: nutrition.calories without recipeYield. Google’s condition adalah
explicit — jika Anda set nutrition.calories, recipeYield harus menjadi defined too, since
calorie figure adalah per serving.
Mistake: stopping di two diperlukan properties. name + image validates tetapi
renders sebuah thin, unattractive hasil. card people click adalah dibangun dari
recommended set — times, ingredients, yield, rating, nutrition.
Mistake: sebuah bare video URL. video property takes sebuah full VideoObject
(name, description, thumbnailUrl, uploadDate, contentUrl/embedUrl), not sebuah
string. sebuah stubbed video object biasanya fails validation untuk itu enhancement.
Mistake: markup itu doesn’t match halaman. jika ingredients, times, yield, atau rating di Anda JSON-LD disagree dengan what pengunjung sees, Google treats ini sebagai sebuah mismatch dan dapat suppress hasil bahkan dengan valid syntax.
Minimal vs. rich Recipe JSON-LD
minimal valid recipe
hanya two diperlukan properties. ini validates — tetapi ini earns, di best, sebuah thin card dengan no times, no rating, no ingredients:
{
"@context": "https://schema.org/",
"@type": "Recipe",
"name": "Weeknight Tomato Basil Pasta",
"image": "https://example.com/img/tomato-basil-pasta.jpg"
}yang sama recipe, done richly
Full recommended set — times di ISO 8601, ingredient dan langkah lists, sebuah genuine
aggregate rating, nutrition paired dengan recipeYield, dan sebuah nested VideoObject.
ini adalah what membangun fuller card (images below meet Google’s 50 000-pixel,
16x9/4x3/1x1 guidance):
{
"@context": "https://schema.org/",
"@type": "Recipe",
"name": "Weeknight Tomato Basil Pasta",
"image": [
"https://example.com/img/pasta-1x1.jpg",
"https://example.com/img/pasta-4x3.jpg",
"https://example.com/img/pasta-16x9.jpg"
],
"author": { "@type": "Person", "name": "Patrick Stox" },
"datePublished": "2026-07-01",
"description": "A 25-minute tomato and basil pasta for busy weeknights.",
"recipeCategory": "main course",
"recipeCuisine": "Italian",
"keywords": "pasta, tomato, weeknight, vegetarian",
"prepTime": "PT10M",
"cookTime": "PT15M",
"totalTime": "PT25M",
"recipeYield": "4 servings",
"recipeIngredient": [
"1 lb spaghetti",
"2 cups cherry tomatoes, halved",
"1/2 cup fresh basil, torn",
"3 tbsp olive oil",
"2 cloves garlic, minced"
],
"recipeInstructions": [
{ "@type": "HowToStep", "text": "Boil the spaghetti until al dente." },
{ "@type": "HowToStep", "text": "Saute garlic and tomatoes in olive oil." },
{ "@type": "HowToStep", "text": "Toss with pasta and fresh basil; serve." }
],
"nutrition": {
"@type": "NutritionInformation",
"calories": "480 calories"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"ratingCount": "312"
},
"video": {
"@type": "VideoObject",
"name": "How to make Weeknight Tomato Basil Pasta",
"description": "A quick walkthrough of the 25-minute tomato basil pasta.",
"thumbnailUrl": "https://example.com/img/pasta-video-thumb.jpg",
"contentUrl": "https://example.com/video/tomato-basil-pasta.mp4",
"uploadDate": "2026-07-01"
}
}carousel perlu sebuah ItemList halaman — summary atau semua-di-one
untuk earn multi-recipe carousel, Anda tambahkan one dari two ItemList halaman models.
Summary halaman — sebuah halaman (say, “15 Weeknight Pastas” (terjemahan) “15 Weeknight Pastas”) carries sebuah ItemList itu
poin, di order, untuk separate individual recipe halaman — setiap dari which memiliki full
Recipe markup like one above:
{
"@context": "https://schema.org/",
"@type": "ItemList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"url": "https://example.com/recipes/tomato-basil-pasta"
},
{
"@type": "ListItem",
"position": 2,
"url": "https://example.com/recipes/garlic-butter-linguine"
}
]
}semua-di-one halaman — sebuah single halaman holds setiap recipe’s full markup itself dan
doesn’t tautan out; setiap ListItem carries sebuah item dengan recipe’s own data dan sebuah
url itu’s sebuah anchor pada itu sama halaman:
{
"@context": "https://schema.org/",
"@type": "ItemList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"item": {
"@type": "Recipe",
"name": "Weeknight Tomato Basil Pasta",
"url": "https://example.com/recipes/roundup#tomato-basil-pasta"
}
},
{
"@type": "ListItem",
"position": 2,
"item": {
"@type": "Recipe",
"name": "Garlic Butter Linguine",
"url": "https://example.com/recipes/roundup#garlic-butter-linguine"
}
}
]
}Either model supplies sequence Google perlu; without one dari them, Anda get single cards, tidak pernah sebuah carousel.
umum Rich hasil Test failures → fixes
| Symptom / error | mungkin cause | Fix |
|---|---|---|
| Duration field rejected | cookTime: "20 minutes" | gunakan ISO 8601: "PT20M" |
| Invalid date | Free-text date | ISO 8601 date: "2026-07-01" |
aggregateRating invalid | No count | tambahkan ratingCount / reviewCount |
| Thin card, no times/rating | hanya name + image | tambahkan recommended properties |
| Not sebuah valid recipe | Non-dish konten (“party ideas” (terjemahan) “party ideas”) | Don’t gunakan Recipe markup |
| No carousel despite baik markup | No ItemList halaman | tambahkan sebuah summary halaman atau sebuah semua-di-one halaman |
video enhancement fails | Bare URL di video | gunakan full VideoObject |
| Nutrition/calories field ignored | nutrition.calories set without recipeYield | tambahkan recipeYield alongside nutrition.calories |
Test yourself: Recipe Schema
Five quick pertanyaan pada schema.org/Recipe, diperlukan vs. recommended split, carousel mechanics, dan konten policy. Pick sebuah jawaban untuk setiap, lalu periksa.
Resources worth Anda time
My writing pada ini topic
I haven’t published sebuah standalone Recipe schema guide dari my own — so alih-alih poin Anda di something itu doesn’t exist, honest move adalah untuk kirim Anda untuk primary sources below dan untuk related structured-data berfungsi pada ini situs. untuk broader vocabulary dan where Recipe fits, see Schema Markup dan data terstruktur hubs; untuk AI angle, Schema Markup untuk AI.
dari sekitar industry
- Recipe data terstruktur (Google Search Central) — authoritative reference untuk diperlukan/recommended properties, konten policy, dan nutrition/time/rating fields.
- Search gallery / recipe host carousel (Google) — where
ItemListsummary-halaman pattern behind carousel adalah documented. - VideoObject data terstruktur (Google) — requirements untuk
VideoObjectitu nests di sebuah recipe’svideoproperty. - Rich hasil Test (Google) — validate markup dan periksa eligibility.
Yoast, Semrush, dan AIOSEO setiap cover Recipe reasonably accurately di sebuah surface tingkat
— mereka’ll tell Anda ini earns stars, cook time, dan sebuah image. Where mereka stop pendek adalah
implementation depth: ItemList carousel mechanics, nutrition properties,
ISO 8601 duration format, dan umum validation failures. ini adalah one
CreativeWork subtype where competitor gap isn’t accuracy — ini adalah itu Recipe gets
one paragraf among six lainnya jenis, dengan none dari carousel-eligibility atau
troubleshooting detail above. itu’s differentiator here.
Log perubahan
Diperbarui 18 Jul 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.