Schema Markup Generator

Paste this into your page

What structured data is for

Schema markup describes a page in a form machines can read without guessing — this is a recipe, that is a price, these are the opening hours. Search engines use it to build richer results, and AI answer engines increasingly read it to decide what a page is actually about.

The rule that matters most

Mark up only what a visitor can see on the page. Schema describing invisible content is against Google's guidelines and risks a manual penalty. If you add FAQ markup, the questions and answers must be on the page in readable form.

Which type to use

  • FAQ — a page answering several distinct questions.
  • Local Business — a shop, clinic or office with an address and opening hours.
  • Article — news and blog posts, with author and dates.
  • Product — an item with a price and availability.
  • Breadcrumbs — the path to this page, shown under the result.
  • Organisation — your site's identity, usually on the home page only.
close the block early and break the page. < is a valid JSON escape that parses straight back to "<", so the data survives and the markup stays intact. */ var safe = json.replace(/'; /* Re-parse what we just produced. If the tool ever emits something broken this says so, rather than handing over markup that fails silently. */ var ok = true; try { JSON.parse(json); } catch (e) { ok = false; } st.className = 'stat-line ' + (ok ? 'ok' : 'bad'); st.innerHTML = ok ? ' Valid JSON-LD. ' + (r.note || '') : ' The generated JSON did not parse — please report this.'; } document.getElementById('types').addEventListener('click', function (e) { var b = e.target.closest('button[data-t]'); if (b) { mount(b.dataset.t); } }); $('forms').addEventListener('input', build); $('forms').addEventListener('change', build); $('forms').addEventListener('click', function (e) { var d = e.target.closest('button[data-del]'); if (d) { d.closest('.pair').remove(); build(); } }); $('btnCopy').addEventListener('click', function () { if (!$('out').value) { return; } var b = this, old = b.innerHTML; navigator.clipboard.writeText($('out').value).then(function () { b.innerHTML = ' Copied'; setTimeout(function () { b.innerHTML = old; }, 1400); }).catch(function () {}); }); $('btnTest').addEventListener('click', function () { window.open('https://search.google.com/test/rich-results', '_blank', 'noopener'); }); mount('faq'); })();

Share this tool with friends

Free to use, no sign-up, works on any phone.

Frequently Asked Questions

Where does the code go?

Anywhere inside the head or body, as a script tag with type application/ld+json. JSON-LD is not read as page content, so its position does not matter — most people put it in the head.

Will this get me rich results in Google?

It makes you eligible, not guaranteed. Google decides per page whether to show the enhanced result. Valid markup that matches visible page content is the part you control.

What is the one rule people break?

Marking up something that is not on the page. FAQ schema for questions a visitor cannot see, or a review score with no reviews, is a manual-action risk. The markup must describe what is genuinely there.

Does FAQ schema still show in search?

Google narrowed FAQ rich results in 2023 to well-known government and health sites, so most pages no longer get the dropdown. The markup still helps machines understand the page, which matters more now that AI answers read structured data.

How do I check it is right?

Paste the output into Google's Rich Results Test and the Schema.org validator. This tool guarantees the JSON parses and the required fields are present; only Google can tell you whether it qualifies for a rich result.

Can I put several schema types on one page?

Yes. Use separate script blocks, or one block with an array. An article page with breadcrumbs and an organisation block is completely normal.

Everything on this page runs inside your own browser. Nothing you type or upload is sent to a server, so your data never leaves your device.