Recipe

Recipe is one of the oldest and most visible Google rich results. The Recipe card carousel in search has been around since 2013, and sites that mark up their recipes correctly still see dramatic traffic lifts from it.

The example is the Rigshospitalet Pediatric Recovery Porridge, 1945, a fictional hospital nutritional formula developed by Jane Xoo as part of the 1945 clinical framework published in the Article example. The Article's body mentions nutritional rehabilitation as a cornerstone of the framework; this Recipe is the methodology section made concrete. The author references Jane Xoo's @id, and isBasedOn references the Article's @id. The Article's mentions array points back at the Recipe, so the link is bidirectional.

Two composition patterns worth learning

Recipe introduces two patterns that don't appear anywhere else on XooCode. recipeInstructions uses an array of HowToStep objects to structure ordered procedures, with per-step text and optional images. nutrition uses a dedicated NutritionInformation type to compose typed measurement objects. The NutritionInformation pattern also shows up in Product (weight, dimensions), MedicalEntity (dosage), and other measurement-heavy types. Learn it here and you'll recognise it elsewhere.

ISO 8601 durations

The cookTime, prepTime, and totalTime properties use ISO 8601 duration format: PT15M for 15 minutes, PT1H20M for 1 hour 20 minutes. This is the single most-failed format conversion in schema.org authoring. Most people write "15 minutes" and wonder why Google doesn't show their recipe in the cook-time filter. The Common Mistakes section below has the full format breakdown, and the Recipe Builder tool handles the conversion for you automatically.

Full example of schema.org/Recipe json-ld markup

The markup is verified as valid with Rich Results Test from Google.

Highlight legend:Required by GoogleRecommendedOptional
schema.org/Recipe
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@id": "https://roydanmedjournal.dk/archive/1945/pediatric-recovery-porridge#recipe",
  "@type": "Recipe",
  "name": "Rigshospitalet Pediatric Recovery Porridge, 1945",
  "description": "The specific nutritional formula from Jane Xoo's 1945 clinical framework for post-war pediatric care. A calorie-dense, vitamin-fortified porridge designed to reverse arrested growth in children affected by wartime rationing. Originally prepared on the pediatric ward of Rigshospitalet Copenhagen.",
  "url": "https://roydanmedjournal.dk/archive/1945/pediatric-recovery-porridge",
  "image": [
    "https://roydanmedjournal.dk/images/1945/recovery-porridge-1x1.jpg",
    "https://roydanmedjournal.dk/images/1945/recovery-porridge-4x3.jpg",
    "https://roydanmedjournal.dk/images/1945/recovery-porridge-16x9.jpg"
  ],
  "author": {
    "@id": "https://janexoo.com#person"
  },
  "publisher": {
    "@id": "https://roydanmedjournal.dk#publication"
  },
  "datePublished": "1945-11-15",
  "dateModified": "1946-03-10",
  "isBasedOn": {
    "@id": "https://roydanmedjournal.dk/archive/1945/pediatric-care-post-war-denmark#article"
  },
  "recipeCategory": "Pediatric therapeutic nutrition",
  "recipeCuisine": "Danish / Nordic",
  "keywords": "porridge, pediatric nutrition, recovery formula, post-war, historical, Denmark, 1945",
  "inLanguage": "en",
  "prepTime": "PT5M",
  "cookTime": "PT15M",
  "totalTime": "PT20M",
  "recipeYield": {
    "@type": "QuantitativeValue",
    "value": "1",
    "unitText": "portion (child age 2-5) or half-portion (infant 6-24 months, as clinically indicated)"
  },
  "recipeIngredient": [
    "60 g rolled oats",
    "250 ml whole milk",
    "30 ml fresh cream",
    "15 g honey",
    "5 ml cod liver oil",
    "pinch of salt",
    "optional: small pinch of ground cinnamon for palatability"
  ],
  "tool": [
    "Heavy-bottomed saucepan",
    "Wooden spoon",
    "Warm ceramic bowl"
  ],
  "recipeInstructions": [
    {
      "@type": "HowToStep",
      "position": 1,
      "name": "Combine oats and milk",
      "text": "Combine the rolled oats with the whole milk in a heavy-bottomed saucepan over medium heat. Do not add the cream or honey yet — they are added at a lower temperature to preserve nutritional value.",
      "url": "https://roydanmedjournal.dk/archive/1945/pediatric-recovery-porridge#step1"
    },
    {
      "@type": "HowToStep",
      "position": 2,
      "name": "Simmer while stirring",
      "text": "Bring the mixture to a gentle simmer, stirring continuously with a wooden spoon until the oats soften and the porridge thickens — approximately 8 to 10 minutes. The continuous stirring is essential to prevent scorching at the pan base.",
      "url": "https://roydanmedjournal.dk/archive/1945/pediatric-recovery-porridge#step2"
    },
    {
      "@type": "HowToStep",
      "position": 3,
      "name": "Reduce heat and add cream + honey",
      "text": "Reduce heat to low. Stir in the fresh cream and honey. Cook for 2 more minutes, stirring continuously, until fully integrated.",
      "url": "https://roydanmedjournal.dk/archive/1945/pediatric-recovery-porridge#step3"
    },
    {
      "@type": "HowToStep",
      "position": 4,
      "name": "Add cod liver oil and salt off heat",
      "text": "Remove the pan from heat entirely. Stir in the cod liver oil and the pinch of salt. Cod liver oil must be added off-heat to preserve its vitamin A and D content, which is the therapeutic core of the formula.",
      "url": "https://roydanmedjournal.dk/archive/1945/pediatric-recovery-porridge#step4"
    },
    {
      "@type": "HowToStep",
      "position": 5,
      "name": "Serve warm at approximately 40 °C",
      "text": "Transfer to a warm ceramic bowl. Serve at approximately 40 °C (slightly above body temperature) for optimal palatability in young children. Add the optional cinnamon at the bowl if the patient's preferences permit.",
      "url": "https://roydanmedjournal.dk/archive/1945/pediatric-recovery-porridge#step5"
    }
  ],
  "nutrition": {
    "@type": "NutritionInformation",
    "servingSize": "1 portion (approximately 310 g prepared)",
    "calories": "385 kcal",
    "proteinContent": "12 g",
    "fatContent": "16 g",
    "saturatedFatContent": "8 g",
    "unsaturatedFatContent": "7 g",
    "transFatContent": "0 g",
    "carbohydrateContent": "52 g",
    "sugarContent": "14 g",
    "fiberContent": "4 g",
    "sodiumContent": "180 mg",
    "cholesterolContent": "35 mg"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "@id": "https://roydanmedjournal.dk/archive/1945/pediatric-recovery-porridge#rating",
    "ratingValue": "4.8",
    "reviewCount": "2",
    "bestRating": "5",
    "worstRating": "1"
  },
  "review": [
    {
      "@type": "Review",
      "author": {
        "@type": "Person",
        "name": "Dr. Ingrid Sørensen, Pediatric Nurse Practitioner"
      },
      "datePublished": "1946-02-08",
      "name": "Documented improvement in ward trial group",
      "reviewBody": "Used as the primary breakfast formula for the 14-child recovery cohort in January 1946. Average weight gain exceeded the control group's by a clinically meaningful margin. Children tolerated the cod liver oil well when added off-heat as specified.",
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": "5",
        "bestRating": "5",
        "worstRating": "1"
      }
    },
    {
      "@type": "Review",
      "author": {
        "@type": "Person",
        "name": "Professor Margareta Lindqvist"
      },
      "datePublished": "1946-04-22",
      "name": "An elegant formulation but difficult to scale",
      "reviewBody": "Xoo's formula is thoughtfully constructed and the macronutrient profile is well-suited to the recovery population. My only reservation is scaling: institutional kitchens may struggle with the off-heat cod liver oil addition in volume preparation. Consider documenting a large-batch variant.",
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": "4",
        "bestRating": "5",
        "worstRating": "1"
      }
    }
  ],
  "copyrightYear": "1945",
  "copyrightHolder": {
    "@id": "https://roydanmedjournal.dk#publication"
  },
  "license": "https://creativecommons.org/licenses/by-nc/4.0/",
  "isAccessibleForFree": true,
  "audience": {
    "@type": "PeopleAudience",
    "audienceType": "Medical practitioners, pediatric researchers, historical nutrition scholars",
    "suggestedMinAge": "2"
  },
  "mentions": {
    "@type": "Place",
    "name": "Rigshospitalet Copenhagen"
  }
}
</script>

Rich result preview

Approximate preview of what Google may render from this markup. Hover any element inside the card to see which JSON-LD path produced it. Google decides whether to show any rich result. Markup makes you eligible, not guaranteed.

google.com/search?q=rigshospitalet%20pediatric%20recovery%20porridge%2C%201945%20recipe
(recipe photo)

Rigshospitalet Pediatric Recovery Porridge, 1945

By XooCode

The specific nutritional formula from Jane Xoo's 1945 clinical framework for post-war pediatric care. A calorie-dense, vitamin-fortified porridge designed to re

4.8(2)15 min385 kcal

Minimal valid version

The smallest markup that still produces a valid Recipe entity. Use it as the floor. Reach for the advanced example above when you want search engines and AI agents to understand more about your content.

schema.org/Recipe (minimal)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Recipe",
  "name": "Rigshospitalet Pediatric Recovery Porridge",
  "image": "https://roydanmedjournal.dk/images/1945/recovery-porridge-16x9.jpg",
  "author": {
    "@type": "Person",
    "name": "Jane Xoo"
  },
  "datePublished": "1945-11-15",
  "recipeIngredient": [
    "60 g rolled oats",
    "250 ml whole milk"
  ],
  "recipeInstructions": [
    {
      "@type": "HowToStep",
      "text": "Combine oats and milk in a saucepan and simmer until soft."
    }
  ]
}
</script>

Google rich results this unlocks

Markup matching this example makes your page eligible for the following Google Search rich results. The primary target drives the required / recommended property classification in the advanced code block above.

Common Recipe mistakes

Mistakes that pass validation but silently fail to earn rich results or mislead consumers walking the graph. Avoid these and your markup will be ahead of most sites in the wild.

  1. 01

    Duration as a plain string instead of ISO 8601

    Wrong
    "cookTime": "15 minutes"
    "prepTime": "5 mins"
    "totalTime": "20 min"
    Right
    "cookTime": "PT15M"
    "prepTime": "PT5M"
    "totalTime": "PT20M"

    cookTime, prepTime, and totalTime must use the ISO 8601 duration format: PT (period time), then integer+unit pairs (H hours, M minutes, S seconds). Google strictly requires this format for the cook-time filter in the Recipe rich result and will silently drop your recipe from the carousel otherwise. This is the single most-failed format conversion in schema.org authoring. Examples: PT15M = 15 minutes, PT1H = 1 hour, PT1H30M = 1 hour 30 minutes, PT2H = 2 hours.

  2. 02

    recipeYield as a casual string

    Wrong
    "recipeYield": "serves 4"
    Right
    "recipeYield": {
      "@type": "QuantitativeValue",
      "value": "4",
      "unitText": "servings"
    }

    A casual string like 'serves 4' is tolerated and will validate, but the structured QuantitativeValue form lets Google and other consumers extract the exact count and unit. It enables features like ingredient scaling ('double this recipe'), calorie-per-serving math, and serving-size filters. Google's Recipe rich result uses the structured form for its 'Servings: 4' label. Always prefer the structured form unless you have a compelling reason not to.

  3. 03

    recipeInstructions as a single blob of text

    Wrong
    "recipeInstructions": "Combine oats with milk. Simmer for 10 minutes. Add cream and honey. Remove from heat and stir in cod liver oil. Serve warm."
    Right
    "recipeInstructions": [
      { "@type": "HowToStep", "position": 1, "text": "Combine oats with milk." },
      { "@type": "HowToStep", "position": 2, "text": "Simmer for 10 minutes, stirring continuously." },
      { "@type": "HowToStep", "position": 3, "text": "Reduce heat and add cream + honey." },
      { "@type": "HowToStep", "position": 4, "text": "Remove from heat and stir in cod liver oil." },
      { "@type": "HowToStep", "position": 5, "text": "Serve warm." }
    ]

    A single long string validates but loses the step-by-step rich result, the numbered-steps card layout Google shows inside the Recipe carousel. Use HowToStep array form to get each step rendered as a separate numbered row. Optional per-step: position (explicit ordering), name (short label for the step), url (deep link to that step on your page), image (per-step illustration).

  4. 04

    Missing nutritionInformation.calories

    Wrong
    "nutrition": {
      "@type": "NutritionInformation",
      "proteinContent": "12 g",
      "fatContent": "16 g"
    }
    Right
    "nutrition": {
      "@type": "NutritionInformation",
      "servingSize": "1 portion (approximately 310 g)",
      "calories": "385 kcal",
      "proteinContent": "12 g",
      "fatContent": "16 g",
      "carbohydrateContent": "52 g",
      "sodiumContent": "180 mg"
    }

    Google's nutrition facet of the Recipe rich result won't render without calories, and users filtering by low-calorie or low-sodium will miss your recipe. Always include at least calories, servingSize, and one or two macro breakdowns (protein, fat, carbohydrate). schema.org specifies all content values as strings with a unit suffix: '385 kcal' not 385, '12 g' not 12.

Compare your markup against this exampleruns in your browser
Private. Runs entirely in your browser.

Comments

Loading comments...

Leave a comment