Skill Tracer
Skills › Marketing Skills › schema › schema-examples.md

schema-examples.md

392 lines · skills/schema/references/schema-examples.md at 88c79f6

Open on GitHub
1# Schema Markup Examples
2
3Complete JSON-LD examples for common schema types.
4

Schema Markup Examples

Complete JSON-LD examples for common schema types.

Raw lines 1 to 4
5## Contents
6- Organization
7- WebSite (site identity)
8- Article / BlogPosting
9- Product
10- SoftwareApplication
11- FAQPage
12- HowTo
13- BreadcrumbList
14- LocalBusiness
15- Event
16- Multiple Schema Types
17- Implementation Example (Next.js)

Contents

  • Organization
  • WebSite (site identity)
  • Article / BlogPosting
  • Product
  • SoftwareApplication
  • FAQPage
  • HowTo
  • BreadcrumbList
  • LocalBusiness
  • Event
  • Multiple Schema Types
  • Implementation Example (Next.js)
Raw lines 5 to 18
19## Organization
21For company/brand homepage or about page.
23```json
25 "@context": "https://schema.org",
26 "@type": "Organization",
27 "name": "Example Company",
28 "url": "https://example.com",
29 "logo": "https://example.com/logo.png",
30 "sameAs": [
31 "https://twitter.com/example",
32 "https://linkedin.com/company/example",
33 "https://facebook.com/example"
34 ],
35 "contactPoint": {
36 "@type": "ContactPoint",
37 "telephone": "+1-555-555-5555",
38 "contactType": "customer service"
39 }
41```
43---

Organization

For company/brand homepage or about page.

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Example Company",
  "url": "https://example.com",
  "logo": "https://example.com/logo.png",
  "sameAs": [
    "https://twitter.com/example",
    "https://linkedin.com/company/example",
    "https://facebook.com/example"
  ],
  "contactPoint": {
    "@type": "ContactPoint",
    "telephone": "+1-555-555-5555",
    "contactType": "customer service"
  }
}

Raw lines 19 to 44
45## WebSite (site identity)
47For homepage/site identity. Google retired the sitelinks search box in November 2024; adding `SearchAction` cannot restore it. Keep useful `WebSite` markup for site names. See the [search box announcement](https://developers.google.com/search/blog/2024/10/sitelinks-search-box).
49```json
51 "@context": "https://schema.org",
52 "@type": "WebSite",
53 "name": "Example",
54 "url": "https://example.com"
56```
58---

WebSite (site identity)

For homepage/site identity. Google retired the sitelinks search box in November 2024; adding SearchAction cannot restore it. Keep useful WebSite markup for site names. See the search box announcement.

{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "Example",
  "url": "https://example.com"
}

Raw lines 45 to 59
60## Article / BlogPosting
62For blog posts and news articles.
64```json
66 "@context": "https://schema.org",
67 "@type": "Article",
68 "headline": "How to Implement Schema Markup",
69 "image": "https://example.com/image.jpg",
70 "datePublished": "2024-01-15T08:00:00+00:00",
71 "dateModified": "2024-01-20T10:00:00+00:00",
72 "author": {
73 "@type": "Person",
74 "name": "Jane Doe",
75 "url": "https://example.com/authors/jane"
76 },
77 "publisher": {
78 "@type": "Organization",
79 "name": "Example Company",
80 "logo": {
81 "@type": "ImageObject",
82 "url": "https://example.com/logo.png"
83 }
84 },
85 "description": "A complete guide to implementing schema markup...",
86 "mainEntityOfPage": {
87 "@type": "WebPage",
88 "@id": "https://example.com/schema-guide"
89 }
91```
93---

Article / BlogPosting

For blog posts and news articles.

{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "How to Implement Schema Markup",
  "image": "https://example.com/image.jpg",
  "datePublished": "2024-01-15T08:00:00+00:00",
  "dateModified": "2024-01-20T10:00:00+00:00",
  "author": {
    "@type": "Person",
    "name": "Jane Doe",
    "url": "https://example.com/authors/jane"
  },
  "publisher": {
    "@type": "Organization",
    "name": "Example Company",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png"
    }
  },
  "description": "A complete guide to implementing schema markup...",
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://example.com/schema-guide"
  }
}

Raw lines 60 to 94
95## Product
97For product pages (e-commerce or SaaS).
99```json
101 "@context": "https://schema.org",
102 "@type": "Product",
103 "name": "Premium Widget",
104 "image": "https://example.com/widget.jpg",
105 "description": "Our best-selling widget for professionals",
106 "sku": "WIDGET-001",
107 "brand": {
108 "@type": "Brand",
109 "name": "Example Co"
110 },
111 "offers": {
112 "@type": "Offer",
113 "url": "https://example.com/products/widget",
114 "priceCurrency": "USD",
115 "price": "99.99",
116 "availability": "https://schema.org/InStock",
117 "priceValidUntil": "2024-12-31"
118 },
119 "aggregateRating": {
120 "@type": "AggregateRating",
121 "ratingValue": "4.8",
122 "reviewCount": "127"
123 }
125```
127---

Product

For product pages (e-commerce or SaaS).

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Premium Widget",
  "image": "https://example.com/widget.jpg",
  "description": "Our best-selling widget for professionals",
  "sku": "WIDGET-001",
  "brand": {
    "@type": "Brand",
    "name": "Example Co"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/products/widget",
    "priceCurrency": "USD",
    "price": "99.99",
    "availability": "https://schema.org/InStock",
    "priceValidUntil": "2024-12-31"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "127"
  }
}

Raw lines 95 to 128
129## SoftwareApplication
131For SaaS product pages and app landing pages.
133```json
135 "@context": "https://schema.org",
136 "@type": "SoftwareApplication",
137 "name": "Example App",
138 "applicationCategory": "BusinessApplication",
139 "operatingSystem": "Web, iOS, Android",
140 "offers": {
141 "@type": "Offer",
142 "price": "0",
143 "priceCurrency": "USD"
144 },
145 "aggregateRating": {
146 "@type": "AggregateRating",
147 "ratingValue": "4.6",
148 "ratingCount": "1250"
149 }
151```
153---

SoftwareApplication

For SaaS product pages and app landing pages.

{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "name": "Example App",
  "applicationCategory": "BusinessApplication",
  "operatingSystem": "Web, iOS, Android",
  "offers": {
    "@type": "Offer",
    "price": "0",
    "priceCurrency": "USD"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.6",
    "ratingCount": "1250"
  }
}

Raw lines 129 to 154
155## FAQPage
157For visible frequently asked questions when a consumer needs Schema.org semantics. Google FAQ rich results were retired in May 2026; this example cannot enable expandable Google search results. Use the Schema.org Validator for vocabulary validation, not missing Rich Results Test detection as a failure. See [Google's documentation updates](https://developers.google.com/search/updates).
159```json
161 "@context": "https://schema.org",
162 "@type": "FAQPage",
163 "mainEntity": [
164 {
165 "@type": "Question",
166 "name": "What is schema markup?",
167 "acceptedAnswer": {
168 "@type": "Answer",
169 "text": "Schema markup is a structured data vocabulary that helps search engines understand your content..."
170 }
171 },
172 {
173 "@type": "Question",
174 "name": "How do I implement schema?",
175 "acceptedAnswer": {
176 "@type": "Answer",
177 "text": "The recommended approach is to use JSON-LD format, placing the script in your page's head..."
178 }
179 }
180 ]
182```
184---

FAQPage

For visible frequently asked questions when a consumer needs Schema.org semantics. Google FAQ rich results were retired in May 2026; this example cannot enable expandable Google search results. Use the Schema.org Validator for vocabulary validation, not missing Rich Results Test detection as a failure. See Google's documentation updates.

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is schema markup?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Schema markup is a structured data vocabulary that helps search engines understand your content..."
      }
    },
    {
      "@type": "Question",
      "name": "How do I implement schema?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "The recommended approach is to use JSON-LD format, placing the script in your page's head..."
      }
    }
  ]
}

Raw lines 155 to 185
186## HowTo
188For instructional content and tutorials when a consumer needs Schema.org semantics. Google retired HowTo rich results in September 2023; this example does not restore that appearance. See the [retirement announcement](https://developers.google.com/search/blog/2023/08/howto-faq-changes).
190```json
192 "@context": "https://schema.org",
193 "@type": "HowTo",
194 "name": "How to Add Schema Markup to Your Website",
195 "description": "A step-by-step guide to implementing JSON-LD schema",
196 "totalTime": "PT15M",
197 "step": [
198 {
199 "@type": "HowToStep",
200 "name": "Choose your schema type",
201 "text": "Identify the appropriate schema type for your page content...",
202 "url": "https://example.com/guide#step1"
203 },
204 {
205 "@type": "HowToStep",
206 "name": "Write the JSON-LD",
207 "text": "Create the JSON-LD markup following schema.org specifications...",
208 "url": "https://example.com/guide#step2"
209 },
210 {
211 "@type": "HowToStep",
212 "name": "Add to your page",
213 "text": "Insert the script tag in your page's head section...",
214 "url": "https://example.com/guide#step3"
215 }
216 ]
218```
220---

HowTo

For instructional content and tutorials when a consumer needs Schema.org semantics. Google retired HowTo rich results in September 2023; this example does not restore that appearance. See the retirement announcement.

{
  "@context": "https://schema.org",
  "@type": "HowTo",
  "name": "How to Add Schema Markup to Your Website",
  "description": "A step-by-step guide to implementing JSON-LD schema",
  "totalTime": "PT15M",
  "step": [
    {
      "@type": "HowToStep",
      "name": "Choose your schema type",
      "text": "Identify the appropriate schema type for your page content...",
      "url": "https://example.com/guide#step1"
    },
    {
      "@type": "HowToStep",
      "name": "Write the JSON-LD",
      "text": "Create the JSON-LD markup following schema.org specifications...",
      "url": "https://example.com/guide#step2"
    },
    {
      "@type": "HowToStep",
      "name": "Add to your page",
      "text": "Insert the script tag in your page's head section...",
      "url": "https://example.com/guide#step3"
    }
  ]
}

Raw lines 186 to 221
222## BreadcrumbList
224For any page with breadcrumb navigation.
226```json
228 "@context": "https://schema.org",
229 "@type": "BreadcrumbList",
230 "itemListElement": [
231 {
232 "@type": "ListItem",
233 "position": 1,
234 "name": "Home",
235 "item": "https://example.com"
236 },
237 {
238 "@type": "ListItem",
239 "position": 2,
240 "name": "Blog",
241 "item": "https://example.com/blog"
242 },
243 {
244 "@type": "ListItem",
245 "position": 3,
246 "name": "SEO Guide",
247 "item": "https://example.com/blog/seo-guide"
248 }
249 ]
251```
253---

BreadcrumbList

For any page with breadcrumb navigation.

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://example.com"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Blog",
      "item": "https://example.com/blog"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "SEO Guide",
      "item": "https://example.com/blog/seo-guide"
    }
  ]
}

Raw lines 222 to 254
255## LocalBusiness
257For local business location pages.
259```json
261 "@context": "https://schema.org",
262 "@type": "LocalBusiness",
263 "name": "Example Coffee Shop",
264 "image": "https://example.com/shop.jpg",
265 "address": {
266 "@type": "PostalAddress",
267 "streetAddress": "123 Main Street",
268 "addressLocality": "San Francisco",
269 "addressRegion": "CA",
270 "postalCode": "94102",
271 "addressCountry": "US"
272 },
273 "geo": {
274 "@type": "GeoCoordinates",
275 "latitude": "37.7749",
276 "longitude": "-122.4194"
277 },
278 "telephone": "+1-555-555-5555",
279 "openingHoursSpecification": [
280 {
281 "@type": "OpeningHoursSpecification",
282 "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
283 "opens": "08:00",
284 "closes": "18:00"
285 }
286 ],
287 "priceRange": "$$"
289```
291---

LocalBusiness

For local business location pages.

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Example Coffee Shop",
  "image": "https://example.com/shop.jpg",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main Street",
    "addressLocality": "San Francisco",
    "addressRegion": "CA",
    "postalCode": "94102",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": "37.7749",
    "longitude": "-122.4194"
  },
  "telephone": "+1-555-555-5555",
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "08:00",
      "closes": "18:00"
    }
  ],
  "priceRange": "$$"
}

Raw lines 255 to 292
293## Event
295For event pages, webinars, conferences.
297```json
299 "@context": "https://schema.org",
300 "@type": "Event",
301 "name": "Annual Marketing Conference",
302 "startDate": "2024-06-15T09:00:00-07:00",
303 "endDate": "2024-06-15T17:00:00-07:00",
304 "eventAttendanceMode": "https://schema.org/OnlineEventAttendanceMode",
305 "eventStatus": "https://schema.org/EventScheduled",
306 "location": {
307 "@type": "VirtualLocation",
308 "url": "https://example.com/conference"
309 },
310 "image": "https://example.com/conference.jpg",
311 "description": "Join us for our annual marketing conference...",
312 "offers": {
313 "@type": "Offer",
314 "url": "https://example.com/conference/tickets",
315 "price": "199",
316 "priceCurrency": "USD",
317 "availability": "https://schema.org/InStock",
318 "validFrom": "2024-01-01"
319 },
320 "performer": {
321 "@type": "Organization",
322 "name": "Example Company"
323 },
324 "organizer": {
325 "@type": "Organization",
326 "name": "Example Company",
327 "url": "https://example.com"
328 }
330```
332---

Event

For event pages, webinars, conferences.

{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "Annual Marketing Conference",
  "startDate": "2024-06-15T09:00:00-07:00",
  "endDate": "2024-06-15T17:00:00-07:00",
  "eventAttendanceMode": "https://schema.org/OnlineEventAttendanceMode",
  "eventStatus": "https://schema.org/EventScheduled",
  "location": {
    "@type": "VirtualLocation",
    "url": "https://example.com/conference"
  },
  "image": "https://example.com/conference.jpg",
  "description": "Join us for our annual marketing conference...",
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/conference/tickets",
    "price": "199",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "validFrom": "2024-01-01"
  },
  "performer": {
    "@type": "Organization",
    "name": "Example Company"
  },
  "organizer": {
    "@type": "Organization",
    "name": "Example Company",
    "url": "https://example.com"
  }
}

Raw lines 293 to 333
334## Multiple Schema Types
336Combine multiple schema types using @graph.
338```json
340 "@context": "https://schema.org",
341 "@graph": [
342 {
343 "@type": "Organization",
344 "@id": "https://example.com/#organization",
345 "name": "Example Company",
346 "url": "https://example.com"
347 },
348 {
349 "@type": "WebSite",
350 "@id": "https://example.com/#website",
351 "url": "https://example.com",
352 "name": "Example",
353 "publisher": {
354 "@id": "https://example.com/#organization"
355 }
356 },
357 {
358 "@type": "BreadcrumbList",
359 "itemListElement": [...]
360 }
361 ]
363```
365---

Multiple Schema Types

Combine multiple schema types using @graph.

{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://example.com/#organization",
      "name": "Example Company",
      "url": "https://example.com"
    },
    {
      "@type": "WebSite",
      "@id": "https://example.com/#website",
      "url": "https://example.com",
      "name": "Example",
      "publisher": {
        "@id": "https://example.com/#organization"
      }
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [...]
    }
  ]
}

Raw lines 334 to 366
367## Implementation Example (Next.js)
369```jsx
370export default function ProductPage({ product }) {
371 const schema = {
372 "@context": "https://schema.org",
373 "@type": "Product",
374 name: product.name,
375 // ... other properties
376 };
378 return (
379 <>
380 <Head>
381 <script
382 type="application/ld+json"
383 dangerouslySetInnerHTML={{ __html: JSON.stringify(schema).replace(/</g, '\\u003c') }}
384 />
385 </Head>
386 {/* Page content */}
387 </>
388 );
390```
392When JSON-LD is inserted as raw HTML, JSON escaping alone does not stop a product string containing a script-closing tag from terminating the element. Escape every `<` in the serialized JSON as `\u003c`, as in the example above; parsing the JSON recovers the original product text. Do this at the HTML embedding boundary, without deleting legitimate characters from the source data. See the [Next.js JSON-LD guide](https://nextjs.org/docs/app/guides/json-ld).

Implementation Example (Next.js)

export default function ProductPage({ product }) {
  const schema = {
    "@context": "https://schema.org",
    "@type": "Product",
    name: product.name,
    // ... other properties
  };

  return (
    <>
      <Head>
        <script
          type="application/ld+json"
          dangerouslySetInnerHTML={{ __html: JSON.stringify(schema).replace(/</g, '\\u003c') }}
        />
      </Head>
      {/* Page content */}
    </>
  );
}

When JSON-LD is inserted as raw HTML, JSON escaping alone does not stop a product string containing a script-closing tag from terminating the element. Escape every < in the serialized JSON as \u003c, as in the example above; parsing the JSON recovers the original product text. Do this at the HTML embedding boundary, without deleting legitimate characters from the source data. See the Next.js JSON-LD guide.

Raw lines 367 to 392