Schema markup (JSON-LD) generator
Build valid JSON-LD for ten schema types with a form, not a blank page. Live validation flags missing required and recommended properties from Google's documentation, and the output is ready to paste or test.
- Free, no signup
- Runs in your browser
- Nothing is uploaded
Schema type
A business with a physical location: address, hours, coordinates and price range. Feeds local results and maps.
Basics
A photo of the place or your logo
With country code
Address
Required by Google. Include as many parts as you can.
Two-letter ISO code
Coordinates
At least five decimal places.
Profiles (sameAs)
- https://www.linkedin.com/company/northwind-studio
- https://www.instagram.com/northwindstudio
Press Enter or comma to add.
Opening hours
One row per set of days with the same hours. Use 00:00–23:59 for 24 hours.
Validation
Checked against Google’s required and recommended properties.
- namepasses
- address.streetAddresspasses
- address.addressLocalitypasses
- address.postalCodepasses
- address.addressCountrypasses
- telephonepasses
- urlpasses
- geopasses
- openingHoursSpecificationpasses
- priceRangepasses
- imagepasses
- geo has 5+ decimal placespasses
- priceRange under 100 characterspasses
- telephone has a country codepasses
- Opening hours are valid timespasses
- url and image are absolutepasses
JSON-LD
Paste anywhere in the page’s HTML — the <head> is conventional.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ProfessionalService",
"name": "Northwind Studio",
"image": "https://northwind.example/images/studio.jpg",
"url": "https://northwind.example/leeds",
"telephone": "+44 113 496 0000",
"priceRange": "£££",
"description": "Design and development studio in Leeds. Websites, web apps and brand identities for startups.",
"address": {
"@type": "PostalAddress",
"streetAddress": "4 Mill Yard, Wharf Street",
"addressLocality": "Leeds",
"addressRegion": "West Yorkshire",
"postalCode": "LS2 7EQ",
"addressCountry": "GB"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 53.79648,
"longitude": -1.54785
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
],
"opens": "09:00",
"closes": "17:30"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Saturday"
],
"opens": "10:00",
"closes": "13:00"
}
],
"sameAs": [
"https://www.linkedin.com/company/northwind-studio",
"https://www.instagram.com/northwindstudio"
]
}
</script>How it works
How to use the schema markup generator
- 01
Choose a schema type
Pick from ten types, including Organization, LocalBusiness, Product, Article, Event and BreadcrumbList. Each starts with a worked example.
- 02
Fill in your details
Replace the example values with yours. Switch optional blocks such as offers, ratings or a contact point on or off, and add FAQ items, breadcrumbs or opening hours.
- 03
Fix what the checks flag
Validation updates as you type, listing missing required and recommended properties from Google's documentation plus format problems like relative URLs.
- 04
Copy and test
Copy the JSON-LD as a script tag, raw JSON or a Next.js snippet, paste it into your page, then confirm it in Google's Rich Results Test.
What schema markup does
Schema markup is structured data that tells search engines what a page is about in a vocabulary they agree on, schema.org. Instead of inferring from layout that "£18.00" is a price and "4.7" is a rating, a crawler reads it as fact. The recommended way to add it is JSON-LD: a self-contained block of JSON in a script tag, separate from your visible HTML.
That understanding pays off in three places. It makes pages eligible for rich results, such as prices, stock and stars under a product or dates and venues for events. It feeds Google's picture of your business, including your site name, logo and knowledge panel. And it gives AI assistants clean facts to quote instead of guesses.
What each type earns in Google today
Google has trimmed its rich results a lot since 2023, so it is worth knowing what still shows:
| Type | What Google does with it |
|---|---|
| Product | Product snippets with price, availability and review stars |
| LocalBusiness | Supports business details in local results and maps; name and address are required |
| Event | Event listings, for events at a physical location only |
| SoftwareApplication | App rich results with rating and price |
| Article / BlogPosting | Better title, image and date selection; no special result type of its own |
| BreadcrumbList | Breadcrumb trail in place of the URL, on desktop only since January 2025 |
| Organization, WebSite | Logo, site name and knowledge panel signals; the sitelinks search box was retired in November 2024 |
| FAQPage | No longer shown: restricted in August 2023, removed for all sites from May 2026 |
| Person | No rich result itself; ties authors and founders to their work and profiles |
HowTo rich results were deprecated in 2023 too. Unsupported markup is not penalised: Google says unused structured data causes no problems, and other engines and AI tools still read it. Keep valid markup, just do not build your SEO plan around a feature that no longer appears.
Required vs recommended properties
Google's documentation splits properties into two groups. Required properties must be present for a page to be eligible at all. For a product snippet that is name plus at least one of offers, review or aggregateRating; for a local business it is name and address; for an event, name, startDate and a location with an address. Recommended properties are optional, but each one you add gives Google more to show. The validation panel follows both lists, and flags formatting problems such as currency symbols in prices, relative URLs and coordinates with too few decimal places.
Rules that get markup ignored
- Marking up what is not on the page. Every question, price and review in the JSON-LD must be visible to visitors on that same page.
- Self-serving reviews.Google does not show review stars for a business's reviews of itself in Organization or LocalBusiness markup. Stars are for products, apps and third-party reviews.
- Stale data. Past events, expired prices and out-of-stock items marked in stock erode trust in your markup. Generate it from the same data as the page wherever you can.
- Inconsistent details. The name, address and phone number should match your Google Business Profile and the rest of your site character for character.
Adding it to your site
Paste the script tag into the page's HTML; in WordPress use a header-code plugin or your SEO plugin's custom schema field, and in Framer or Webflow add it to the page's custom head code. In Next.js, render it from the page component, which the Next.js tab does for you, escaping < so the JSON cannot break out of the script tag. Then run the Rich Results Test and the Schema Markup Validator.
Structured data is one half of being readable by machines; an llms.txt file is the other cheap win for AI assistants, and the SERP snippet preview covers the text people see. If you want all of it built in, schema for search and AI comes with every website I ship. More on the fundamentals in my SEO glossary entry.
Common questions
Schema markup generator: FAQ
JSON-LD is a way of writing schema.org structured data as a block of JSON inside a <script type="application/ld+json"> tag. It sits apart from your HTML, so it is easy to add, generate and maintain, and it is the format Google recommends over Microdata and RDFa.
Need it done for you?