Schema Markup Examples (JSON-LD)
These are ten working JSON-LD examples using schema.org vocabulary, with example.com data you should replace with your own. Each note explains when to use the type and which properties Google's structured data documentation lists as required or recommended. Paste a block into a <script type="application/ld+json"> tag in the page, make sure the values match what is visible on the page, and test it before publishing. Valid markup makes a page eligible for rich results; it does not guarantee them.
How to use this examples
- Pick the type that matches the page. Choose the example that describes the main content of the page, such as Article for a blog post.
- Replace the example values. Swap every example.com URL, name, date and price for real values that appear on the page.
- Add it to the page. Place the JSON-LD in a script tag in the head or body, or output it from your CMS template.
- Validate it. Test with the Rich Results Test and the Schema Markup Validator, then fix errors.
- Monitor in Search Console. Check the Enhancements reports for errors once Google has recrawled the page.
Organization
Use on the homepage or About page to describe the organisation behind the site. Google has no required properties; recommended ones include name, url, logo, sameAs (official social profiles), description, address, contactPoint, email and telephone. It can help Google show the right logo and details in knowledge panels.
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Example Training Institute",
"url": "https://www.example.com/",
"logo": "https://www.example.com/images/logo.png",
"description": "Example Training Institute runs practical courses in SEO and web development.",
"email": "[email protected]",
"telephone": "+91-20-0000-0000",
"address": {
"@type": "PostalAddress",
"streetAddress": "1 Example Road",
"addressLocality": "Pune",
"addressRegion": "MH",
"postalCode": "411001",
"addressCountry": "IN"
},
"sameAs": [
"https://www.linkedin.com/company/example",
"https://www.youtube.com/@example"
]
}LocalBusiness (training institute)
Use on the page for a physical location that customers visit. Google requires name and address; recommended properties include url, telephone, geo, openingHoursSpecification, priceRange and image. Use the most specific type available. schema.org has no training-centre subtype of LocalBusiness, so this example combines EducationalOrganization with LocalBusiness, which is valid JSON-LD.
{
"@context": "https://schema.org",
"@type": ["EducationalOrganization", "LocalBusiness"],
"@id": "https://www.example.com/locations/pune/#business",
"name": "Example Training Institute - Pune",
"url": "https://www.example.com/locations/pune/",
"image": "https://www.example.com/images/pune-centre.jpg",
"telephone": "+91-20-0000-0000",
"address": {
"@type": "PostalAddress",
"streetAddress": "1 Example Road",
"addressLocality": "Pune",
"addressRegion": "MH",
"postalCode": "411001",
"addressCountry": "IN"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 18.5204,
"longitude": 73.8567
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
"opens": "09:00",
"closes": "19:00"
}
]
}BreadcrumbList
Use on any page that sits within a hierarchy, matching the breadcrumb trail shown on the page. Google requires itemListElement, and each ListItem needs position and name, plus item (the URL) for every step except the last, where item is optional.
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://www.example.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "SEO",
"item": "https://www.example.com/seo/"
},
{
"@type": "ListItem",
"position": 3,
"name": "Technical SEO"
}
]
}Article
Use for blog posts, news and guides (Article, BlogPosting or NewsArticle). Google has no required properties; recommended ones are headline, image, datePublished, dateModified and author, with each author given as a Person or Organization with a name and ideally a url to their profile page.
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "How to Write a Robots.txt File",
"description": "A step-by-step guide to robots.txt rules, with examples.",
"image": [
"https://www.example.com/images/robots-txt-16x9.jpg",
"https://www.example.com/images/robots-txt-4x3.jpg",
"https://www.example.com/images/robots-txt-1x1.jpg"
],
"datePublished": "2026-09-15T09:00:00+05:30",
"dateModified": "2026-10-20T11:30:00+05:30",
"author": {
"@type": "Person",
"name": "Example Author",
"url": "https://www.example.com/authors/example-author/"
},
"publisher": {
"@type": "Organization",
"name": "Example Training Institute",
"logo": {
"@type": "ImageObject",
"url": "https://www.example.com/images/logo.png"
}
}
}FAQPage
Use on a page that lists questions with answers written by the site itself (not user-submitted answers; that is QAPage). Required: mainEntity containing Question items, each with name and acceptedAnswer (an Answer with text). Since August 2023 Google shows FAQ rich results only for well-known, authoritative government and health websites, but the markup is still valid schema.org and helps describe the page.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How long is the SEO course?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Example: the course runs for 12 weeks with two live sessions per week."
}
},
{
"@type": "Question",
"name": "Do I need coding knowledge?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No. Basic HTML is taught in the first module."
}
}
]
}Product with Offer
Use on a product page. For product snippets Google requires name plus at least one of offers, review or aggregateRating. For merchant listings it requires name, image and offers with price and priceCurrency; recommended properties include availability, brand, gtin or sku, shippingDetails and hasMerchantReturnPolicy. Only include ratings that come from real, visible reviews.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Example Wireless Router X200",
"image": [
"https://www.example.com/images/router-x200.jpg"
],
"description": "Example dual-band wireless router for home and small office networks.",
"sku": "X200-EX",
"brand": {
"@type": "Brand",
"name": "ExampleBrand"
},
"offers": {
"@type": "Offer",
"url": "https://www.example.com/products/router-x200/",
"price": "4999.00",
"priceCurrency": "INR",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
}
}Course
Use on a course page to describe the course and who provides it. For Google's Course info rich result the documented requirements were name, description, provider, offers and hasCourseInstance (with courseMode plus courseSchedule or courseWorkload). Google announced in 2025 that it was phasing out the Course info feature, so check the current Search Central gallery before relying on it; the markup remains valid schema.org.
{
"@context": "https://schema.org",
"@type": "Course",
"name": "Example Technical SEO Course",
"description": "A practical course covering crawling, indexing, site speed and structured data.",
"url": "https://www.example.com/courses/technical-seo/",
"provider": {
"@type": "Organization",
"name": "Example Training Institute",
"sameAs": "https://www.example.com/"
},
"offers": {
"@type": "Offer",
"category": "Paid",
"price": "15000",
"priceCurrency": "INR"
},
"hasCourseInstance": {
"@type": "CourseInstance",
"courseMode": "Blended",
"courseWorkload": "PT40H",
"location": "Pune"
},
"inLanguage": "en"
}Event
Use for a single event with a date, such as a workshop or webinar; do not mark up promotions or business hours as events. Google requires name, startDate and location (a Place with an address, or a VirtualLocation for online events). Recommended: description, endDate, eventStatus, eventAttendanceMode, image, offers, organizer and performer.
{
"@context": "https://schema.org",
"@type": "Event",
"name": "Example Free SEO Workshop",
"description": "A two-hour hands-on workshop on Google Search Console.",
"startDate": "2026-12-12T10:00:00+05:30",
"endDate": "2026-12-12T12:00:00+05:30",
"eventStatus": "https://schema.org/EventScheduled",
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
"image": "https://www.example.com/images/seo-workshop.jpg",
"location": {
"@type": "Place",
"name": "Example Training Institute",
"address": {
"@type": "PostalAddress",
"streetAddress": "1 Example Road",
"addressLocality": "Pune",
"postalCode": "411001",
"addressCountry": "IN"
}
},
"organizer": {
"@type": "Organization",
"name": "Example Training Institute",
"url": "https://www.example.com/"
},
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "INR",
"availability": "https://schema.org/InStock",
"url": "https://www.example.com/events/seo-workshop/",
"validFrom": "2026-11-15T00:00:00+05:30"
}
}VideoObject
Use on a page where a video is the main or a prominent part of the content. Google requires name, thumbnailUrl and uploadDate. Recommended: description, duration (ISO 8601, e.g. PT8M30S), contentUrl or embedUrl, and interactionStatistic. Google must be able to fetch the video file or player for the page to be eligible for video features.
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "How to Use URL Inspection in Search Console",
"description": "A short walkthrough of the URL Inspection tool.",
"thumbnailUrl": [
"https://www.example.com/images/url-inspection-thumb.jpg"
],
"uploadDate": "2026-10-01T08:00:00+05:30",
"duration": "PT8M30S",
"contentUrl": "https://www.example.com/videos/url-inspection.mp4",
"embedUrl": "https://www.example.com/embed/url-inspection"
}ProfilePage with Person
Use on an author or creator profile page whose main focus is one person or organisation. Google requires mainEntity (a Person or Organization) with a name. Recommended: dateCreated, dateModified, and on the Person: alternateName, identifier, description, image and sameAs. Link to this page from the author property of the person's articles.
{
"@context": "https://schema.org",
"@type": "ProfilePage",
"dateCreated": "2025-01-10T10:00:00+05:30",
"dateModified": "2026-10-05T15:00:00+05:30",
"mainEntity": {
"@type": "Person",
"name": "Example Author",
"alternateName": "exampleauthor",
"identifier": "author-123",
"description": "SEO trainer with experience in technical audits.",
"image": "https://www.example.com/images/example-author.jpg",
"jobTitle": "SEO Trainer",
"worksFor": {
"@type": "Organization",
"name": "Example Training Institute"
},
"sameAs": [
"https://www.linkedin.com/in/example-author"
]
}
}Frequently asked questions
Does schema markup improve rankings?
Structured data is not a direct ranking boost. It helps search engines understand the page and can make it eligible for rich results, which may improve how the listing looks and how often it is clicked.
Which format should I use: JSON-LD, Microdata or RDFa?
Google supports all three and recommends JSON-LD because it sits in a single block and is easier to add and maintain.
Can I add several schema types to one page?
Yes. You can use several script blocks or one block with an @graph array, for example BreadcrumbList plus Article. Each item should describe content that is actually on the page.
Why is my valid markup not showing rich results?
Google decides whether to show rich results based on quality, relevance and eligibility. Some features are limited to certain sites or have been retired, so check the current Search Central documentation for each type.