JSON-LD Generator and Validator
Build schema.org JSON-LD from a short form, or paste markup you already have, even a whole page's HTML, and check it against rules this page wrote from Google's structured data documentation. Each finding says what was found, why it matters and how to fix it, and the markup comes back as a script element ready to paste. Nothing you type or paste leaves your browser.
Check reads markup you paste. The Build choices show a form for one type instead.
Paste one JSON-LD block, or the HTML source of a whole page: only its script elements of type application/ld+json are read, and nothing in the page runs.
The title of the article.
Full addresses of images that represent the article.
ISO 8601: the date, T, the time and the time zone offset.
The last change, in the same form. Leave it empty if the article never changed.
Person for people, Organization for organizations, for every author below.
The name, then a | and the address of a page about the author.
The question on one line and its answer below it, with an empty line between pairs.
The FAQ Schema Generator's filter: the second choice keeps p, br, a, ul, ol, li, strong and em, this site's own short list.
The name, then a | and the full address. The last line may leave the address out.
The name of the organization, the same as its site name.
Another name it is known by, if any.
The address of its website.
A logo of at least 112 by 112 pixels.
A description of the organization.
A contact email address.
With the country code and area code.
Profiles of the organization on other sites.
The two letter ISO 3166-1 alpha-2 code.
A short name that people know the site by.
Other names, most preferred first, such as an acronym or the domain in lower case.
The canonical home page of the domain or subdomain.
Limits: Up to 1 MB of text in each box. Larger input is refused with a message.
These checks are rules this page wrote from Google's structured data documentation and from schema.org, as read on 22 October 2026. Google's Rich Results Test and the Schema Markup Validator are the authority, so test the published page there as well.
Results
- JSON-LD blocks
- -
- Items with a type
- -
- Types
- -
- Findings
- -
| Level | Where | Finding, why it matters and the fix |
|---|
| Type | Where | Rules |
|---|
JSON-LD
Script element for the page
How to use the JSON-LD Generator and Validator
- Choose Check to read existing markup, or a Build choice for a new Article, NewsArticle, BlogPosting, FAQPage, BreadcrumbList, Organization or WebSite.
- To check, paste JSON-LD or the source of a page, or press Load the example.
- To build, fill in the form; the JSON-LD and the script element change as you type.
- Fix the findings that apply to your page, then test the published page with Google's Rich Results Test.
Worked example
A gardening blog's post page carries two JSON-LD blocks, a BlogPosting and a BreadcrumbList. Press Load the example to check the page: the post has a relative image address, a date with a space where the T belongs, two authors in one name, and no dateModified or author link, while the breadcrumb trail gets only a note about its last item.
<!doctype html>
<html lang="en">
<head>
<title>How to repot a fern</title>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "How to repot a fern",
"image": "/photos/fern.jpg",
"datePublished": "2026-10-21 09:30",
"author": { "@type": "Person", "name": "Willow Lane and Sam Reed" }
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.example.com/" },
{ "@type": "ListItem", "position": 2, "name": "Houseplants" }
]
}
</script>
</head>
<body><h1>How to repot a fern</h1></body>
</html>
- What to do
- Check JSON-LD or a page's HTML
- JSON-LD blocks
- 2
- Items with a type
- 2
- Types
- BlogPosting, BreadcrumbList
- Findings
- 6
How to read the results
- JSON-LD blocks and Items with a type
- How many JSON-LD blocks were read (each script element of a pasted page is one block), and how many items with an @type they hold at the top level, in @graph or nested as items of their own.
- Findings
- The number of findings, which the line above the results counts by level. An error stops the check of a block: the JSON cannot be read, or it describes no object. Required and Recommended name a missing property at the level its source gives. A warning is a value of the wrong shape, and a note says how a value was read or what was not checked.
- Where
- The path to the value inside its block, such as author[0].name or itemListElement[1]. A syntax error gives the line and column in the text you pasted instead.
- JSON-LD and Script element for the page
- The markup written again with two space indents, and the same text inside a script element, ready for the head or body of the page. Each Copy button takes all of it.
- Items and the rules applied
- Every item found, where it sits, and which rules checked it, or a plain statement that no rules here cover its type.
How this tool works and its limitations
With Check, text that starts with < is read as HTML by the browser's DOMParser into a document that runs nothing and loads nothing, and the text of each script element of type application/ld+json is taken; any other text is read as one JSON-LD block. Each block is parsed with JSON.parse. When that fails, a small scanner of the JSON grammar finds the first character it cannot accept and gives its line and column in the pasted text. A parsed block is walked item by item: the top level, a list of items, @graph, and covered types nested inside other items, with an @id reference followed for an author. With a Build choice, the form fields are trimmed, empty ones are left out, and the result goes through the same checks. FAQPage answers first pass through the tag filter of the FAQ Schema Generator, plain text unless the answer format says otherwise.
The rules come from Google's Article, breadcrumb, Organization, site name and general guidelines pages and from schema.org's FAQPage, Question and Answer pages, and each finding names its source. Dates are read as ISO 8601 in the form YYYY-MM-DD with an optional T, time and offset, and the findings say how each one was read. Output is written by JSON.stringify with <, >, &, U+2028 and U+2029 escaped, so it parses back to exactly the same value. These limits apply:
- The rules cover Article, NewsArticle, BlogPosting, BreadcrumbList, FAQPage, Organization (with OnlineStore and OnlineBusiness) and WebSite; any other type is listed as not covered, never as wrong.
- The checks read the markup alone. They cannot see whether it matches the visible page, whether an image can be crawled or how large it is, or whether the page is indexed.
- Google's Organization page recommends about twenty properties; only name or alternateName, address or telephone, and url or logo are reported when missing, and the others are checked only when present.
- Microdata and RDFa in pasted HTML are counted and named but not read.
- The form builds the common properties of each type. Anything more, such as a publisher or authors of mixed types, has to be added by hand and checked with Check.
- Items are looked for in the first 32 levels of nesting only. Markup nested deeper is still read, gets a warning, and is written on one line without indents.
- Each box takes up to 1 MB of text, and more is refused with a message. At most 200 findings are listed, the most serious first.
Features
- Syntax errors named by line and column in the pasted text, worded the same in every browser.
- Missing required and recommended properties, each with its source and the level that source gives it.
- Value checks for ISO 8601 dates, full addresses, images, empty values, lists and nested items, including @graph.
- A script element that pasted text cannot break out of, because <, > and & are written as escapes.
What a passing check means, and what it does not
The rules here are this page's reading of Google's pages on Article, breadcrumb, Organization and site name markup. They catch the common slips, but they are not Google's checker; the Rich Results Test and the Schema Markup Validator are. Even markup that passes both is not a promise: Google's general guidelines say it does not guarantee that structured data will show up in search results, and that markup must describe content readers can see on the page.
Required and recommended differ from type to type
Google's Article and Organization pages list no required properties at all. They recommend the ones that apply, such as headline, image, author and the two dates for an article. Breadcrumbs are stricter, with itemListElement, position, name and item all required, except that the last breadcrumb may leave out item. A WebSite block for the site name needs name and url, set to the home page, and it belongs on that home page only. This page reports a missing property at exactly the level its source gives, so a recommended property never shows up as an error.
FAQ markup after Google retired the FAQ rich result
Google's documentation updates page records that the FAQ rich result no longer appears in Google Search starting 7 May 2026, and that its FAQ documentation was removed on 15 June 2026. FAQPage is still a schema.org type, so this page still builds and checks it, but those checks follow schema.org alone: each Question needs a name and an acceptedAnswer with text. Add the markup only if the questions and answers appear on the page itself, and do not expect a search feature from it.
Frequently asked questions
Does valid JSON-LD guarantee a rich result?
No. Google says it does not guarantee that structured data will show up in search results, even when the Rich Results Test finds no problem. Its systems decide for each search, and the markup has to describe what readers can see on the page.
Why does a date without a time zone get a note?
Google's Article documentation asks for ISO 8601 dates and recommends a time zone; without one, Google uses the time zone Googlebot uses, so a morning post can land on the wrong day. Write the offset, such as 2026-10-21T09:30:00+02:00, or Z for UTC.
Should image and url values be full addresses?
Yes. Google's examples write them in full with https://, while a relative path such as /photos/fern.jpg depends on how a reader resolves it. This page warns on relative, protocol relative and non web addresses.
What does not covered mean for a type such as Product or Recipe?
Only that this page has no rules for it. The markup may be perfectly valid, so check those types with the Schema Markup Validator, and with the Rich Results Test for the features Google supports.
Can I paste the HTML of a whole page?
Yes. The browser's DOMParser reads it into a document that never runs a script or loads a file, and only the script elements of type application/ld+json are taken from it. Microdata and RDFa are counted and named but not checked.
Can text in my values break the script element?
Not in the output of this page. It writes <, > and & inside strings as \u003c, \u003e and \u0026, which a JSON-LD reader turns back into the same characters, so a value holding </script> or <!-- cannot end the element or open a comment early.
Last updated .