xeo.works
xeo.works/resources/schema-implementation-guide
JSON-LD Schema Implementation Guide for B2B SaaS
Step-by-step guide to implementing structured data that Google and AI search platforms can parse. 7 schema types, copy-paste templates, and validation workflow.
JSON-LD structured data is the machine-readable layer that tells Google and AI search platforms what your content is — not just what it says. For B2B SaaS sites, schema markup is the difference between a search result with a generic blue link and one with rich snippets, FAQ dropdowns, and structured author attribution. It is also a foundational signal for AI search citation: platforms like ChatGPT, Perplexity, and Claude use structured data to determine entity identity, content authority, and topical relevance.
This guide walks through the 7 schema types every B2B SaaS site needs, in order of implementation priority. Each section includes required fields, optional fields, copy-paste templates, and the mistakes that break them. If you are building or auditing a B2B SaaS SEO program, schema is the infrastructure layer that makes everything else work harder.
~33%
Google results with rich results from structured data
Search Engine Journal
4 pos.
Average ranking advantage for pages with schema
Milestone Research
33%
Websites using any form of structured data
W3Techs 2025
The 7 Schema Types in Priority Order
Implement these in sequence. Each type builds on the one before it — Organization defines who you are, BreadcrumbList defines your site hierarchy, and Service/Article/FAQ describe what you offer and publish. Skipping the foundation types means the later types lack context.
Organization
Foundation: who you are
WebSite
Site identity + search
BreadcrumbList
Hierarchy on every subpage
Service
What you offer
Article
Blog and content pages
FAQPage
FAQ sections
HowTo
Process and methodology
Organization / ProfessionalService Schema
Organization schema is the identity layer. It tells search engines and AI platforms who you are, what you do, and where to find your official profiles. Every other schema type references this one via @id — if Organization is missing or broken, the rest of your structured data loses its anchor.
Use ProfessionalService (a subtype of Organization) for service businesses. Use Organization for product companies.
Organization Schema Implementation
Establish your entity identity in structured data
Set @context, @type, and @id
@context is always 'https://schema.org'. @type is 'ProfessionalService' or 'Organization'. @id is a stable URI fragment (e.g., https://your-site.com/#organization) that other schema blocks reference.
Include name, url, and description
name is your official company name. url is your canonical homepage URL. description is 1-2 sentences defining what your company does — specific to your actual services, not generic marketing language.
Add founder or employee with Person type
Include a founder or key person with @type Person, their own @id (e.g., https://your-site.com/#person), name, jobTitle, and worksFor referencing the organization @id.
Define serviceType as an array
List your actual service offerings. Be specific: 'B2B SaaS SEO Consulting' is better than 'Digital Marketing'. This array tells AI platforms exactly what expertise to associate with your entity.
Add knowsAbout array
List the topics your organization has expertise in. These should match the topics you actually publish content about. AI systems use knowsAbout to validate topical authority claims.
Include logo and areaServed
logo should be an absolute URL to your logo image. areaServed uses a Country or Place type. These fields round out the entity profile for rich results and AI context.
Template:
{
"@context": "https://schema.org",
"@type": "ProfessionalService",
"@id": "https://your-site.com/#organization",
"name": "Your Company",
"url": "https://your-site.com",
"logo": "https://your-site.com/logo.png",
"description": "Your Company is a [specific service] for [specific audience]. We [core value proposition].",
"founder": {
"@type": "Person",
"@id": "https://your-site.com/#person",
"name": "Founder Name",
"jobTitle": "Founder & CEO",
"worksFor": { "@id": "https://your-site.com/#organization" }
},
"serviceType": [
"Your Primary Service",
"Your Secondary Service"
],
"areaServed": {
"@type": "Country",
"name": "United States"
},
"knowsAbout": [
"Topic Area 1",
"Topic Area 2",
"Topic Area 3"
]
}
Common mistakes: Using a generic description like "leading provider of solutions" instead of a specific service definition. Omitting the @id so other schema blocks cannot reference the organization. Using relative URLs for logo or url fields.
WebSite Schema with SearchAction
WebSite schema defines your site as a distinct entity in search. It connects your site name to your Organization and optionally enables sitelinks search box in Google results. This schema goes on the homepage only.
WebSite Schema Implementation
Define your site identity for search platforms
Set @type WebSite with name and url
name should match how you want your site displayed in search results. url is your canonical homepage. These are both required fields.
Reference your Organization via publisher
Use publisher with an @id reference to your Organization schema (e.g., { '@id': 'https://your-site.com/#organization' }). This connects site identity to entity identity.
Add SearchAction for sitelinks search box
If your site has search functionality, add a potentialAction with @type SearchAction. The target URL pattern uses {search_term_string} as a placeholder. This enables the sitelinks search box in Google.
Keep WebSite schema on the homepage only
WebSite schema should not appear on subpages. One instance on the homepage is sufficient for Google to understand your site identity.
Template:
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "your-site.com",
"url": "https://your-site.com",
"publisher": { "@id": "https://your-site.com/#organization" },
"potentialAction": {
"@type": "SearchAction",
"target": "https://your-site.com/search?q={search_term_string}",
"query-input": "required name=search_term_string"
}
}
Common mistakes: Duplicating WebSite schema on every page. Using a different site name than what appears in Organization schema. Including SearchAction when the site has no search functionality.
BreadcrumbList Schema
BreadcrumbList defines your site hierarchy for every subpage. It helps search engines understand the parent-child relationship between pages and generates breadcrumb trails in search results. AI platforms use breadcrumbs to understand how content relates to the broader site structure.
BreadcrumbList Schema Implementation
Define page hierarchy on every subpage
Add BreadcrumbList to every subpage
Every page except the homepage should have BreadcrumbList schema. The homepage is always position 1 in the list. The current page is the last item.
Use absolute URLs for every item
Each ListItem needs a position (integer), name (display text), and item (absolute URL). Never use relative paths like /blog — always use https://your-site.com/blog.
Match breadcrumb depth to URL depth
A page at /blog/my-post needs 3 levels: Home > Blog > My Post. A page at /services needs 2 levels: Home > Services. Do not skip levels or add phantom intermediate pages.
Keep names concise and descriptive
Use short, readable names — 'Blog' not 'Our Company Blog'. Names should match what appears in visible breadcrumb navigation on the page.
Template (2-level):
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://your-site.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Page Name",
"item": "https://your-site.com/page-slug"
}
]
}
Template (3-level, for nested routes like /blog/post-slug):
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://your-site.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Blog",
"item": "https://your-site.com/blog"
},
{
"@type": "ListItem",
"position": 3,
"name": "Post Title",
"item": "https://your-site.com/blog/post-slug"
}
]
}
Common mistakes: Omitting the homepage as position 1. Using relative URLs. Adding breadcrumbs to the homepage itself. Mismatched names between schema breadcrumbs and visible breadcrumb navigation.
Service Schema
Service schema describes what your company offers. For B2B SaaS sites, this goes on every service page, landing page, and vertical page. It connects your offerings to your Organization via the provider field and tells search engines and AI platforms exactly what type of service each page describes.
Service Schema Implementation
Describe your service offerings in structured data
Set @type Service with name and description
name is the service offering (e.g., 'SEO for B2B SaaS'). description is 1-2 sentences about what the service includes. Both are required.
Include url and provider reference
url is the absolute URL of this service page. provider uses an @id reference to your Organization schema. This connects the service to your entity identity.
Define serviceType specifically
serviceType should be specific to this page: 'B2B SaaS SEO Consulting' for an SEO service page, 'Fintech SEO Consulting' for a fintech vertical page. Generic types like 'Digital Marketing' add no value.
Add audience with audienceType
Use @type Audience with an audienceType string. Be specific: 'Series A+ B2B SaaS companies' tells AI platforms exactly who this service targets.
Include areaServed
Use @type Country (or Place) with a name field. For US-focused B2B SaaS services, this is typically 'United States'.
Template:
{
"@context": "https://schema.org",
"@type": "Service",
"name": "Your Service Name",
"description": "One to two sentences describing what this service includes and who it serves.",
"url": "https://your-site.com/service-slug",
"provider": { "@id": "https://your-site.com/#organization" },
"serviceType": "Specific Service Category",
"areaServed": {
"@type": "Country",
"name": "United States"
},
"audience": {
"@type": "Audience",
"audienceType": "Your Target Audience"
}
}
Common mistakes: Using the same generic serviceType on every service page. Omitting the provider reference so the service is not connected to any entity. Writing description in marketing jargon instead of specific service definitions.
Article Schema
Article schema is required on every blog post and content page. It gives search engines and AI platforms the publication metadata they need: who wrote it, when it was published, when it was last updated, and what organization published it. Freshness signals (dateModified) directly affect AI citation priority.
Article Schema Implementation
Structured data for blog posts and content pages
Set @type Article with headline and description
headline is the H1 of the page (not the meta title). description matches the meta description. Both are required fields that AI platforms use for citation context.
Include datePublished and dateModified
Both dates must be in ISO 8601 format (YYYY-MM-DD). dateModified should be updated every time the content is substantively changed. AI platforms use dateModified as a freshness signal.
Add author with Person type and @id
author uses @type Person with name and @id (referencing the same person @id used in Organization schema). This creates a verifiable author identity chain.
Reference publisher with Organization @id
publisher uses an @id reference to your Organization schema. This connects the article to your entity and validates that your organization published it.
Include mainEntityOfPage with canonical URL
mainEntityOfPage uses @type WebPage with an @id set to the canonical URL of the page. This confirms to AI platforms which URL is authoritative for this content.
Add image with absolute URL
image should be the absolute URL to the OG image or hero image. This is used for rich results and Discover eligibility. Minimum recommended width: 1200px.
Template:
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Your Article H1 Title",
"description": "Your meta description summarizing the article content.",
"url": "https://your-site.com/blog/post-slug",
"datePublished": "2026-01-15",
"dateModified": "2026-02-10",
"author": {
"@type": "Person",
"@id": "https://your-site.com/#person",
"name": "Author Name"
},
"publisher": { "@id": "https://your-site.com/#organization" },
"image": "https://your-site.com/images/post-slug-og.png",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://your-site.com/blog/post-slug"
}
}
Common mistakes: Using the page <title> (which includes the site name suffix) instead of the H1 as the headline. Not updating dateModified when content is refreshed. Using a different author @id than the one in Organization schema, breaking the identity chain.
FAQPage Schema
FAQPage schema marks up FAQ sections so Google can display them as rich result dropdowns and AI platforms can extract direct answers. The critical rule: FAQ schema answers must match visible page content word-for-word. Mismatches between schema and displayed text can result in Google ignoring the schema entirely.
“FAQ section appears as plain text in search results. No expandable dropdowns. AI platforms must parse the full page to find answers.”
“FAQ questions appear as expandable rich results below the main listing. AI platforms can directly extract Q&A pairs with high confidence.”
FAQPage Schema Implementation
Mark up FAQ sections for rich results and AI extraction
Use @type FAQPage with mainEntity array
mainEntity is an array of Question objects. Each Question has a name (the question text) and an acceptedAnswer with @type Answer and a text field (the answer).
Match answers to visible content word-for-word
The text in acceptedAnswer must be identical to what users see on the page. Google explicitly requires this. Copy the answer text directly from your visible FAQ section into the schema.
Use plain text in answer fields
The text field in acceptedAnswer should be plain text without HTML markup. If your visible answer includes links or formatting, the schema text should be the plain-text equivalent.
Include only questions visible on the page
Do not add questions to the schema that are not displayed on the page. Every question in the schema must have a corresponding visible FAQ entry. Hidden FAQs violate Google guidelines.
Write self-contained answers
Each answer should start with a direct response in the first sentence. Avoid 'It depends' or 'Great question!' openers. The answer should make sense extracted from the page context.
Template:
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is your first question?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Direct answer in plain text. This must match the visible FAQ answer on the page word-for-word."
}
},
{
"@type": "Question",
"name": "What is your second question?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Second answer in plain text. Keep answers concise but complete — 2-4 sentences is the sweet spot."
}
}
]
}
Common mistakes: Paraphrasing visible answers in schema instead of copying them exactly. Including HTML tags in the answer text field. Adding FAQ schema without a visible FAQ section on the page.
HowTo Schema
HowTo schema describes sequential processes with discrete steps. For B2B SaaS sites, this applies to methodology pages, onboarding flows, and step-by-step guides. Google can display HowTo content as rich results with step-by-step formatting, and AI platforms use it to cite specific process steps.
HowTo Schema Implementation
Structure sequential processes for rich results
Set @type HowTo with name and description
name is the process title (e.g., 'How to implement structured data on a B2B SaaS site'). description is a 1-2 sentence summary of what the process achieves.
Define step array with HowToStep objects
Each step uses @type HowToStep with position (integer), name (step title), and text (1-3 sentence description of what happens in this step).
Include url pointing to the page
The url field should be the absolute URL of the page describing this process. Individual steps can optionally include url with fragment identifiers (e.g., #step-1).
Add totalTime in ISO 8601 duration format
If the process has a defined timeframe, use ISO 8601 duration: PT30M for 30 minutes, P90D for 90 days, PT2H for 2 hours. This is optional but improves rich result display.
Keep steps sequential and self-contained
Each step name should be a clear action. Each step text should explain what happens without requiring context from previous steps. 3-7 steps is the practical range.
Template:
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "How to [achieve specific outcome]",
"description": "Step-by-step process for [what this achieves] for [target audience].",
"url": "https://your-site.com/page-slug",
"totalTime": "PT45M",
"step": [
{
"@type": "HowToStep",
"position": 1,
"name": "Step One Title",
"text": "Description of what happens in step one. Be specific about inputs, actions, and outputs.",
"url": "https://your-site.com/page-slug#step-1"
},
{
"@type": "HowToStep",
"position": 2,
"name": "Step Two Title",
"text": "Description of step two. Each step should be independently understandable.",
"url": "https://your-site.com/page-slug#step-2"
},
{
"@type": "HowToStep",
"position": 3,
"name": "Step Three Title",
"text": "Description of step three. Include what the outcome of this step is.",
"url": "https://your-site.com/page-slug#step-3"
}
]
}
Common mistakes: Using vague step names like "Get started" instead of specific actions. Including more than 7 steps (break into sub-processes if needed). Forgetting to increment position numbers sequentially.
Validation Workflow
After implementing schema on any page, validate before deploying. Broken schema is worse than no schema — it sends conflicting signals to search engines and AI platforms.
Schema Validation Steps
Verify your structured data before deployment
Test in Google Rich Results Test
Go to search.google.com/test/rich-results, enter your page URL or paste your HTML. Verify zero errors. Warnings are acceptable but errors indicate broken structured data that Google will ignore.
Validate against Schema.org Validator
Go to validator.schema.org and paste your JSON-LD. This catches schema.org specification errors that the Google tool might not flag (wrong property types, deprecated properties).
Check for common errors
Verify: all URLs are absolute (not relative). All dates use ISO 8601 (YYYY-MM-DD). FAQ answers match visible content exactly. @id references are consistent across schema blocks. No missing required properties.
Monitor in Google Search Console
After deployment, check the Enhancements reports in Search Console (FAQ, Article, Breadcrumb, HowTo). Fix any validation errors within 48 hours of detection.
Schema Checklist by Page Type
Use this table to verify every page has the correct schema types before deploying. Multiple schema blocks per page are expected — a service page typically has 3 schema blocks (Service + BreadcrumbList + FAQPage).
Schema Types by Page Priority
Glossary Terms
DefinedTerm + BreadcrumbList
Blog Posts
Article + BreadcrumbList + FAQPage (optional)
Service Pages
Service + BreadcrumbList + FAQPage
Homepage
Organization + WebSite (foundation for all other pages)
| Page Type | Required Schema | Optional |
|---|---|---|
| Homepage | Organization, WebSite | — |
| Service pages | Service, BreadcrumbList, FAQPage | — |
| Vertical pages | Service (industry-specific), BreadcrumbList, FAQPage | — |
| Blog posts | Article, BreadcrumbList | FAQPage |
| Glossary pages | DefinedTerm, BreadcrumbList | — |
| How-to / Process pages | HowTo, BreadcrumbList | FAQPage, Service |
| Listicle pages | Article, ItemList, BreadcrumbList | FAQPage |
| About page | BreadcrumbList | Person |
| Contact page | BreadcrumbList | — |
What to Do Next
Start with Organization and WebSite schema on your homepage. These two blocks create the entity foundation that every other schema type references. Without them, Service, Article, and FAQ schema lack the @id anchor that connects structured data to your brand identity.
Once the foundation is in place, add BreadcrumbList to every subpage, then layer Service schema on service pages and Article schema on blog posts. FAQPage and HowTo come last — they enhance pages that already have solid base schema.
For the full technical SEO methodology that includes schema implementation, see SEO for B2B SaaS. To understand how schema feeds into AI search citations, read the AEO Optimization service page.
If you want a schema audit across your entire site, reach out to us. We typically find 3-5 structural issues per site that are invisible without a manual review.
Free resource from xeo.works — Cross-Engine Optimization for B2B SaaS. Download at xeo.works/resources/schema-implementation-guide