Back to Tools

Schema Markup Generator

Use cases

FAQ rich snippets Recipe/HowTo carousels Product review stars Local business knowledge panel Video thumbnails in search

Seven schema types: FAQ (FAQPage with Q&A pairs), HowTo (steps), Article (NewsArticle/BlogPosting), Product (pricing/reviews), LocalBusiness (address/hours), Breadcrumb, Video.

Dedicated generation functions per type.

Output wrapped in <script type="application/ld+json"> tags.

Streamlit App

Platform

Browser-based (no installation required)

Input

Schema type selection

Required fields (vary by type)

Optional properties per schema spec

Output

JSON-LD wrapped in script tags. Copy to clipboard or download as .html file.

Launch App View Source

Features

  • Seven schema types (no API required)
  • FAQPage with multiple Q&A pairs
  • HowTo with configurable steps
  • Product with pricing and reviews
  • Download as .html file

How to use

  1. 1 Select schema type (FAQ/HowTo/Article/Product/etc.)
  2. 2 Fill required fields for chosen type
  3. 3 Add optional properties if needed
  4. 4 Preview formatted JSON-LD
  5. 5 Copy code or download .html file

Frequently asked questions

How do I format time and duration fields like Total Time?
HowTo Total Time and Video Duration must be in ISO 8601 duration format, not plain text. Write PT30M for 30 minutes or PT5M30S for 5 minutes 30 seconds. The tool passes your value straight into the JSON-LD without converting it, so '30 minutes' would produce invalid markup.
Why is priceValidUntil appearing in my Product schema when I did not set it?
The Price Valid Until field is a date picker that defaults to today's date, and the code includes it whenever it has a value, which is always. If you do not actually have a price expiry date, delete the priceValidUntil line from the generated JSON before publishing, otherwise your offer will claim the price expires today.
Why is dateModified missing from my Article schema?
The tool only includes dateModified when it differs from datePublished. Both date pickers default to today, so if you leave Date Modified untouched it matches Date Published and gets dropped. Set it to a different date if you want it in the output.
What happens to fields I leave blank?
Optional fields are simply omitted from the JSON-LD rather than output as empty strings, with one exception: the Offer url in Product schema is always included and will be an empty string if you leave Product URL blank. Empty FAQ pairs, empty HowTo steps and unnamed breadcrumbs are silently skipped, so the position numbering in the output only counts completed entries.
What do I need for review stars to appear in Product schema?
The aggregateRating block is only generated when you fill in both Average Rating and Number of Reviews; providing just one produces no rating markup at all. Best and worst rating default to 5 and 1. Also note Google requires reviews to genuinely exist on the page, so only add these if you actually display them.
Does the tool validate the markup against Google's requirements?
No. It builds structurally valid JSON-LD from your inputs but performs no validation of content, URLs or Google rich result eligibility. Run the output through the Google Rich Results Test or the Schema.org validator before deploying, especially for Product and LocalBusiness where Google has extra requirements.

Need something built for your business?

This tool started as bespoke client work. I build custom scripts, data pipelines, and full apps for SEO and product data problems that off-the-shelf tools don't solve.

Book a Call