JSON-LD Schema Studio

Generate valid Schema.org JSON-LD for five common content types. Paste the output straight into your <head>.

Generated JSON-LD


              

Validation

What JSON-LD Does for SEO

JSON-LD (JavaScript Object Notation for Linked Data) is Google's recommended format for structured data. It tells search engines exactly what type of content a page contains — a recipe, a product, a Q&A set — so they can render rich results in the SERP: star ratings, FAQ accordions, breadcrumbs, business hours, event dates.

Unlike microdata or RDFa, JSON-LD lives in a single <script type="application/ld+json"> block in the <head>. It doesn't pollute your HTML markup, it's easier to maintain, and it's the only format Google recommends going forward.

The Five Types Covered Here

  • Article — for news posts, blog articles, guides. Enables article carousels and sometimes rich snippets showing author/date.
  • Product — enables price, availability and review stars in the SERP. Requires name, image, and at least one of offers/review/aggregateRating.
  • FAQPage — FAQ rich result. Only valid when the questions and answers are visibly on the page (not hidden behind JavaScript).
  • LocalBusiness — powers the knowledge panel with hours, phone, address. Must include name, address and telephone.
  • Organization — establishes brand identity, logo, social profiles. Used for the knowledge panel and logo in mobile SERPs.

Required vs Recommended Properties

Each type has required and recommended properties. Required properties are the minimum Google needs to consider the schema valid. Recommended properties unlock richer results. This tool flags missing required properties and marks them red.

Common Mistakes

  • Schema markup without visible content. Google's guidelines require the marked-up content to be present on the page. FAQ schema for invisible Q&As is a policy violation.
  • Wrong dates. Use ISO 8601 format: 2026-10-20T14:30:00+00:00, not "Oct 20, 2026".
  • Placeholder URLs. Every URL in JSON-LD should point to a real, live page. Google will validate and drop your rich snippet if they 404.
  • Duplicate schemas. Only one @type per entity per page. Multiple Article blocks for the same article confuse the parser.
  • Mismatch with page content. If the product schema says price $29 but the page says $39, Google flags this as spam.

Validating Your Output

After generating, always paste the output into Google's Rich Results Test (search.google.com/test/rich-results) and the generic Schema Markup Validator (validator.schema.org). Both parse the JSON and report every error or warning.

JSON-LD FAQ

Where do I put the JSON-LD block?

Inside the <head> of the HTML page. Google also accepts it in the body, but head is standard and easier to template.

Can I have multiple JSON-LD blocks on a page?

Yes. Use one block per entity — one for the article, one for the breadcrumb, one for the FAQ. This is safer than nesting everything in one graph.

Does adding schema guarantee a rich result?

No. Schema is eligibility, not a guarantee. Google decides whether to show a rich result based on quality signals, competition and the specific query.

Do I need a paid tool to validate?

No. Google's Rich Results Test and Schema.org's validator are both free.

'; document.getElementById('outLd').textContent = wrapped; var score = MCCharts.clamp(100 - missing.length * 20, 0, 100); MCCharts.bars(document.getElementById('barChart'), [ { label: 'Required properties', score: SCHEMAS[t].filter(function (f) { return f.req; }).length - missing.length, max: SCHEMAS[t].filter(function (f) { return f.req; }).length, note: missing.length ? 'Missing: ' + missing.join(', ') : 'All required properties present' }, { label: 'Schema completeness', score: score, max: 100, note: score >= 80 ? 'Ready to validate' : 'Fill missing fields' } ]); var issues = []; if (missing.length) issues.push({ band: 'red', title: 'Missing required properties', message: missing.join(', ') }); if (t === 'FAQPage' && !val('q1')) issues.push({ band: 'yellow', title: 'FAQ rich results require visible content', message: 'Ensure every question and answer appears visibly on the page.' }); if (!missing.length) issues.push({ band: 'green', title: 'Schema complete', message: 'Paste into Rich Results Test to confirm.' }); MCCharts.issues(document.getElementById('issueList'), issues); results.classList.remove('mc-hidden'); results.classList.remove('mc-fade-in'); void results.offsetWidth; results.classList.add('mc-fade-in'); } typeEl.addEventListener('change', function () { buildFields(); results.classList.add('mc-hidden'); }); document.getElementById('btnGen').addEventListener('click', generate); document.getElementById('btnExample').addEventListener('click', function () { typeEl.value = 'Article'; buildFields(); document.getElementById('fld_headline').value = 'Complete Guide to Core Web Vitals in 2026'; document.getElementById('fld_description').value = 'Learn how LCP, INP and CLS work and how to pass Google thresholds.'; document.getElementById('fld_image').value = 'https://example.com/images/cwv.jpg'; document.getElementById('fld_authorName').value = 'Jane Doe'; document.getElementById('fld_datePublished').value = '2026-10-20T09:00'; document.getElementById('fld_dateModified').value = '2026-10-20T09:00'; document.getElementById('fld_url').value = 'https://example.com/blog/core-web-vitals'; generate(); }); buildFields(); });