Cadmeo

JSON-LD Schema Generator

No properties filled yet

Only fill in properties your page actually shows. Schema describing content a visitor cannot see is a manual-action risk.

JSON-LD
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article"
}
</script>

The JSON-LD schema generator builds structured data for six schema.org types (Article, Organization, LocalBusiness, Person, Product and Event) and wraps it in the script tag ready to paste into your page head. Empty fields are omitted from the output rather than written as empty strings.

How it works

JSON-LD describes a page to search engines in a machine-readable form. It sits in a script tag with the type application/ld+json and is not rendered, which is exactly why it needs discipline: nothing stops you describing content that is not on the page.

  • @context is always https://schema.org and identifies the vocabulary.
  • @type names the thing being described and determines which properties are meaningful.
  • Properties left blank are dropped, because an empty value is worse than an absent one. It asserts the field exists and has no content.

The generator covers the core properties of each type rather than every property schema.org defines. That is deliberate: the long tail is rarely read by anything, and a shorter block is easier to keep truthful as a page changes.

Examples

An article

Type

Article

headline

How sorting handles accented characters

author

R. Marchetti

datePublished

2026-09-10

Result

{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "How sorting handles accented characters",
  "author": "R. Marchetti",
  "datePublished": "2026-09-10"
}

The image field was left blank, so it does not appear at all. Dates use ISO 8601, which is the format schema.org expects and the only one parsed unambiguously.

A local business with two fields filled

Type

LocalBusiness

name

Ironwood Supply

telephone

(555) 555-0142

Result

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Ironwood Supply",
  "telephone": "(555) 555-0142"
}

Two of four properties are filled, so the block has two properties. Adding the address fields would make it more useful, but a partial block describing only true things is better than a complete one containing guesses.

Limits worth knowing

Dates must be ISO 8601 to 2026-09-10, or with a time and offset. Formats such as 10/09/2026 are ambiguous between day-first and month-first conventions and will be parsed inconsistently or ignored.

Frequently asked questions

Can I add schema for things that are not visible on the page?

No, and this is the rule that gets sites penalised. Google requires structured data to represent the main content of the page as users see it. Marking up a rating or a price the page does not display is grounds for a manual action, and the ratings properties are the most common offender.

Where should the script tag go?

Either head or body works. The specification and Google both accept both. Head is conventional because it keeps the markup separate from the content it describes. What matters more is that it appears in the server-rendered HTML rather than being injected by JavaScript after load.

Why does the generator not offer aggregateRating or offers?

Because those are the properties most often invented. A rating needs real reviews visible on the page and a price needs a real product, and a form that offers the fields invites filling them in speculatively. Add them by hand when you genuinely have the data.

How do I check the output is valid?

Run it through the Schema Markup Validator at validator.schema.org for structural validity, and Google Rich Results Test for whether it qualifies for a rich result. They answer different questions, and valid markup that earns no rich result is common and fine.