CMS for a Recipe Website: Win the Rich Card 2026
A recipe website has the strictest structured-data demands of almost any content site. Google's recipe rich results — the card with the photo, star rating, cook time, and calories right in search — only show up if your recipes emit correct Recipe JSON-LD schema. Miss it and you're invisible in the one place recipe searchers look. So the CMS question for a food blog isn't "can it publish posts" — every CMS can. It's "can it store ingredients, steps, times, and yield as real fields and mark them up so Google shows the rich card."
The short answer: a recipe website CMS needs structured recipe fields (ingredients, steps, prep/cook time, yield) and Recipe schema for rich results — plus fast, image-friendly publishing. UnfoldCMS fits when you want to self-host a food blog with proper recipe structured data and a modern editor, without wrestling a pile of WordPress plugins.
What does a recipe website need from a CMS?
A recipe CMS needs to store the structured parts of a recipe — ingredient list, numbered steps, prep time, cook time, servings, and rating — as data, not just prose, then emit Recipe JSON-LD schema so Google can show the rich card. It also needs good image handling (food is visual) and solid SEO, because recipe search is dominated by rich results.
The reader wants two views of the same recipe: the story and photos up top (the personal, SEO-friendly narrative), and the actual recipe card — ingredients and steps — that they cook from. Behind both sits the structured data Google reads. A CMS that lets you keep that recipe data as fields, render a clean card, and mark it up correctly is doing the real work of a food-blog platform.
How do you store a recipe in UnfoldCMS?
You keep the narrative in the post body and the structured recipe in the schemaless extra_attributes JSON field — ingredients, steps, times, yield, and rating — so your theme can render a proper recipe card and feed the schema from the same data.
A recipe entry holds its structured fields cleanly:
{
"prep_time": "PT15M",
"cook_time": "PT30M",
"yield": "4 servings",
"ingredients": ["2 cups flour", "1 tsp salt", "3 eggs"],
"steps": ["Mix dry", "Add eggs", "Bake 30 min"],
"rating": 4.7
}
Note the ISO 8601 durations (PT15M) — that's the format Recipe schema expects, so storing them this way means the card and the JSON-LD line up with no reformatting. Because extra_attributes is schemaless, you add "calories" or "cuisine" later with no database migration. Render the recipe card once in your Blade theme, and every recipe uses it. Categories group recipes by course ("Desserts", "Dinner") or cuisine, and DB-backed search finds a recipe by name or ingredient. This structured approach also future-proofs the site: when you later want a "30-minute meals" collection or a "vegan" filter, the data to build it is already sitting in fields rather than trapped in prose you'd have to re-tag by hand.
Can you get the recipe rich card in Google?
Yes — this is the whole point, and it depends entirely on emitting correct Recipe schema. You take the structured fields you stored (ingredients, steps, times, yield, rating) and output them as Recipe JSON-LD through UnfoldCMS's @jsonld() directive. That makes your page eligible for the recipe rich result with the photo, stars, and cook time.
UnfoldCMS ships the schema plumbing — the @jsonld() Blade directive and helper functions, with support for custom schema arrays — so building a full Recipe schema object from your fields is a theme task, not a plugin dependency. The requirements Google checks are concrete: a recipe name, an image, and ideally recipeIngredient, recipeInstructions, prepTime, cookTime, recipeYield, and aggregateRating. Store all of those as fields and your markup is complete. As always, rich results are eligibility, not a promise — but a fully marked-up recipe with a good image is exactly what qualifies.
Recipe website CMS options compared
| Factor | UnfoldCMS | WordPress + recipe plugin | Static site + markdown |
|---|---|---|---|
| Structured recipe fields | extra_attributes JSON |
Plugin (WP Recipe Maker etc.) | Front-matter |
Recipe schema |
@jsonld() directive |
Plugin-generated | You build it |
| Recipe card rendering | Theme + fields | Plugin templates | Components |
| Image handling | Spatie Media (WebP) | Media library | Build pipeline |
| Non-technical editing | shadcn admin | Gutenberg + plugin | Needs Git/dev |
| Self-hosted / owned | Yes | Yes | Yes |
WordPress recipe plugins (WP Recipe Maker, Tasty Recipes) are the default for a reason: they hand you a recipe card and schema out of the box. UnfoldCMS trades that plug-and-play convenience for a leaner, owned site where you wire the card once in your theme — no plugin bloat, smaller security surface, modern admin.
How does image handling work for a food blog?
Food blogs are photo-heavy, and UnfoldCMS handles images through Spatie Media Library with automatic WebP conversions. Each featured image generates thumbnail (300×200), medium (600×400), and large (1200×800) WebP versions, so pages stay fast even when they're image-rich — and speed is a ranking factor Google checks for recipe results.
The featured image is what shows in the recipe rich card, so it matters doubly. You can also pull images straight from Unsplash inside the editor (the /admin/unsplash/* integration ships in Core) when you need a stock shot. For your own food photography, upload it and let the automatic WebP conversions keep the page light. One thing to know: in-content images beyond the featured image are added in the body; the automatic conversion pipeline targets the featured-image collection.
FAQ
Can I build a recipe website with UnfoldCMS?
Yes. Store the recipe's structured parts (ingredients, steps, prep/cook time, yield, rating) in a schemaless field, render a recipe card in your theme, and emit Recipe JSON-LD schema for Google's recipe rich results. It's self-hosted with automatic WebP image conversions — a solid fit for an owned, SEO-driven food blog.
How do I get the recipe rich card in Google?
Store the recipe fields and emit Recipe JSON-LD schema via the @jsonld() directive, including name, image, ingredients, instructions, times, yield, and rating. That makes the page eligible for the rich card with photo, stars, and cook time. Use ISO 8601 durations (like PT30M) so the times validate. Eligibility isn't guaranteed, but complete markup is how you qualify.
Where do I store ingredients and steps?
In the extra_attributes JSON field on the post, separate from the narrative body. Keep ingredients and steps as arrays, times as ISO 8601 strings, and yield/rating as values. Your theme renders them as a recipe card and feeds the same data into the schema, so the card and the markup never drift.
Is it better than a WordPress recipe plugin? It depends. WordPress recipe plugins give you a card and schema instantly. UnfoldCMS gives you structured fields, schema tooling, a modern admin, WebP images, a smaller security surface, and full ownership — but you build the recipe card in your theme once. If you want zero-setup widgets, weigh the plugin; if you want a lean owned site, UnfoldCMS works well.
How are food photos handled? Through Spatie Media Library with automatic WebP conversions (thumbnail, medium, large) on the featured image, keeping image-heavy pages fast. The featured image is what appears in the recipe rich card. You can also pull stock photos from the built-in Unsplash integration in the editor, or upload your own food photography.
Can readers rate or comment on recipes? Comments ship in Core, threaded up to three levels, so readers can leave feedback and tips. For the aggregate rating shown in the rich card, you store and manage the rating as a structured field yourself — there's no built-in visitor star-rating widget, so you'd either curate the rating or wire a rating input against the API.
The bottom line
A recipe website is structured data in a pretty wrapper. The right CMS stores ingredients, steps, and times as real fields, renders a clean recipe card, marks it up as Recipe schema for Google's rich results, and keeps image-heavy pages fast. UnfoldCMS does all of that — schemaless recipe fields, built-in schema tooling, automatic WebP images — self-hosted and owned, trading WordPress plugins for a leaner site you control. For a food blog that wants to win the recipe rich card, that's the foundation.
See how it works: live demo · features · docs.
Related: CMS for writers · CMS for a personal website · CMS for a content hub
Free & Open Source
Own your CMS. No subscriptions.
Unfold CMS is free to download and self-host. Built on Laravel + React, full source code included.
Share this post: