Yes. And for authority pages, you should. Schema.org explicitly supports combining multiple types in a single JSON-LD @graph block. The standard stack is BlogPosting + FAQPage + BreadcrumbList with a Person author embedded inside BlogPosting. Telling AI what the content is, who wrote it, what questions it answers, and where it lives in your site hierarchy, all in a single crawl.[1]
Combine BlogPosting, FAQPage, and BreadcrumbList in a single @graph JSON-LD block. Placed in your page's <head>. On every content page you publish.
Each schema type speaks to a different dimension of authority. Together they give AI a complete picture: content type, professional identity, extractable Q&A, and site structure. All from one crawl.
Audit one page you've already published. Open View Source and search for "application/ld+json". If you have only one schema type, or none, that page is underperforming its potential right now.
@graph array is the recommended structure for combining schema types in a single JSON-LD block.<script type="application/ld+json"> tag. Never injected by JavaScript after page load.The @graph array is a JSON-LD structure that lets you declare multiple schema types in a single <script> block. Rather than writing three separate schema blocks, you write one block with an array that contains all of your schema objects. Here is the pattern every content page should follow:
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "BlogPosting",
"headline": "Your H1 headline here",
"description": "Your TL;DR text here",
"url": "https://yourdomain.com/your-page-url",
"datePublished": "2026-03-18",
"dateModified": "2026-03-18",
"author": {
"@type": "Person",
"name": "Your Name",
"url": "https://yoursite.com",
"jobTitle": "Your Title"
},
"publisher": {
"@type": "Organization",
"name": "Your Business Name",
"url": "https://yoursite.com"
}
},
{
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Your FAQ question?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Your answer text."
}
}
]
},
{
"@type": "BreadcrumbList",
"itemListElement": [
{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://yourdomain.com"},
{"@type": "ListItem", "position": 2, "name": "Pillar Name", "item": "https://yourdomain.com/pillar/"},
{"@type": "ListItem", "position": 3, "name": "Cluster Name", "item": "https://yourdomain.com/pillar/cluster/"},
{"@type": "ListItem", "position": 4, "name": "Page Title", "item": "https://yourdomain.com/pillar/cluster/node"}
]
}
]
}
This entire block goes inside a <script type="application/ld+json"> tag in your page's <head>. It is never rendered visibly. It exists purely as a machine-readable signal. Every element in this block is a direct instruction to AI engines about what your page is, who wrote it, and where it lives.
Schema types are not interchangeable. Each one answers a different question for AI engines. Understanding what each type does helps you see why stacking them produces a signal that's qualitatively different from any single type.
BlogPosting tells AI: "This is a substantive piece of original content with an author, a publication date, and a clear subject." It classifies the page as knowledge content rather than a product listing or a homepage. Without it, AI engines may not know how to categorize your content at all.
FAQPage tells AI: "This page contains machine-readable question-and-answer pairs you can extract and cite directly." This is the schema type most directly responsible for getting your content cited in AI-generated answers. Because it packages your expertise into the exact format AI systems use to construct answers.[1]
BreadcrumbList tells AI: "This page exists within a structured hierarchy." It signals topical depth and site organization. That this page is part of a coherent expertise system, not a standalone post floating in isolation.
Author (Person) embedded in BlogPosting tells AI: "There is a real, identifiable human expert behind this content." It links your content to your professional identity, which AI cross-references against off-site signals to assess credibility.[3]
The only real risk is inaccurate schema. Applying a type to content that doesn't match. Common errors include adding FAQPage schema when the page has no visible FAQ section, or listing a BreadcrumbList with URLs that return 404 errors. These create validation warnings and can undermine the credibility of your schema overall.
The solution is straightforward: let your page content drive your schema decisions. Only use FAQPage schema if you have actual FAQ questions visible on the page. Only list breadcrumb URLs that resolve correctly. Only include an author if you have an actual author byline.
When your schema accurately reflects your page content, using multiple types is entirely safe. And strongly recommended by Google's own structured data documentation.[2]
The difference is fundamental: schema markup is factual metadata, not promotional content. It does not tell AI "I am an expert". It tells AI "this content is a BlogPosting, written by this Person, on this date, answering these specific Questions." Every element is verifiable.
Google's documentation is explicit: structured data that accurately represents page content is encouraged. Structured data that makes false claims or is applied to content it doesn't describe is a violation of their policies. And AI systems are increasingly good at detecting mismatches between schema claims and actual page content.[4]
Accurate schema stacking is the opposite of a spam tactic. It is a commitment to transparency. You are explicitly telling AI systems exactly what your content contains, so they can trust what they find and cite it with confidence.
Several schema types are commonly misapplied on content pages:
HowTo schema. Only use this if your page is genuinely a step-by-step instructional guide. Applying it to narrative content that isn't structured as numbered steps creates validation errors and confuses AI classifiers.
Product schema. Only applies if you are literally marking up a product with a price, availability, and reviews. Using it on a service page is a common mistake that generates warnings in Google's Rich Results Test.
Event schema. Only applies to actual time-bound events. Do not use it to describe evergreen content, webinar recordings, or "upcoming" content without a specific date.
Review/AggregateRating schema. Only applies when you have real, verifiable reviews with a quantified rating. Fabricating this data is a Google policy violation.
The principle is consistent: the most powerful schema stack is the one that most accurately describes what's actually on the page. Accuracy compounds. Inaccuracy erodes.[1]
Every page on this site runs the full BlogPosting + FAQPage + BreadcrumbList stack. Not because it's technically impressive. It took about 20 lines of JSON-LD per page. But because I decided early on that schema is not decoration. It is the foundation the content sits on.
When I built this site, I wrote the schema structure first, then built the content to match it. That sequence might sound backwards, but it forced a useful discipline: every page had to have a real FAQ section, a real author byline, and a real position in the site hierarchy. Because the schema would have been a lie otherwise. Schema-first thinking produces better content because it forces structural honesty.
Most experts who are invisible to AI aren't invisible because they lack knowledge. They are invisible because their knowledge hasn't been formatted in a way AI can read. Multiple schema types, combined in a single @graph block, is the most direct solution to that problem. It is how you speak directly to the machines that are now deciding who gets recommended.
There is no official limit. Schema.org and Google's structured data guidelines explicitly support multiple schema types per page, combined using the @graph array in a single JSON-LD block. In practice, most content pages benefit from four types: BlogPosting, FAQPage, BreadcrumbList, and an embedded Author (Person) within BlogPosting. Adding more beyond this core stack produces diminishing returns unless the additional type matches a real content element on the page.
No. When implemented correctly. The risk is not quantity but accuracy. Schema that contradicts visible page content, or schema types applied to content they don't describe, can cause validation errors. The rule is simple: only mark up what's actually on the page. If you have a FAQ section, use FAQPage schema. If you have an author byline, use Author schema. The schema should reflect reality, not aspirations.
One combined block using the @graph array is the recommended approach. Google explicitly supports this pattern, and it keeps your structured data organized and easier to validate. Multiple separate JSON-LD blocks are technically valid but harder to audit, and some validators display them inconsistently. The @graph pattern is the modern standard for structured data implementation.
Always use a separate JSON-LD script block in your page's <head> section. Inline microdata and RDFa are older formats that are harder to maintain and audit. JSON-LD is Google's preferred format and the one most AI crawlers are optimized to parse. It keeps your schema code cleanly separated from your HTML content, which makes it easier to update and validate.
Not identically, but the signal overlaps significantly. Google's systems use structured data for rich results and knowledge graph entries. AI language models like GPT and Claude use structured data as a high-confidence signal about content type, authorship, and topic. Which directly influences whether your content gets cited in AI-generated answers. Schema.org vocabulary was specifically designed to be machine-readable across different systems, not just Google.
Take the free AI Visibility Scan to discover your current positioning, or explore the complete build system.