Panduan Recipe Schema
cara implement schema.org/Recipe markup untuk Google's recipe rich hasil — dua diperlukan properties vs. recommended set itu membangun fuller card, mengapa carousel perlu sebuah ItemList summary atau semua-di-satu halaman, conditional nutrition/time/rating fields, video property, dan konten-policy aturan itu hanya nyata dishes qualify.
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 muncul sebagai sebuah carousel atau grid dan dengan recipe badges di Google Images. hanya dua 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. Dua hal trip orang up: multi-recipe carousel adalah sebuah host-tingkat fitur itu perlu sebuah ItemList halaman (either sebuah summary halaman linking untuk terpisah recipe halaman, atau sebuah semua-di-satu halaman linking untuk anchors pada itself) — individual recipe markup alone earns di sebagian besar sebuah single card, tidak sebuah carousel — dan Recipe markup adalah hanya valid untuk sebenarnya dishes, dengan Google's own counterexamples menjadi itu 'facial scrub' dan 'party ideas' adalah tidak valid recipe names. Along dengan VideoObject, ini adalah satu dari dua structured-data jenis di CreativeWork family itu produces sebuah genuine, terlihat rich hasil — Google tidak publish peringkat, CTR, atau traffic angka untuk ini, tetapi visual upgrade adalah nyata ketika ini menampilkan. Valid markup hanya membuat Anda eligible; Google masih decides apakah untuk tampilkan hasil.
«> TL;DR — Recipe schema is code you add to a recipe page that *labels the
Bukti untuk klaim ini Schema.org Recipe describes a recipe and its ingredients, instructions, timing, nutrition, and related metadata. Cakupan: Schema.org Recipe vocabulary. Tingkat keyakinan: tinggi · Diverifikasi: Schema.org: Recipe Bukti untuk klaim ini Google's Recipe feature requires name and image and documents additional recommended properties; complete valid markup earns eligibility, not guaranteed display or ranking. Cakupan: Current Google Recipe structured-data requirements. Tingkat keyakinan: tinggi · Diverifikasi: Google Search Central: Recipe structured datacooking details* for search engines — “this is the dish name,” “this is the photo,” “it takes 20 minutes to cook,” “these are the ingredients,” “here are the steps,” “readers rated it 4.7 stars.” Adding it correctly makes the page eligible for Google’s recipe rich result — the visual card you see with a photo, star rating, and cook time. Unlike a lot of schema types, this one has a real, visible payoff. It does not guarantee the card shows up, and a multi-recipe carousel needs an extra piece (an
ItemListpage) on top of the per-recipe markup.
» (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian empat, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
Apa Recipe schema adalah
Ketika 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 di mana recipe berhenti dan blog story begins. Recipe schema spells ini
out di code, menggunakan shared schema.org vocabulary —
ini tags setiap piece dari halaman dengan apa ini sebenarnya adalah: name, sebuah image,
prepTime dan cookTime, recipeIngredient list,
recipeInstructions langkah, dan apa pun star aggregateRating.
ini adalah hampir selalu ditulis sebagai JSON-LD — sebuah kecil block dari code itu sits di halaman tanpa mengubah bagaimana halaman looks.
Mengapa ini adalah worth melakukan
payoff adalah recipe rich hasil, dan ini adalah sebuah baik satu. 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 mendapatkan recipe badges di Google Images. sebuah card like itu stands out lebih visually daripada sebuah plain blue tautan, though Google tidak publish sebuah guaranteed click-melalui atau peringkat lift untuk ini — payoff adalah visual nyata estate itself, tidak sebuah terdokumentasi traffic angka.
ini adalah satu dari dua structured-data jenis (dengan VideoObject, yang banyak recipe halaman gunakan untuk sebuah embedded cooking video) itu genuinely earns sebuah mainstream rich hasil. jika Anda jalankan sebuah food situs, ini adalah worth melakukan properly.
dua hal Anda harus memiliki
Google hanya strictly memerlukan dua properties:
- name — name dari dish (sebuah nyata dish — lebih pada itu di bawah).
- 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 jangan state satu.)
tetapi dua properties mendapatkan Anda sebuah bare-minimum valid recipe, tidak penuh card. fuller card — satu orang sebenarnya engage dengan — adalah populated dari recommended properties, though memiliki them tidak jaminan Google renders setiap field:
- author, datePublished, deskripsi
- prepTime, cookTime, totalTime — times ditampilkan pada card.
- recipeYield — bagaimana 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.
hal sebagian besar orang mendapatkan wrong
Individual recipe markup melakukan tidak, oleh itself, produce sebuah carousel. nice
multi-recipe carousel Anda see di top dari sebuah penelusuran adalah sebuah terpisah 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. Lebih
pada itu di Advanced tab.
Dua lebih beginner traps:
- Valid markup ≠ guaranteed rich hasil. ini membuat Anda eligible; Google masih decides apakah untuk display card.
- hanya nyata dishes count. Recipe markup adalah untuk food Anda sebenarnya prepare dan eat. Google secara harfiah says “facial scrub” (terjemahan) “facial scrub” atau “party ideas” (terjemahan) “party ideas” adalah tidak valid recipe names. Marking up non-food “recipes” (terjemahan) “recipes” adalah sebuah konten-policy violation.
ingin penuh versi — carousel/ItemList mechanics, nutrition panel,
ISO 8601 time format, dan mengapa validated recipes masih jangan tampilkan? Switch untuk
Advanced tab.
Bukti untuk klaim ini Schema.org Recipe describes a recipe and its ingredients, instructions, timing, nutrition, and related metadata. Cakupan: Schema.org Recipe vocabulary. Tingkat keyakinan: tinggi · Diverifikasi: Schema.org: Recipe Bukti untuk klaim ini Google's Recipe feature requires name and image and documents additional recommended properties; complete valid markup earns eligibility, not guaranteed display or ranking. Cakupan: Current Google Recipe structured-data requirements. Tingkat keyakinan: tinggi · Diverifikasi: 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 muncul sebagai sebuah carousel/grid pada SERP dan dengan recipe badges di Google Images. hanya
imagedannameadalah strictly diperlukan; card adalah benar-benar dibangun dari recommended set (aggregateRating,author,cookTime,prepTime,totalTime,recipeYield,recipeIngredient,recipeInstructions,recipeCategory,recipeCuisine,keywords,datePublished,nutrition.calories,video). Dua implementation facts sebagian besar round-ups skip: multi-recipe carousel adalah sebuah host-tingkat fitur itu memerlukan sebuahItemListhalaman — either sebuah summary halaman linking untuk terpisah recipe halaman, atau sebuah semua-di-satu 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 sebenarnya 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 tidak tampilkan adalah sebuah konten-policy mismatch antara markup dan terlihat halaman. Along dengan VideoObject, ini adalah satu dari dua structured-data jenis di CreativeWork cluster itu produces sebuah genuine, terlihat rich hasil — tidak sebuah terdokumentasi peringkat, CTR, atau traffic factor, hanya sebuah nyata visual upgrade ketika ditampilkan.
Apa recipe rich hasil looks like — dan bagaimana 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, yang adalah sebuah bermakna penemuan surface untuk food konten.
Google’s framing dari seluruh poin: “Help users temukan Anda recipe konten oleh telling Google tentang Anda recipe dengan structured data.” (terjemahan) “Help pengguna temukan Anda recipe konten oleh telling Google tentang Anda recipe dengan data terstruktur.” itu’s mental model — Anda’re tidak asking untuk sebuah peringkat boost, Anda’re membuat konten machine-readable cukup untuk qualify untuk sebuah spesifik, terlihat fitur.
diperlukan vs. recommended — dan mengapa “wajib” (terjemahan) “diperlukan” undersells ini
ini adalah property table itu penting. Google hanya marks dua properties sebagai
diperlukan, yang adalah genuinely misleading jika Anda berhenti reading di sana — 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 di bawah). |
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 — ada Tidak terpisah 1,200px-wide requirement beberapa guides cite. |
Recommended (ini adalah apa Google menggunakan untuk bangun fuller card, ketika ini decides untuk tampilkan satu — populating them tidak force display)
«| Property | What it drives |
| --- | --- |
| aggregateRating | The star rating + count on the card. Follows Google’s review-snippet guidelines; if you show a single review rather than an aggregate, the reviewer must be a named person or organization. |
| author | Attribution. |
| datePublished | Freshness signal; ISO 8601 date. |
| description | Summary text. |
| keywords | Free-text tags (e.g., “winter, comfort food”). Not the same as recipeCategory. |
| nutrition.calories | Feeds the calorie figure Google may show. Conditional: if you set nutrition.calories, recipeYield must also be defined. |
| prepTime | Prep duration, ISO 8601 (PT15M). Google’s guidance: always pair it with cookTime. |
| cookTime | Cook duration, ISO 8601 (PT1H). Pair it with prepTime. |
| totalTime | Total duration. Use totalTime, or the prepTime + cookTime combination — Google accepts either. |
| recipeCategory | Meal type — “appetizer”, “dessert”, “main course”. |
| recipeCuisine | Regional cuisine — “Mediterranean”, “Thai”. |
| recipeIngredient | One entry per ingredient, including quantity (“2 cups flour”). |
| recipeInstructions | The steps — ideally HowToStep objects, optionally grouped into HowToSection. |
| recipeYield | Servings or amount produced. Required if you supply any per-serving nutrition info. |
| video | A VideoObject for an embedded cooking video — follow VideoObject’s own required/recommended fields (see below). |
» (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian tiga puluh dua, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
totalTime dan prepTime/cookTime pair adalah keduanya acceptable untuk Google; supply
totalTime secara langsung ketika Anda dapat, since ini adalah single duration sebagian besar mungkin untuk
render pada card.
Times gunakan ISO 8601 durations, tidak free text
sebuah recurring validation failure: cookTime: "20 minutes" adalah tidak valid. 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 satu dari paling umum alasan sebuah
recipe fails Rich hasil Test.
carousel perlu sebuah ItemList — individual markup tidak
ini adalah implementation detail generic “types dari schema” (terjemahan) “jenis dari schema” listicles hampir selalu skip. ada dua berbeda hal di sini:
- ** single recipe card** — earned oleh Recipe markup pada individual recipe halaman.
- ** recipe carousel/grid** — sebuah host carousel, yang adalah sebuah terpisah fitur.
untuk menjadi eligible untuk multi-recipe carousel, Anda tambahkan sebuah ItemList halaman — dan
Google’s host-carousel documentation mendukung dua berbeda halaman models, tidak
hanya satu:
- Summary halaman — sebuah halaman (sebuah category atau roundup halaman — “15 Weeknight Pastas” (terjemahan) “15 Weeknight Pastas”)
dengan sebuah pendek deskripsi dari setiap item, di mana setiap
ListItempoin, di order, untuk URL dari sebuah terpisah recipe detail halaman itu itself memiliki penuh Recipe markup. ini adalah pattern sebagian besar guides deskripsikan. - semua-di-satu halaman — sebuah single halaman itu berisi penuh markup untuk setiap item
itself dan tidak tautan out untuk terpisah 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; yang satu fits bergantung pada apakah Anda recipes sudah langsung pada mereka own URLs (summary halaman) atau Anda’re presenting them semua pada satu panjang halaman (semua-di-satu halaman).
practical consequence: Anda cannot mendapatkan sebuah carousel dari satu ordinary recipe
halaman. sebuah single recipe halaman dengan excellent markup earns sebuah single card. jika Anda ingin
carousel, Anda perlu satu dari dua ItemList halaman models di atas, layered pada top dari
(atau containing) penuh Recipe markup. Missing ini adalah angka-satu alasan orang say
“my markup adalah perfect tetapi I’m tidak getting a carousel.” (terjemahan) “my markup adalah perfect tetapi I’m tidak getting sebuah carousel.”
nutrition panel
«nutrition is a NutritionInformation object, and nutrition.calories is the field
Google calls out by name — it feeds the calorie figure Google may show in the rich
result. That’s a data requirement, not a promise of a distinct expandable nutrition
panel every time; Google’s docs describe the field, not a guaranteed UI element.
There’s also a condition attached: if you set nutrition.calories, recipeYield
must be defined too, since calories are stated per serving and Google needs the
serving count to make sense of the number. You can add fatContent, proteinContent,
carbohydrateContent, sodiumContent, and the rest, but calories (paired with
recipeYield) is the combination that most reliably surfaces. Values are strings
with units (“240 calories”, “9 g”). It’s a small block that adds a visible,
differentiating detail to your card, so it’s worth populating for any recipe where
you can compute it honestly.
» (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian empat puluh empat, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
Video: di mana Recipe memenuhi VideoObject
banyak recipe halaman embed sebuah cooking video, dan video property adalah di mana Recipe
dan VideoObject — dua CreativeWork jenis itu produce genuine, terlihat rich
hasil — intersect. Google’s guidance adalah jelas: video takes sebuah penuh
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 tidak yang sama sebagai terdokumentasi
subprofile. Selesai right, recipe dapat qualify untuk video treatment dan recipe
card, dan video becomes eligible untuk -nya own surfaces. per-field
requirements untuk video langsung dengan VideoObject topic — yang sama object
nests di dalam 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 jika tidak-valid markup tidak display. Recipe markup adalah scoped untuk sebenarnya food. Google adalah blunt tentang ini: “Gunakan Recipe structured data untuk konten tentang preparing a particular dish. Misalnya, ‘facial scrub’ atau ‘party ideas’ adalah tidak valid names untuk a dish.” (terjemahan) “gunakan Recipe data terstruktur untuk konten tentang preparing sebuah particular dish. misalnya, ‘facial scrub’ atau ‘party ideas’ adalah tidak 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 lulus syntactic validator dan masih tidak pernah earn sebuah card, atau mendapatkan manually actioned.
kedua half dari yang sama principle: ** markup harus reflect terlihat halaman.** jika Anda JSON-LD lists ingredients, times, dan sebuah rating itu tidak sebenarnya pada halaman sebuah pengguna sees, itu’s sebuah mismatch Google memperlakukan sebagai sebuah spam sinyal. Mark up apa genuinely di sana.
Mengapa Anda valid recipe masih menampilkan Tidak rich hasil
Eligibility adalah tidak display. biasa 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 menunjukkan — yang sama
eligibility-tidak-jaminan aturan itu governs setiap structured-data jenis. jika Anda’ve
cleared valid markup dan konten policy dan masih see Tidak card, umum culprits
adalah: times di free text alih-alih ISO 8601, sebuah aggregateRating dengan Tidak count, sebuah
image itu tidak memenuhi size/aspect guidance, atau expecting sebuah carousel tanpa sebuah
ItemList halaman.
untuk di mana Recipe sits di wider structured-data picture, see lebih luas Schema Markup dan data terstruktur hubs ini artikel nests di bawah.
AI summary
sebuah condensed take pada Advanced versi:
- Apa 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 muncul sebagai sebuah carousel/grid dan dengan recipe badges di Google Images. - terlihat payoff, tidak sebuah terdokumentasi peringkat factor: dengan VideoObject, satu dari dua CreativeWork jenis itu produces sebuah genuine, mainstream, terlihat rich hasil. Google tidak 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 ketika 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 — Tidak terpisah 1,200px-wide aturan sebagai beberapa guides claim.
- Conditional fields:
nutrition.caloriesmemerlukanrecipeYield;prepTimepairs dengancookTime(atau gunakantotalTimealih-alih pair); sebuah single review (tidak sebuah aggregate) perlu sebuah namedPerson/Organizationreviewer. - Carousel perlu sebuah
ItemListhalaman — dua models: sebuah summary halaman milik siapaListItems tautan untuk terpisah recipe detail halaman, atau sebuah semua-di-satu halaman milik siapaListItems 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— tidak “20 minutes” (terjemahan) “20 minutes”. Wrong duration format adalah sebuah top validation failure. - Video:
videoproperty takes sebuah penuhVideoObjectberikut itu fitur’s own diperlukan/recommended fields (name,description,thumbnailUrl,uploadDate,contentUrl/embedUrl) — sebuah bare URL tidak satisfy ini. - konten policy (top alasan valid markup tidak tampilkan): hanya sebenarnya 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 menunjukkan. Valid markup hanya membuat Anda eligible.
Dokumentasi resmi
Utama-sumber 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 (penelusuran gallery) — di mana
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 sumber
pada—record statements dari Google. Di mana sebuah sumber 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 tidak 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 — apa membangun fuller card, ketika Google menampilkan satu
| 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 (satu 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 | |
|---|---|---|
| Di mana ini lives | Individual recipe halaman | ItemList halaman (summary atau semua-di-satu) |
| Markup | Recipe pada halaman | Summary: ItemList → ListItem → terpisah recipe URLs. semua-di-satu: ItemList → ListItem → anchors pada yang sama halaman |
| Earned oleh per-recipe markup alone? | Ya | Tidak — perlu satu dari dua ItemList halaman models |
Formats itu break validation
- Times harus menjadi ISO 8601 durations:
PT20M, tidak “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 (tidak sebuah 1,200px-wide aturan).
«Fast facts
- Format: JSON-LD (recommended, most maintainable).
- Valid markup = eligible, not guaranteed to show — and not a documented ranking/CTR factor.
- Only real dishes — “facial scrub” / “party ideas” are Google’s invalid examples.
videotakes a fullVideoObject, not a bare URL.- Markup must match the visible page. » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian delapan puluh empat, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
melakukan I mendapatkan sebuah card, sebuah carousel, atau tidak ada apa pun?
berfungsi down pertanyaan:
1. adalah halaman tentang preparing sebuah sebenarnya dish?
- Tidak — 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 tidak valid. Google names “facial scrub” (terjemahan) “facial scrub” dan “party ideas” (terjemahan) “party ideas” sebagai tidak valid dish names. jangan mark ini up sebagai sebuah Recipe.
- Ya → continue.
2. melakukan markup match apa sebuah pengguna sebenarnya sees pada halaman?
- Tidak (times, ingredients, atau sebuah rating di JSON-LD itu tidak pada halaman) → perbaiki itu pertama; sebuah mismatch adalah sebuah konten-policy masalah itu dapat suppress hasil bahkan ketika syntax validates.
- Ya → continue.
3. melakukan Anda memiliki name + image, plus recommended set?
- hanya
name+image→ ini validates, tetapi Anda’ll mendapatkan sebuah thin card. tambahkanaggregateRating, times (ISO 8601),recipeIngredient,recipeInstructions,recipeYield,nutrition.calories,recipeCategory/recipeCuisine. - Penuh recommended set pada sebuah single recipe halaman → Anda’re eligible untuk sebuah single recipe card.
4. melakukan Anda ingin multi-recipe carousel/grid?
- Ya, dan Anda recipes setiap memiliki mereka own halaman → tambahkan sebuah
ItemListsummary halaman (sebuah roundup/category halaman) milik siapa JSON-LD lists, di order, URLs dari individual recipe halaman itu setiap carry penuh Recipe markup. - Ya, tetapi Anda present semua recipes pada satu panjang halaman → gunakan semua-di-satu
ItemListhalaman model alih-alih: setiapListItemcarries item’s own markup dan poin untuk sebuah anchor pada itu sama halaman alih-alih sebuah terpisah URL. - Tidak → single recipe card dari langkah 3 adalah semua Anda perlu.
- Either cara: per-recipe markup alone akan tidak produce sebuah carousel — Anda perlu satu
dari dua
ItemListhalaman models.
5. Embedding sebuah cooking video?
- tambahkan
videoproperty sebagai sebuah penuhVideoObject(name,description,thumbnailUrl,uploadDate,contentUrl/embedUrl) — tidak 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 tidak 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 jaminan sebuah rich hasil.” Tidak structured-data jenis jaminan 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 menunjukkan. Valid ≠ displayed.
«Myth: “Any list-style content counts as a recipe.” False, and it’s a content-policy violation. Recipe markup is for actual dishes. Google’s own counterexamples: “‘facial scrub’ or ‘party ideas’ are not valid names for a dish.” A “recipe for productivity,” a craft tutorial, or a DIY cleaner isn’t a Recipe — even if it happens to have a numbered list of steps. » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian sembilan puluh sembilan, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
Myth: “Individual recipe markup alone gets you a carousel.” (terjemahan) “Individual recipe markup alone mendapatkan Anda sebuah carousel.”
salah. multi-recipe carousel/grid adalah sebuah host-tingkat fitur itu memerlukan sebuah
ItemList halaman — either sebuah summary halaman linking untuk terpisah recipe halaman, atau sebuah
semua-di-satu halaman linking untuk anchors pada itself. Per-recipe markup, Tidak penting bagaimana
menyelesaikan, earns di sebagian besar sebuah single card. ini adalah paling umum “my markup is perfect
but no carousel” (terjemahan) “my markup adalah perfect
tetapi Tidak carousel” penyebab.
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 Tidak count. sebuah rating nilai tanpa sebuah
ratingCount/reviewCount adalah tidak valid — dan ratings harus menjadi genuine reader
ratings sebenarnya ditampilkan pada halaman, tidak 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 tanpa recipeYield. Google’s condition adalah
jelas — jika Anda set nutrition.calories, recipeYield harus menjadi didefinisikan too, since
calorie figure adalah per serving.
Mistake: stopping di dua diperlukan properties. name + image validates tetapi
renders sebuah thin, unattractive hasil. card orang click adalah dibangun dari
recommended set — times, ingredients, yield, rating, nutrition.
Mistake: sebuah bare video URL. video property takes sebuah penuh VideoObject
(name, description, thumbnailUrl, uploadDate, contentUrl/embedUrl), tidak sebuah
string. sebuah stubbed video object biasanya fails validation untuk itu enhancement.
Mistake: markup itu tidak match halaman. jika ingredients, times, yield, atau rating di Anda JSON-LD disagree dengan apa pengunjung sees, Google memperlakukan ini sebagai sebuah mismatch dan dapat suppress hasil bahkan dengan valid syntax.
«## Minimal vs. rich Recipe JSON-LD » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian seratus sembilan, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
minimal valid recipe
hanya dua diperlukan properties. ini validates — tetapi ini earns, di best, sebuah thin card dengan Tidak times, Tidak rating, Tidak ingredients:
{
"@context": "https://schema.org/",
"@type": "Recipe",
"name": "Weeknight Tomato Basil Pasta",
"image": "https://example.com/img/tomato-basil-pasta.jpg"
}yang sama recipe, selesai richly
Penuh recommended set — times di ISO 8601, ingredient dan langkah lists, sebuah genuine
aggregate rating, nutrition paired dengan recipeYield, dan sebuah nested VideoObject.
ini adalah apa membangun fuller card (images di bawah memenuhi 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-satu
untuk earn multi-recipe carousel, Anda tambahkan satu dari dua ItemList halaman models.
Summary halaman — sebuah halaman (say, “15 Weeknight Pastas” (terjemahan) “15 Weeknight Pastas”) carries sebuah ItemList itu
poin, di order, untuk terpisah individual recipe halaman — setiap dari yang memiliki penuh
Recipe markup like satu di atas:
{
"@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-satu halaman — sebuah single halaman holds setiap recipe’s penuh markup itself dan
tidak 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; tanpa satu dari them, Anda mendapatkan single cards, tidak pernah sebuah carousel.
umum Rich hasil Test failures → memperbaiki
| Symptom / error | mungkin penyebab | Perbaiki |
|---|---|---|
| Duration field rejected | cookTime: "20 minutes" | gunakan ISO 8601: "PT20M" |
| Tidak valid date | Free-text date | ISO 8601 date: "2026-07-01" |
aggregateRating tidak valid | Tidak count | tambahkan ratingCount / reviewCount |
| Thin card, Tidak times/rating | hanya name + image | tambahkan recommended properties |
| Tidak sebuah valid recipe | Non-dish konten (“party ideas” (terjemahan) “party ideas”) | jangan gunakan Recipe markup |
| Tidak carousel despite baik markup | Tidak ItemList halaman | tambahkan sebuah summary halaman atau sebuah semua-di-satu halaman |
video enhancement fails | Bare URL di video | gunakan penuh VideoObject |
| Nutrition/calories field ignored | nutrition.calories set tanpa recipeYield | tambahkan recipeYield alongside nutrition.calories |
Uji pemahaman Anda: 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 sesuatu itu tidak exist, honest move adalah untuk kirim Anda untuk utama sources di bawah dan untuk related structured-data berfungsi pada ini situs. untuk lebih luas vocabulary dan di mana 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.
- Penelusuran gallery / recipe host carousel (Google) — di mana
ItemListsummary-halaman pattern behind carousel adalah terdokumentasi. - 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. Di mana mereka berhenti pendek adalah
implementation depth: ItemList carousel mechanics, nutrition properties,
ISO 8601 duration format, dan umum validation failures. ini adalah satu
CreativeWork subtype di mana pesaing kesenjangan tidak accuracy — ini adalah itu Recipe mendapatkan
satu paragraf among six lainnya jenis, dengan none dari carousel-eligibility atau
troubleshooting detail di atas. itu’s differentiator di sini.
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.