Schema Generator

Loading tool…

About Schema Generator

Choose a schema type. The form resets so values cannot leak between types. Fill required fields (marked *). Copy JSON or the wrapping script tag. Empty optionals are omitted. Changing type clears the form on purpose: carrying a headline into LocalBusiness would emit invalid JSON-LD.

This is structure, not a Google rich-result guarantee. Product offers always emit availability InStock in this generator. Paste the script on the page, then check it in Google's Rich Results Test and in Schema Validator on the live URL.

When to use it

Use it when you need a first JSON-LD script for a new Article, FAQ, Product, or LocalBusiness and the CMS has no type picker. Fill required fields marked *, then paste the script.

Do not use it as a live checker. Schema Validator reads the public URL after you deploy. Switching type clears the form on purpose.

How to use Schema Generator

  1. 1Choose a schema type. The form resets so leftover fields from the previous type are not emitted.
  2. 2Fill required fields. Pipe lines are question | answer, step name | text, or crumb name | url.
  3. 3Copy JSON or Script. Use JSON alone or the wrapping script tag.
  4. 4Paste on the page, then validate. Use Schema Validator on the live URL and Google's Rich Results Test.

Types and field format

Types: Article, Blog posting, News article, FAQ page, How to, Local business, Organization, Person, Product, Recipe, Event, Breadcrumb list, and Web site. FAQ, HowTo, and breadcrumbs use one pair per line, split on the first | (question | answer, step name | text, crumb name | url). Recipe times accept PT25M, 25m, or 25 and become ISO 8601 durations.

URLs and dates are checked for shape. Skipped pipe lines (missing the |) become warnings. Incomplete required fields show Incomplete instead of Ready. There is no live page fetch in this generator.

How to read the results

The chip is Ready or Incomplete. Incomplete lists the missing required names. Copy toggles are JSON (raw object) and Script (script type=application/ld+json wrapper). Empty optionals never appear in the object.

A fresh Article with no headline is Incomplete. Product always writes offer availability as https://schema.org/InStock until you edit the JSON. Pipe rows missing | show as warnings and are skipped.

Why this matters

Carrying an Article headline into a LocalBusiness object emits properties that type does not use, which is invalid JSON-LD. The reset on type change exists so that leak cannot happen.

Hardcoded InStock on Product is a starting value, not inventory. Leaving it when the SKU is gone is a structured lie. Rich Results Test still decides eligibility after you host the script.

Limits and privacy

Type, fields, and the JSON preview never leave this browser. There is no fetch and no hourly cap. Copy does not publish the script. No login.

Common mistakes

Copying Incomplete JSON and shipping it. Fill every * field until Ready.

Forgetting to change InStock on an out-of-stock Product.

Treating Copy as publish. The script sits in this browser until you paste it into the template and deploy.

FAQs

Does this guarantee rich results?
No. Eligibility has extra rules. Use this output as a starting point and test it.
Why did switching types clear my fields?
Each type has a different property set. Carrying headline into LocalBusiness produces invalid JSON-LD.
How do FAQ, HowTo, and breadcrumbs work?
One pair per line, split on the first |. Example: What is JSON-LD? | A way to embed structured data.
How are recipe times written?
Output is ISO 8601 duration. PT25M, 25m, or 25 all become PT25M.
Why is Product always InStock?
This generator hardcodes offer availability to https://schema.org/InStock. Change that in the JSON if the product is not in stock.
What does Incomplete mean?
A required field marked * is empty. The chip lists those names. Ready means required fields have values and the object can be copied. Warnings on skipped pipe lines do not block Ready by themselves.
What is the difference between JSON and Script?
JSON is the object only. Script wraps it in script type=application/ld+json for the document head. Empty optionals are omitted from both. Changing type clears the form so leftover keys cannot leak.
Can I validate the preview without a URL?
Not here. There is no live fetch. Paste the script on a public page, then open Schema Validator and Google's Rich Results Test. This page only builds the text.