<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Łatwe Przepisy</title>
    <description>The latest articles on DEV Community by Łatwe Przepisy (@latweprzepisy).</description>
    <link>https://dev.to/latweprzepisy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4122294%2F7e743b4a-9e7f-4677-9484-81daa24d2262.png</url>
      <title>DEV Community: Łatwe Przepisy</title>
      <link>https://dev.to/latweprzepisy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/latweprzepisy"/>
    <language>en</language>
    <item>
      <title>Recipe JSON-LD for small food websites: a practical checklist</title>
      <dc:creator>Łatwe Przepisy</dc:creator>
      <pubDate>Sat, 12 Sep 2026 15:27:16 +0000</pubDate>
      <link>https://dev.to/latweprzepisy/recipe-json-ld-for-small-food-websites-a-practical-checklist-lfm</link>
      <guid>https://dev.to/latweprzepisy/recipe-json-ld-for-small-food-websites-a-practical-checklist-lfm</guid>
      <description>&lt;p&gt;Recipe websites often start with a simple publishing workflow: a title, a photo, ingredients and preparation steps. That is enough for readers, but search engines and recipe tools need a little more structure to understand the page clearly.&lt;/p&gt;

&lt;p&gt;JSON-LD is usually the least intrusive way to add that structure. It sits in the HTML as machine-readable metadata, while the visible recipe can stay clean and useful for people.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a basic recipe object should include
&lt;/h2&gt;

&lt;p&gt;A small food site does not need a complicated schema setup on day one. Start with the fields that are stable and easy to maintain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;recipe name&lt;/li&gt;
&lt;li&gt;short description&lt;/li&gt;
&lt;li&gt;author or publisher&lt;/li&gt;
&lt;li&gt;ingredient list&lt;/li&gt;
&lt;li&gt;preparation time&lt;/li&gt;
&lt;li&gt;cooking time&lt;/li&gt;
&lt;li&gt;serving yield&lt;/li&gt;
&lt;li&gt;image, when the image is original and public&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those fields are enough to describe most everyday recipes without creating a maintenance burden.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the visible recipe and JSON-LD aligned
&lt;/h2&gt;

&lt;p&gt;The structured data should describe what is actually on the page. If the page says the recipe serves four people, the JSON-LD should not say six. If the article lists ten ingredients, the metadata should not include a copied ingredient list from another version of the recipe.&lt;/p&gt;

&lt;p&gt;This sounds obvious, but it is where many small recipe archives become messy over time. The easiest habit is to generate the JSON-LD from the same notes used to prepare the visible recipe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"application/ld+json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Recipe&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Simple yogurt cake&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A quick everyday cake with yogurt and apples.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;recipeYield&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;6 servings&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;prepTime&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PT15M&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cookTime&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PT40M&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;recipeIngredient&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2 cups flour&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2 eggs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1 cup yogurt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2 apples&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;author&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Organization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Recipe publisher&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  A small workflow that prevents errors
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Draft the human-readable recipe first.&lt;/li&gt;
&lt;li&gt;Normalize serving size and ingredient quantities.&lt;/li&gt;
&lt;li&gt;Add preparation and cooking time in minutes.&lt;/li&gt;
&lt;li&gt;Generate the JSON-LD.&lt;/li&gt;
&lt;li&gt;Check that the metadata and page content still match after editing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For Polish recipe publishers, the same workflow works well for everyday cooking categories such as dinners, desserts and chicken recipes. I keep a simple recipe site at &lt;a href="https://latwe-przepisy.pl/" rel="noopener noreferrer"&gt;Łatwe Przepisy&lt;/a&gt; and use this kind of checklist when thinking about clean recipe pages and category hubs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;p&gt;Do not mark up a category page as a single recipe. A dessert category, for example, is usually a collection page, not one recipe.&lt;/p&gt;

&lt;p&gt;Do not add fake ratings or review counts. If users have not left visible reviews, the structured data should not claim that they have.&lt;/p&gt;

&lt;p&gt;Do not copy JSON-LD from another recipe and forget to change the ingredients, time or yield. That creates confusing signals and makes future cleanup painful.&lt;/p&gt;

&lt;h2&gt;
  
  
  A tiny helper approach
&lt;/h2&gt;

&lt;p&gt;For small teams, even a plain static tool can be enough: input the title, servings, times and ingredients, then copy the JSON-LD snippet into the publishing workflow. The useful part is not the tool itself, but the repeatable habit it creates.&lt;/p&gt;

&lt;p&gt;Structured data works best when it reflects a real editorial process. Keep the recipe useful for people first, then make it easier for machines to understand.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>recipes</category>
    </item>
  </channel>
</rss>
