Skip to content
AgileLogics

Schema Markup Generator

Checks pasted JSON-LD structured data (single objects, arrays, or @graph) against Google's required and recommended properties for its @type (Article, Product, Organization, Event, and more).

How it works

Paste JSON-LD and click Validate.

What does this schema markup tool check?

This tool is a JSON-LD checker, not a form-based generator. You paste a block of schema.org structured data and it tells you whether the JSON parses, whether @context and @type are set, and which of Google's required and recommended properties are present for ten common types. It's a fast first pass before Google's own testing tools.

Google recommends JSON-LD as the format for structured data where your setup allows it (introduction to structured data), and that's the only format this tool reads. Microdata and RDFa inside HTML aren't parsed.

The checks, in the order they run

  1. Parse. The text must be valid JSON. If not, you see Enter valid JSON-LD. with no further detail, so a trailing comma or a single-quoted string is enough to fail. The JSON validator will point to the exact position.
  2. Split into items. A single object is one item. A top-level array is checked element by element, and an object with an @graph array is checked node by node.
  3. Context. @context must mention schema.org. Plain strings (https://schema.org or http://schema.org), object contexts such as {"@vocab": "https://schema.org/"} and array contexts all pass. Nodes inside @graph inherit the outer context.
  4. Type. Each item needs an @type, otherwise you get Missing "@type". A type array like ["Product", "Thing"] is matched against the first type that has a checklist.
  5. Checklist. For the ten types below, the tool lists missing required properties, then missing recommended ones. A property counts as missing when it's absent, null, an empty string or an empty array. Other types stop after step 4 with a note that only @context and @type were checked.

With one item the output is just that item's report. With several, each report starts with a label such as Item 2 of 3, and an item that fails the context or type check gets a one-line message instead of stopping the whole run.

The checklist and where it comes from

Every list follows the feature pages in Google Search Central's structured data gallery. The recommended column is a short selection of the top-level properties Google recommends; each linked page has the full list.

@type Required by Google Recommended (checked)
Article, NewsArticle, BlogPosting None (Article) headline, image, author, datePublished, dateModified
Product name, plus one of offers, review or aggregateRating (product snippets) None checked
Organization None (Organization) name, url, logo
LocalBusiness name, address (local business) url, telephone, geo, openingHoursSpecification
Person name, or alternateName in its place (profile page) None checked
Event name, startDate, location (Event) description, endDate, eventStatus, image, offers, organizer, performer
Recipe name, image (Recipe) author, datePublished, description, recipeIngredient, recipeInstructions, totalTime, recipeYield
FAQPage mainEntity (rich result discontinued in 2026, see Search Central updates) None checked

Google's Person requirements come from the profile page feature, where a Person is the page's main entity; there's no standalone Person rich result. For types with no required properties, the tool says so (Required properties: none) and reports only the recommended list.

Example: an event with no venue

Pasting this:

{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "Lisbon JS Meetup",
  "startDate": "2026-11-19T18:30:00+00:00"
}

returns:

Type: Event
Missing required properties: location.
Missing recommended properties: description, endDate, eventStatus, image, offers, organizer, performer.

Add a location object with "@type": "Place", a venue name and a PostalAddress, and the second line changes to Required properties: all present (name, startDate, location). The recommended line stays until you add those properties too; they improve the result but don't decide eligibility.

Example: an @graph with two nodes

Many CMS plugins emit one script with an @graph. For a graph holding an Organization with name, url and logo, and a Product with only a name and description, the output is:

Item 1 of 2
Type: Organization
Required properties: none (Google lists no required properties for Organization).
Recommended properties: all present (name, url, logo).

Item 2 of 2
Type: Product
Missing required properties: one of offers/review/aggregateRating.

What it can't tell you

Presence is all it tests. A datePublished of "not a date" passes, and an empty author object passes. Nested objects aren't inspected, so it won't notice that your Event's location has no address, and it doesn't follow @id references between graph nodes. Subtypes such as Restaurant or Store aren't mapped to the LocalBusiness checklist, so give them a type array like ["Restaurant", "LocalBusiness"] if you want them checked here.

It also can't see your page. Google's structured data guidelines say not to mark up content that isn't visible to readers, and that Google does not guarantee structured data will appear in results. Only a human comparing markup to the page catches a review score or price the page doesn't show.

Where to go after a pass

Use Google's Rich Results Test to see which Google features the markup qualifies for, and the Schema Markup Validator to check it against the full schema.org vocabulary. To tidy a long block before pasting, run it through the JSON formatter or edit it in the online JSON editor. Structured data works alongside, not instead of, the basic title and description tags from the meta tag generator.

Everything runs in your browser; the JSON you paste isn't uploaded.

Last updated

Frequently asked questions

Does this generate schema markup from a form?
No. Despite the name, it checks JSON-LD you paste in. It confirms the JSON parses, that @context points at schema.org, that @type is present, and, for ten common types, which of Google's required and recommended properties are there. Write the markup yourself or export it from your CMS, then check it here.
If every required property is present, will I get a rich result?
Not necessarily. The tool only checks that top-level properties exist; it doesn't validate their values or nested objects. Google also says it doesn't guarantee that structured data will appear in results. Run the final markup through Google's Rich Results Test before relying on it.
Why does it say my Product is missing offers, review or aggregateRating?
Google's product snippet documentation requires name plus at least one of review, aggregateRating or offers, and that's what the tool checks. Description isn't required by Google, so a Product without one still passes the required check.
Can it check @graph blocks or several items at once?
Yes. A document whose @graph holds several nodes, or a top-level array of JSON-LD objects, is checked item by item, and the output labels each one as Item 1 of N and so on. Nodes inside @graph share the outer @context; items in a top-level array each need their own.
Is FAQPage markup still worth adding?
Not for Google rich results. Google's Search Central changelog records that FAQ rich results stopped appearing in Google Search in May 2026, and the tool adds a note saying so. FAQPage is still a valid schema.org type, and the tool still checks that mainEntity is present.