The minimum schema markup every SaaS homepage needs in 2026
A copy-paste guide to the JSON-LD schema markup every B2B SaaS homepage should ship in 2026. Five schema types, the exact fields that matter, and a complete working example you can adapt today.
— TL;DR
Every B2B SaaS homepage in 2026 should ship five JSON-LD schema types: Organization, WebSite, Service, BreadcrumbList, and FAQPage. Total cost is 1 to 3KB of inline JSON. Structured data tells search and AI engines what a page is without guesswork. It is cheap, sensible groundwork, not a guarantee of citations.
Schema markup is one of the cheapest pieces of AEO groundwork in 2026. Many B2B SaaS sites still ship with little or no schema, which makes it an easy gap to close.
This piece is the practical version. It covers the five schema types every B2B SaaS homepage should ship, the exact fields that matter, and a complete working example you can copy-paste and adapt.
#What schema markup actually does
Schema markup is structured data (JSON-LD blocks embedded in your HTML) that tells search engines and AI engines what each piece of your page is. Not just "this is text," but "this is a Service offered by an Organization, with these tiers and these prices."
In classic SEO, schema influences rich-result eligibility (the price snippet that shows up below a Google search result for a SaaS pricing page). In AEO, the case for schema is clarity: JSON-LD states who you are and what you sell in a form a machine can read without inferring it from the layout. How much weight each AI engine gives structured data is not public, so treat it as groundwork that removes guesswork, not as a guaranteed ranking lever.
The cost of adding schema is about one engineer-day per page type. Changes are picked up as crawlers revisit the site, which tends to take weeks rather than days.
#The five types every SaaS homepage needs
Organization → Who you are as a business
WebSite → The site itself, with search action
BreadcrumbList → Navigation path on every non-home page
FAQPage → Q&A blocks on every page that has them
Service → Each product/service you sell
If your homepage ships these five (and they validate), you've covered most of the schema groundwork.
#1. Organization
The base schema. Every page should include this. It describes the entity that search and AI engines are asked about when someone names your brand.
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://acme.com#organization",
"name": "Acme",
"legalName": "Acme Software, Inc.",
"url": "https://acme.com",
"description": "AI workflow automation for B2B SaaS operations teams.",
"email": "hello@acme.com",
"foundingDate": "2023",
"sameAs": [
"https://twitter.com/acme",
"https://linkedin.com/company/acme",
"https://github.com/acme"
],
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer support",
"email": "support@acme.com",
"availableLanguage": ["English"]
}
}
Fields that matter most:
@id. A stable, unique identifier for the organization. Other schemas reference this so AI engines understand the entity graph.name. The brand name, exactly as you want it cited.url. Canonical homepage URL.description. One-sentence elevator pitch. This is the kind of sentence an AI engine can reuse when answering "what is Acme."sameAs. An array of URLs to your authoritative profiles. It helps a machine confirm that those profiles and your site belong to the same entity. Include Twitter/X, LinkedIn (company page), GitHub, Crunchbase, Product Hunt, wherever you have a real presence.
Common mistakes: Skipping @id (leaves parsers to guess how your entities connect). Listing sameAs to weak or fake profiles (misleading, and likely to count against you).
#2. WebSite
Goes on the homepage. Tells AI engines this is a website with a name, and optionally that it has search.
{
"@context": "https://schema.org",
"@type": "WebSite",
"@id": "https://acme.com#website",
"url": "https://acme.com",
"name": "Acme",
"description": "AI workflow automation for B2B SaaS operations teams.",
"publisher": { "@id": "https://acme.com#organization" },
"potentialAction": {
"@type": "SearchAction",
"target": "https://acme.com/blog?q={search_term_string}",
"query-input": "required name=search_term_string"
}
}
Fields that matter most:
publisher. References the Organization@id. This is the entity-graph link.potentialAction.SearchAction. Only if you have site search. If you don't, omit this entire block (don't fake it).
Common mistakes: Adding fake SearchAction to sites without search (it describes a feature that isn't there, which is misleading). Putting WebSite schema on every page (only the homepage needs it).
#3. BreadcrumbList
Goes on every non-home page. Tells AI engines the navigation hierarchy of the page they're looking at.
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://acme.com/" },
{ "@type": "ListItem", "position": 2, "name": "Services", "item": "https://acme.com/services" },
{ "@type": "ListItem", "position": 3, "name": "Workflow Builder", "item": "https://acme.com/services/workflow-builder" }
]
}
Fields that matter most:
- The
positionintegers must be 1-indexed and consecutive. - The
itemURLs must be absolute (with scheme + domain), not relative. - The last breadcrumb should match the page you're on.
Common mistakes: Skipping BreadcrumbList on deep pages because "the navigation is obvious." It's not obvious to crawlers.
#4. FAQPage
Goes on every page that has explicit Q&A. Homepage, service pages, pillar blog posts. This is a schema type well worth shipping. Conversational AI is built around question-answering, and FAQ-structured content appears to be quoted often for that reason.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How much does Acme cost?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Acme starts at $99/month for the Starter tier (up to 10,000 workflow executions). Team is $399/month (100,000 executions). Enterprise is custom pricing for unlimited executions and SLA."
}
},
{
"@type": "Question",
"name": "Can I migrate from Zapier or Make to Acme?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. Acme has a one-click import for Zapier flows and a guided import for Make scenarios. Most teams complete a 50-flow migration in under a day."
}
}
]
}
Fields that matter most:
namein the Question. Phrase it the way your ICP would actually type it into ChatGPT. Short, conversational, includes entities (brand names, prices, comparisons).textin the Answer. Give a real, complete answer in 2–4 sentences. Don't tease ("learn more on our pricing page" is useless to an AI engine). Include the actual fact.
Common mistakes: Skipping FAQPage schema even when the page has FAQ content (you've done the writing work; ship the schema). Marketing-speak answers that say nothing. FAQs that aren't actually frequently asked questions.
#5. Service
Goes on every service or product page. Describes what you sell, who provides it, and what offers are available.
{
"@context": "https://schema.org",
"@type": "Service",
"@id": "https://acme.com/services/workflow-builder#service",
"name": "Acme Workflow Builder",
"description": "Drag-and-drop automation builder with AI agents and 350+ integrations.",
"provider": { "@id": "https://acme.com#organization" },
"areaServed": { "@type": "Place", "name": "Worldwide" },
"url": "https://acme.com/services/workflow-builder",
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Workflow Builder Pricing",
"itemListElement": [
{
"@type": "Offer",
"name": "Starter",
"price": 99,
"priceCurrency": "USD",
"description": "Up to 10,000 executions/month",
"availability": "https://schema.org/InStock"
},
{
"@type": "Offer",
"name": "Team",
"price": 399,
"priceCurrency": "USD",
"description": "Up to 100,000 executions/month",
"availability": "https://schema.org/InStock"
}
]
}
}
Fields that matter most:
provider. References Organization@id. Entity graph link.hasOfferCatalog. Wraps your pricing tiers. AI engines can draw on this when answering "how much does X cost."Offer.price. Must be a number (not a string), withpriceCurrencyseparately.
Common mistakes: Putting price as "$99" instead of 99 + "USD". Skipping availability (defaults vary by validator). Listing every minor variant as a separate Offer (keeps it noisy; ship the 2–4 main tiers only).
#The complete homepage example
Here's what a B2B SaaS homepage's full schema graph should look like in 2026. Concatenate all five into a single <script> tag using @graph:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://acme.com#organization",
"name": "Acme",
"url": "https://acme.com",
"description": "AI workflow automation for B2B SaaS operations teams.",
"email": "hello@acme.com",
"sameAs": [
"https://twitter.com/acme",
"https://linkedin.com/company/acme",
"https://github.com/acme"
]
},
{
"@type": "WebSite",
"@id": "https://acme.com#website",
"url": "https://acme.com",
"name": "Acme",
"publisher": { "@id": "https://acme.com#organization" }
},
{
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How much does Acme cost?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Acme starts at $99/month for Starter, $399/month for Team, and custom pricing for Enterprise."
}
}
]
}
]
}
</script>
The @graph pattern lets you ship multiple schemas in one block, with shared @context.
#Schema for blog posts and case studies
Every blog post and case study should ship Article schema:
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"@id": "https://acme.com/blog/picking-automation-platform-2026#article",
"headline": "How to pick the right automation platform in 2026",
"description": "A practical comparison of n8n, Zapier, Make, and Acme for B2B SaaS teams.",
"image": "https://acme.com/api/og?title=...",
"url": "https://acme.com/blog/picking-automation-platform-2026",
"datePublished": "2026-03-15T00:00:00.000Z",
"dateModified": "2026-04-20T00:00:00.000Z",
"author": { "@id": "https://acme.com#organization" },
"publisher": { "@id": "https://acme.com#organization" },
"mainEntityOfPage": "https://acme.com/blog/picking-automation-platform-2026"
}
If you have named authors, replace author with a Person schema reference. If you write under brand voice (which we do at SolvSpot), use Organization-as-author. Named authors are widely reported to help with AI citations, but skipping them is a defensible privacy choice.
Don't forget dateModified. AI engines appear to favor recently updated content. Set it whenever the page is actually edited, and not otherwise.
#How to actually ship this
The right pattern is to centralize schema generation in one file rather than copy-pasting JSON-LD blocks across pages.
In Next.js, that looks like:
// src/lib/schema.ts
const baseOrg = () => ({
"@type": "Organization",
"@id": `${siteUrl}#organization`,
name: "Acme",
url: siteUrl,
description: "...",
sameAs: [...],
})
export function homepageSchema() {
return {
"@context": "https://schema.org",
"@graph": [baseOrg(), baseWebsite(), faqPageSchema(faqs)],
}
}
export function serviceSchema(input) {
/* ... */
}
export function articleSchema(input) {
/* ... */
}
Then in your page:
import { homepageSchema } from "@/lib/schema"
export default function HomePage() {
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(homepageSchema()) }}
/>
{/* ... rest of page ... */}
</>
)
}
The benefit of centralizing: schema fields can't drift across pages, and updating any field (organization name, sameAs URLs, FAQ content) updates everywhere automatically.
#Validating
Before pushing schema to production, validate it:
- Google Rich Results Test. Paste the URL or HTML; it tells you which schemas are valid and which are eligible for rich results.
- Schema.org Validator. Stricter than Google's; catches errors Google may silently ignore.
- Manual JSON parse:
curl https://yoursite.com/ | grep -A 100 'application/ld+json' | jqto verify the JSON parses and looks right.
Run all three on every page type when you ship. Run them again after every schema change.
#Common mistakes that kill the AEO benefit
Common ways to waste schema work:
- Copy-pasting from competitors without changing fields. AI engines parse the actual content; an Organization schema with someone else's
nameandsameAsis gibberish. @idcollisions. Two different schemas using the same@idconfuses the entity graph. Each schema needs a unique@id(a fragment URL likehttps://site.com/page#schema-typeworks well).- Schema for paywalled content. AI engines can't read content behind a login; Article schema for a gated post is misleading.
sameAsto inactive profiles. A LinkedIn page with no posts in 2 years signals dead brand. Either invest in keeping the profile current or omit it.- Skipping
descriptionandimage. Both can be used for the snippet shown alongside a result or citation. A schema without them leaves that to chance.
#The 30-day rollout plan
If you're starting from zero schema, here's the order:
Day 1: Ship Organization + WebSite on the homepage. Validate.
Day 2–3: Add BreadcrumbList to every non-home page.
Day 4–7: Add FAQPage schema to your homepage and every service page. This is the step to prioritize.
Day 8–14: Add Service schema to every service or product page, with OfferCatalog if you have public pricing.
Day 15–21: Add Article schema to every blog post and case study. Set dateModified correctly.
Day 22–30: Add HowTo schema to your process / how-it-works page if you have one.
By day 30 the schema baseline is in place across the site.
#What to expect
Schema changes are picked up as crawlers revisit the site, which tends to take weeks rather than days. In classic search, rich-result eligibility updates after Google re-crawls and validates the page. In AI search there is no published timeline, and schema on its own does not guarantee a change in citations.
Don't expect a dramatic spike. Record a baseline before you ship, then compare after a few months, so any change is measured rather than assumed.
#TL;DR
Five schemas every B2B SaaS homepage needs in 2026:
- Organization (every page)
- WebSite (homepage)
- BreadcrumbList (every non-home page)
- FAQPage (every page with Q&A)
- Service + OfferCatalog (every service or product page)
Centralize generation, validate before shipping, and record a baseline so any change in citations is measured rather than assumed.
If you would like this checked as part of a wider technical baseline, our AI search visibility audit reviews it in one week for a fixed $1,800, and implementing the fixes is quoted separately. A free 20-minute call is the place to start. Or (since this is genuinely a one-week engineering job) ship it yourself.
Common questions.
Does schema markup actually move rankings?
Not directly. Google has long said schema markup doesn't directly affect rank. It affects rich-result eligibility. For AI search, how much weight each engine gives structured data is not public. What schema does is state what a page is in a form machines can read without guessing. It is cheap to add and worth doing, but it does not guarantee rankings or citations.
What's the difference between Organization and LocalBusiness schema?
Organization is the right choice for most B2B SaaS. It represents your business as an entity. LocalBusiness is for businesses with a physical storefront customers visit. If your SaaS doesn't have a public-facing physical location, use Organization. Both can include address fields, but LocalBusiness implies foot traffic.
Should I add schema to every page or just the homepage?
Every page that's worth indexing. The minimum on every page is Organization + BreadcrumbList. Service pages should add Service + Offer. Blog posts and case studies should add Article. About pages should add Person if you have a named team, Organization-only otherwise. The cost of adding schema grows with the number of page types, so generate it from one place.
How do I validate my schema?
Use Google's Rich Results Test (search.google.com/test/rich-results) and Schema.org Validator (validator.schema.org). Both are free, both catch most of the mistakes that matter. Validate every page type before pushing schema changes to production.
Will adding schema slow down my page?
No, in any practical sense. JSON-LD adds 1-3KB of inline JSON to your HTML. Far smaller than a typical CSS or JS bundle. The performance cost is negligible.
— Want help with this?
Get found in AI search ↗
The technical groundwork that helps ChatGPT, Perplexity and Google's AI answers understand your site and cite it: structured data, llms.txt, crawler access and content built to be quoted.
— Keep reading
AI Search & SEO
AI search attribution in GA4: how to track ChatGPT, Perplexity and Copilot referrals
How to track visits from ChatGPT, Perplexity, Copilot, Gemini and Claude in GA4. What the built-in AI Assistant channel covers, what still lands in Referral, Direct or Organic Search, a custom channel group that fills the gaps, and how to attribute conversions to AI search.
Read post
AI Search & SEO
How to get cited by ChatGPT in 2026: a B2B SaaS playbook
Why isn't your SaaS cited by ChatGPT, and what can you do about it? A plain guide for B2B software teams: how ChatGPT search finds its sources, a seven-point check you can run in an hour, the page changes that help, what is still unproven, and a 30-day plan.
Read post
AI Search & SEO
Schema.org for B2B agencies: a 2026 implementation guide
A practical schema.org implementation guide for B2B agencies in 2026. The seven JSON-LD types an agency site needs, two optional ones (ProfessionalService and HowTo), the patterns for services and price tiers, and the validation habits that keep schema accurate as the site grows.
Read post