Schema Markup Generator

Build valid JSON-LD structured data for seven schema types, with required fields checked and the output escaped so it cannot break your page.

🌐 Español

Article details

  • Headline is required.
  • Author name is required.
  • Date published is required.
  • Image URL is required.

Generated JSON-LD

🔒 Private by design: everything runs locally in your browser and never uploaded to any server.

A block that describes the page to a machine

Search engines read your page as text and infer what it is. Structured data lets you tell them directly: this is a recipe, this is a product with this price and this rating, this is a set of questions and answers.

The format is JSON-LD, a block of JSON in a script tag. It sits alongside your content rather than being woven into it, which is why it has won: you can add it, review it, and delete it without touching a single line of your markup, and getting it wrong cannot break your layout.

Seven types are covered here, each with its own form. Article, FAQ Page, How-To, Local Business, Product, Breadcrumb and Organization, which between them cover most of what an ordinary site needs.

Generating a block

  1. Pick the schema type you need. The form underneath changes to match it.
  2. Fill in that type’s fields. Required ones are validated, so you are told what is missing rather than handed a block that silently fails.
  3. For the list-based types, add or remove entries as you go. FAQ pairs, how-to steps and breadcrumb segments all work this way.
  4. Watch the Generated JSON-LD panel update as you type.
  5. Click Copy to take the block.
  6. Paste it into a script element with the JSON-LD type, in the head of the page it describes.
  7. Test it with a search engine’s own structured data testing tool before you ship it.

That last step is worth the two minutes. Valid JSON is not the same as valid structured data, and a testing tool checks against the current guidelines rather than against a snapshot of them.

The escaping detail that matters

There is one genuine security consideration in generating JSON-LD, and it is easy to miss.

The block goes inside a script element. A browser’s HTML parser looks for the closing script sequence in the raw text, without understanding that it is inside a JSON string. So a field value containing that sequence, typed by whoever fills in your CMS, ends the script element early and dumps the rest of the JSON into the page as visible text, or worse.

Every less-than character in the output here is written as a Unicode escape instead. JSON parsers treat that as identical to the literal character, so the structured data is unchanged, while the HTML parser never sees a closing tag it could act on.

This is the same escaping this site applies to its own structured data, and it is the sort of thing generated markup should handle for you rather than leaving as a footgun.

Required fields, and why validation is the point

Structured data fails quietly. A block missing a required property is not rejected with an error; it is simply ignored, and the page carries on looking exactly as it did while producing no rich result at all.

That is why each type validates its own required set before the output is considered complete. It converts a silent failure into a visible one at the moment you can still do something about it.

The list-based types are where hand-written markup goes wrong most often. An FAQ page needs each question paired with its answer in the right nested shape, a how-to needs its steps in order, and a breadcrumb needs each segment with its position. Building those from a form removes an entire class of typo.

What structured data will not do for you

Valid markup makes a page eligible for a rich result. It does not cause one.

Search engines decide whether to show a rich result based on the page’s quality, its relevance to the query, and their own current preferences about which types to display. Types that produced rich results two years ago sometimes do not today.

The other rule worth internalising is that the markup must describe what is actually on the page. FAQ markup for questions that appear nowhere, a rating nobody left, or a price different from the one displayed, are all guidelines violations, and the penalty is losing rich results across the site rather than just on that page.

The rest of the on-page set

Meta Tags Generator produces the title, description and social preview tags, which is the other block of markup every page needs. SEO Title & Description Pixel Counter then checks the two that get truncated in a search result.

Robots.txt Generator covers what crawlers are allowed to fetch in the first place, and UTM Builder handles the campaign parameters on the links pointing back to the page. The rest is on the dev tools hub.

See it in action

Screenshot of the Schema Markup Generator tool with a schema type chosen from Article, FAQ Page, How-To, Local Business, Product, Breadcrumb or Organization, which swaps in the fields that type needs and builds the JSON-LD from them
Schema Markup Generator mid-process: a schema type chosen from Article, FAQ Page, How-To, Local Business, Product, Breadcrumb or Organization, which swaps in the fields that type needs and builds the JSON-LD from them.
Diagram: where the work happens on a SysFenix page that has no file input at all: the tool arrives as ordinary JavaScript inside the page, works the answer out on your own device and renders it in place, so the upload, queue and server-side record a typical online tool needs never happen
Where the work happens on a SysFenix page that has no file input at all: the tool arrives as ordinary JavaScript inside the page, works the answer out on your own device and renders it in place, so the upload, queue and server-side record a typical online tool needs never happen.

Frequently asked questions

Which schema types are covered?

Seven. Article, FAQ Page, How-To, Local Business, Product, Breadcrumb and Organization. Each has its own set of fields, and three of them, the FAQ pairs, the how-to steps and the breadcrumb segments, take a list you can add to and remove from rather than a fixed number of boxes.

Why JSON-LD rather than microdata?

Because it is a separate block rather than attributes woven through your markup, which makes it far easier to add, review and remove without touching the page's HTML. It is also the format Google explicitly recommends. Practically, a self-contained block you can paste into the head of a template is much harder to break than markup interleaved with your content.

What happens to a closing script tag typed into a field?

Every less-than character in the output is written as a Unicode escape, so a literal closing script sequence inside a value can never end the surrounding script element early. That is a real security consideration rather than a stylistic one, and it is the same escaping this site applies to its own structured data.

Does it tell me when a required field is missing?

Yes, each type validates its own required fields and tells you what is missing rather than emitting a block that will silently fail in a testing tool. That is where most hand-written structured data goes wrong, since a missing required property produces markup that looks fine and is simply ignored.

Does having valid markup guarantee a rich result?

No, and anyone claiming otherwise is selling something. Valid structured data makes a page eligible for a rich result. Whether one appears is a separate decision made by the search engine based on the page's quality, its content and the type of query. Marking up a thin page does not make it eligible for attention it has not earned.

Where do I put the generated block?

Inside a script element with the JSON-LD type, anywhere in the head or the body. The head is the usual choice. One block per page per type is normal; several blocks are allowed if a page genuinely is more than one thing, such as an article that also carries an FAQ section.

Should the markup describe things that are not on the page?

No. Structured data is supposed to describe the visible content of the page it sits on. FAQ markup for questions that do not appear, or a product price different from the one shown, is a guidelines violation and a good way to lose rich results entirely. Fill in what the page actually says.

Related tools