Structured data is the part of a page that tells a search engine what it is about: a product with a price, an article with an author and a date, a business with an address, an event with a start. Google reads it as JSON-LD, a block of JSON in a script tag, and uses it for rich results. Writing it by hand is easy to get wrong, because a single wrong name, a price with a currency symbol in it, or a date in the wrong form can make a parser ignore it, and nothing on the page shows that anything is wrong.
This page is a form for the types that Google shows. Choose the type, fill in what you know, and the JSON-LD is written as you type, with the right nesting and the right kind of value for each property. It is checked at once with the same checks as the JSON-LD validator on this site, and it shows what Google still needs for that kind of result. Everything is done in your browser, and the code behind the page makes no network requests, so a product that is not launched yet stays private.
How to use the Schema Generator: JSON-LD for Rich Results, Checked
- Choose what the page is aboutPick the type that fits the page: an article, a product, a business, a recipe, an event, a job, a video, or the breadcrumbs of the page. Some types have kinds, such as a news article or a restaurant, and you choose the kind from a list.
- Fill in the fieldsStart with the fields that are marked Google requires, and then the ones marked Google recommends. Give web addresses in full, with https:// and the host, dates in ISO 8601, prices as plain numbers, and times in minutes. Leave out what you do not know, because a field that is empty is not written.
- Read the checksUnder the markup you see whether it is valid schema.org, and a list of what Google requires for that type and is still missing. The markup is a copy of what the page shows, so it should only say what a visitor can see on the page.
- Copy it into the pageCopy the script tag and put it in the head or the body of the page. Then test the page with Google's Rich Results Test, which reads the live page, and with the JSON-LD validator on this site, which reads text that is not published yet.
What JSON-LD is, and why Google asks for it
JSON-LD stands for JSON for Linked Data. A block has a context, which says which vocabulary the names come from, a type, and properties. For structured data the context is schema.org. Google says that it recommends JSON-LD, and that it is the easiest format to maintain at scale, because it is one block that is separate from the page's markup, and not attributes spread through the HTML. The block can be in the head or in the body.
The block describes the page, and it has to agree with the page. Google's guidelines say that the markup must represent the main content that a visitor sees, and not describe something that is hidden. A product that is out of stock on the page cannot be in stock in the markup, and a rating that nobody can see on the page should not be in it. This page cannot check what is on your page. It can only make sure that what you give is written correctly.
What each form writes
The article form writes Article, NewsArticle, or BlogPosting, with the headline, the image, the dates, the author, and the publisher. Google has no required properties for articles, and asks you to add the ones that apply. The product form writes a Product with an offer, with the price as a number and the currency in its own field, a rating if you give one, and the availability from a list of the values that schema.org defines. Google needs a name and at least one of an offer with a price, a rating, or a review.
The local business form writes a LocalBusiness or a more specific kind such as a Restaurant or a Dentist, with the address as a PostalAddress and the position as coordinates. The organization form writes the name, the logo, and the profiles on other sites as a list. The breadcrumb form writes the path to the page as numbered steps. The recipe form writes times as ISO 8601 durations from minutes, works out the total time if you give the other two, and writes the steps as HowToStep objects. The event form writes the place as a Place with an address, and the offer. The job form writes the hiring organization, the location, and the salary as an amount with a unit. The video form writes the thumbnail, the dates, and the length.
Values that have to be in the right form
A price is a number, 29.99, and not $29.99, and the currency goes in its own field as a three letter code. A date is written as ISO 8601: 2026-10-04, or with a time and a zone, 2026-10-04T09:30:00+02:00. A time that lasts is a duration, such as PT1H30M for an hour and a half, and the form asks for minutes and writes the duration. A web address has to be absolute. A rating is a number. Availability is one of the values of schema.org, written as an address, such as https://schema.org/InStock. The form writes numbers as numbers, and when a field that should be a number is not one, it tells you and leaves it out, and does not write something that a parser will ignore.
Lists are lists. The ingredients of a recipe, the profiles of an organization, and the opening hours of a business are written as arrays, one item to a line. The questions of an FAQ are written as Question objects with an accepted Answer. Objects that belong to a property have their type: an offer is an Offer, an author is a Person, an address is a PostalAddress. The form knows these for each field, so you only type the values.
FAQ markup, and what Google still shows
Google no longer shows FAQ rich results in Search, and has removed the documentation for the feature. FAQ markup is still valid schema.org, it does no harm, and other systems may read it, so the form is here, and it says so. The same is true of how-to markup. The other types in the form are ones that Google documents for rich results at the time of writing, and the lists of required and recommended properties were read from Google's pages for each of them.
A rich result is never promised. Google decides whether to show one, and it can change its rules. Valid markup is the part that you control. It is the condition and not a guarantee.
Safe text
The markup is text inside a script tag, so text that you type can break it. A quote has to be escaped inside a string, a backslash has to be doubled, and the characters that end a script, a less than sign followed by a slash and the word script, would end it early and let what follows run as part of the page. The page writes every less than sign inside the JSON as \u003c, which is valid JSON and reads back as the same character, so nothing can end the script. Line breaks, quotes, backslashes, accents, Chinese text, and emoji are written as JSON requires and read back unchanged.
How it was tested
Each of the ten forms was filled in with every field, and the markup was read by the JSON-LD validator on this site, which checks every type, property, and value against the full schema.org vocabulary and holds Google's lists. There was no error and no warning for any of them, and nothing that Google requires was missing. The fields that are marked as required are exactly enough: when only they are filled in nothing is missing, and when a whole part such as the address is left out, the validator says that something is.
600 random fillings of the forms, with text that is hard to write safely, were valid JSON with no error. 300 of the script tags were read by html5lib, a parser that follows the HTML standard, and the text of the script was read by Python's json module. The data was the same in all 300, there was exactly one script, and nothing was left over in the body. The markup was not tested with Google's Rich Results Test, which needs a live page, so check the finished page with it.
Limits and accuracy
- The page writes and checks markup. It cannot see your page, so it cannot tell you whether the markup matches what a visitor sees, which Google requires.
- Valid is not the same as eligible. Google decides whether to show a rich result, and it can change its rules. The lists of what Google asks for were read from its pages on 4 October 2026.
- Ten types are here, which are the ones that Google documents for rich results, and FAQ. Schema.org has hundreds more, and the JSON-LD validator on this site checks markup for any of them.
- Some types have more properties than the form has. A product with several offers, a recipe with a video, or an event with several performers needs more than one form can write, and the output can be extended by hand and checked with the validator.
- The opening hours of a business are written in the short text form of schema.org, such as Mo-Fr 09:00-17:00, and not as the longer structure that Google also reads.
- Nothing you type is saved, so copy the markup before you close the page.
Frequently asked questions
How do I create schema markup?
Choose the type that fits your page, fill in the fields, starting with the ones marked as required by Google, and copy the JSON-LD script tag into the head or body of the page. The markup is checked as you type, and the page lists what Google still needs.
Is JSON-LD better than microdata?
Google recommends JSON-LD, because it is one block that is separate from the HTML of the page, and easier to write and keep right. Google reads microdata and RDFa too. This page writes JSON-LD only.
Where do I put the script?
In the head or the body of the page. Google reads it in either place. A page can have more than one block, for example one for the product and one for the breadcrumbs.
Will the markup give me a rich result?
Not by itself. Google decides whether to show a rich result, and the markup has to be valid, to follow its guidelines, and to match what is on the page. The page shows what Google requires and what is missing, and cannot promise a result.
Does Google still show FAQ results?
No. Google no longer shows FAQ rich results in Search and has removed the documentation. FAQ markup is still valid schema.org, and the page says so when you choose it.
Why is the price written as a number?
Because a parser expects a number there, and a price written as $29.99 is not one. The currency goes in its own field as a three letter code, such as USD.
Can I add markup that is not on the page?
No. Google's guidelines say that the markup has to describe content that visitors can see on the page. Markup for something that is hidden or not there can lead to a manual action.
Is what I type uploaded?
No. The markup is written and checked in your browser, and the code behind the page makes no network requests. Nothing is saved.
Research and references
This page was written and checked against the sources below.
- Google Search Central: Introduction to structured data markup
- Google Search Central: General structured data guidelines
- Google Search Central: Product snippet structured data
- Google Search Central: Search gallery of structured data features
- schema.org: the vocabulary, with every type and property
- W3C: JSON-LD 1.1

