JSON-LD Schema Markup Generator
Generate JSON-LD for FAQ, Article, Organization, and other schema types. Copy only markup that matches visible page content.
Runs in your browser. Nothing you enter is uploaded.
Overview
Structured data tells a search engine what a page is, in a vocabulary it already understands. Writing it by hand means remembering which properties each type requires and getting nested objects right; this generator fills a form and emits valid JSON-LD for the types most sites actually need - Organization, LocalBusiness, Person, Article, FAQPage, HowTo, Product, Review, Event, Recipe, VideoObject, BreadcrumbList, JobPosting, Course, and others.
JSON-LD is the format to use. Google recommends it, it sits in a single script tag instead of being woven through your HTML, and you can change it without touching the markup a designer is working on.
Picking a type, and resisting the urge to add more
Choose the type that describes what the page actually is. An article is an Article, a service page is a Service, a store location is a LocalBusiness. Almost every site benefits from Organization or WebSite markup on the homepage and BreadcrumbList wherever a hierarchy exists - those are low-effort and broadly useful.
The temptation is to stack types in the hope that one of them triggers an enhancement. It does not work that way, and it creates a page whose markup contradicts itself. FAQPage on a page with no visible questions, Review markup for ratings nobody left, Product markup on a category listing - each is a guidelines violation, and Google issues manual actions that disable rich results site-wide for the account, not just for the offending page.
- Homepage: Organization plus WebSite.
- Blog post: Article, with author and datePublished filled in.
- Service or product page: Service or Product, with real, current pricing.
- Any page with a visible hierarchy: BreadcrumbList matching the on-page breadcrumb.
How the JSON-LD is built
Selecting a type switches the form to the fields that type needs and builds a JavaScript object with @context set to https://schema.org and @type set to the schema.org type name. Values you supply are inserted directly; fields you leave blank are omitted from the output rather than written as empty strings, which keeps the emitted object clean.
Nested entities are constructed for you where the specification requires them. An author becomes a Person object rather than a bare string, a Product price becomes an Offer object, a Review rating becomes a Rating object with bestRating, and repeated inputs - FAQ question and answer pairs, HowTo steps, breadcrumb items - are expanded into properly typed arrays with position values where the type calls for them.
The result is serialised as indented JSON ready to wrap in a script tag of type application/ld+json. It is not checked against Google’s rich result requirements, which is why running the output through the schema validator before deployment is worth the extra step.
FAQ markup from two question-and-answer pairs
Input
Type: FAQPage Q1: Does compressing an image reduce its dimensions? A1: Only if you set a max width. Quality reduction alone keeps the pixel dimensions unchanged. Q2: Is JPEG or PNG better for photos? A2: JPEG, in almost every case - PNG is for graphics with flat colour or transparency.
Output
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Does compressing an image reduce its dimensions?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Only if you set a max width. Quality reduction alone keeps the pixel dimensions unchanged."
}
},
{
"@type": "Question",
"name": "Is JPEG or PNG better for photos?",
"acceptedAnswer": {
"@type": "Answer",
"text": "JPEG, in almost every case - PNG is for graphics with flat colour or transparency."
}
}
]
}Each pair became a Question with a nested Answer object - the structure the specification requires and the part people most often get wrong when hand-writing it. This block is only legitimate if both questions and both answers are visible to a visitor on the page. Marking up questions that live in a hidden div or were cut from the copy is precisely the pattern that triggers manual actions.
Limitations
- The generator produces syntactically valid JSON-LD; it does not verify that the values you entered match what the page displays, which is the requirement Google enforces most strictly.
- Only a subset of schema.org is covered. Uncommon types, and uncommon properties on covered types, need hand-editing.
- No validation against Google’s per-feature rich result requirements, which are stricter than the schema.org specification and change over time.
- Repeated-entity fields (FAQ pairs, HowTo steps, breadcrumb items) fall back to placeholder entries when left empty - those must be replaced or removed before publishing.
- Rich result eligibility is Google’s decision. Correct markup makes a page eligible; it does not make an enhancement appear.
When not to use this tool
- If your CMS or SEO plugin already emits markup for the type you want, add a second block only after checking the first - duplicate, conflicting entities are worse than one imperfect one.
- If you are debugging markup that already exists on a live page rather than authoring new markup, go straight to the schema validator.
How to use it
- 1
Select the type that matches what the page genuinely is rather than the type with the most attractive rich result.
- 2
Fill only the fields you can back up with visible on-page content, leaving the rest blank so they are omitted from the output.
- 3
Copy the JSON-LD into a <script type="application/ld+json"> tag in your template and deploy it.
- 4
Run the live URL through the schema validator, then through Google’s Rich Results Test, and fix errors before requesting indexing.
Questions
Where should the script tag go?
Either head or body works and search engines treat them identically. The head is the conventional choice for site-wide entities like Organization; placing page-specific markup near the content it describes tends to be easier to maintain in a component-based template.
Can one page carry several schema types?
Yes, and most well-marked-up pages do - Organization from the layout, BreadcrumbList from the navigation, Article from the post template. What matters is that they do not contradict each other. Validate them together rather than one at a time.
Will adding structured data improve my rankings?
Structured data is not a ranking factor in itself. It makes a page eligible for result enhancements - review stars, FAQ dropdowns, recipe cards - which can raise click-through from a position you already hold. The position itself is unaffected.
What happens if I mark up content that is not visible on the page?
Google treats it as a violation of its structured data guidelines and can issue a manual action that removes rich results across the whole site, not just the page in question. Every value in your markup should correspond to something a visitor can see without expanding hidden markup.
Related tools
Related guides
Related tools
