Skip to content

Schema.org Types Reference

Quick reference of the Schema.org types most relevant to B2B Nitrogen sites. For implementation see Structured Data — JSON-LD.

Schema.org types are hierarchical. Thing is the root. Common branches:

Thing
├── Action
├── CreativeWork
│ ├── Article
│ ├── BlogPosting
│ ├── WebPage
│ └── WebSite
├── Event
├── Intangible
│ ├── ItemList
│ │ └── BreadcrumbList
│ ├── Offer
│ └── Service
├── Organization
│ ├── Corporation
│ ├── LocalBusiness
│ │ └── ProfessionalService
│ └── EducationalOrganization
├── Person
├── Place
│ ├── PostalAddress
│ └── LocalBusiness (also under Organization)
└── Product

A type inherits properties from its parents — LocalBusiness has all Organization properties plus additional location-specific ones.

{
"@type": "Organization",
"name": "Required",
"url": "Required",
"logo": "Recommended",
"address": "Recommended",
"contactPoint": "Recommended",
"sameAs": "Recommended",
"vatID": "Optional (HU-specific)",
"foundingDate": "Optional",
"numberOfEmployees": "Optional"
}

Use on every page (in layout).

{
"@type": "Service",
"name": "Required",
"provider": "Required (reference to Organization)",
"areaServed": "Recommended",
"serviceType": "Recommended",
"description": "Recommended",
"hasOfferCatalog": "Optional",
"termsOfService": "Optional"
}

Use on each services landing page.

{
"@type": "Article",
"headline": "Required (max 110 chars)",
"image": "Required (one or more URLs)",
"datePublished": "Required (ISO 8601)",
"dateModified": "Required",
"author": "Required (Person or Organization)",
"publisher": "Required (Organization)",
"description": "Recommended",
"mainEntityOfPage": "Recommended",
"wordCount": "Optional",
"articleSection": "Optional",
"articleBody": "Optional"
}

Use on blog posts.

Variations:

  • BlogPosting — for blog content (subset of Article)
  • NewsArticle — for news (requires Google News inclusion to be useful)
  • TechArticle — for technical documentation
{
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Required",
"item": "Required (URL)"
}
]
}

Use on every deep page with breadcrumb navigation.

{
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Required (the question)",
"acceptedAnswer": {
"@type": "Answer",
"text": "Required (the answer)"
}
}
]
}

Use on FAQ pages. Note: Google reduced FAQ rich result visibility since August 2023.

{
"@type": "Person",
"name": "Required",
"givenName": "Recommended",
"familyName": "Recommended",
"jobTitle": "Recommended",
"worksFor": "Recommended (Organization)",
"url": "Recommended",
"image": "Recommended",
"sameAs": "Recommended (LinkedIn, GitHub, etc.)",
"knowsAbout": "Optional (areas of expertise)"
}

Use on team bio pages.

{
"@type": "ProfessionalService",
"name": "Required",
"image": "Required",
"address": "Required",
"geo": "Recommended (coordinates)",
"url": "Required",
"telephone": "Recommended",
"priceRange": "Recommended ($, $$, $$$, etc.)",
"openingHoursSpecification": "Recommended"
}

For agencies with physical offices and local-search ambitions.

{
"@type": "WebSite",
"name": "Required",
"url": "Required",
"potentialAction": {
"@type": "SearchAction",
"target": "https://example.com/search?q={search_term_string}",
"query-input": "required name=search_term_string"
}
}

Use on homepage if site has search functionality. Enables sitelinks search box in Google results.

{
"@type": "WebPage",
"name": "Required",
"url": "Required",
"description": "Recommended",
"primaryImageOfPage": "Optional",
"lastReviewed": "Optional",
"reviewedBy": "Optional"
}

Used as a wrapper when needed for the @graph structure.

{
"@type": "Recipe",
"name": "Required",
"image": "Required",
"author": "Required",
"recipeIngredient": "Required (array)",
"recipeInstructions": "Required (array of HowToStep)",
"datePublished": "Required",
"prepTime": "Recommended (ISO 8601 duration)",
"cookTime": "Recommended"
}
{
"@type": "Event",
"name": "Required",
"startDate": "Required (ISO 8601)",
"location": "Required (Place or VirtualLocation)",
"endDate": "Recommended",
"description": "Recommended",
"image": "Recommended",
"offers": "Recommended (if paid)",
"organizer": "Recommended"
}

For conferences, webinars, meetups.

{
"@type": "Course",
"name": "Required",
"description": "Required",
"provider": "Required (Organization)",
"courseCode": "Optional",
"hasCourseInstance": "Recommended"
}

For training programs.

{
"@type": "JobPosting",
"title": "Required",
"description": "Required",
"datePosted": "Required",
"validThrough": "Required",
"employmentType": "Required",
"hiringOrganization": "Required",
"jobLocation": "Required"
}

For hiring pages. Google has a separate Indexing API for JobPosting.

{
"@type": "Product",
"name": "Required",
"image": "Required",
"description": "Recommended",
"brand": "Recommended",
"offers": "Recommended (price, availability)",
"aggregateRating": "Optional (if real ratings)",
"review": "Optional"
}

For e-commerce. Don’t fake ratings — Google has manual actions for this.

For multiple schemas on one page, use @id to link them:

{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://example.com/#organization",
"name": "Example"
},
{
"@type": "WebSite",
"@id": "https://example.com/#website",
"publisher": { "@id": "https://example.com/#organization" }
},
{
"@type": "WebPage",
"@id": "https://example.com/about/#webpage",
"isPartOf": { "@id": "https://example.com/#website" },
"about": { "@id": "https://example.com/#organization" }
}
]
}

This builds a connected knowledge graph that Google can interpret.