The previous post Three Things to Do First for AEO stopped at Organization for JSON-LD — telling AI who you are. This post goes one layer deeper: FAQPage — telling AI "when someone asks X, your answer is Y". Done right, ChatGPT will quote your FAQ word-for-word, not paraphrase.
Why FAQPage Matters for AEO
When AI summarizes a page, it's doing two things:
- Understanding what the page is about
- Extracting the snippet most relevant to the user's question
Plain text is an unlabeled soup — AI has to guess which sentences are questions, which are answers, which are conclusion, which are setup. Wrong guess = wrong citation, or no citation.
FAQPage schema hands AI the "question → answer" pairs directly:
{
"@type": "Question",
"name": "How long does a custom system typically take to launch?",
"acceptedAnswer": {
"@type": "Answer",
"text": "A typical B2B internal system launches as MVP in 3–6 months..."
}
}
When AI sees this structure, extraction cost is zero — it doesn't guess or infer, it just takes. Especially valuable for B2B, because B2B decision-makers literally ask things like "how long does this take", "how much to integrate", "does it talk to our existing ERP".
Three Decisions to Make Before You Code
After doing FAQPage on our own site, three decisions need to be made up front:
1. Which pages get FAQPage?
Not every page. Our rule:
- Yes: service pages, product pages, landing pages, pricing pages
- No: About, team, blog listing pages
- Depends: individual blog posts. If the structure is Q&A, yes; if it's a long essay, forcing it into Q&A distorts the content.
Why: FAQPage is for readers with specific questions. Service pages fit; blog posts usually don't.
2. Write the question the way users actually ask, not the way you describe it
Wrong:
Q: What is included in our custom software development service offering?
That's corporate-speak. Users don't talk like that.
Right:
Q: How long does a custom system typically take to launch?
Q: What's the budget range for an ERP integration project?
Q: Do you maintain the system after launch, or do we?
These are sentences users actually type into ChatGPT.
Can't think of them? Cheap trick: type "I'm looking for XX service" into ChatGPT and see what follow-up questions it auto-suggests. Those are the questions you need to answer.
3. First sentence of every answer = the conclusion. Then supporting detail.
AI typically extracts the first one or two sentences. So:
A: A typical B2B internal system launches as MVP in 3–6 months.
Complex integrations (cross-ERP / CRM / multi-region) usually run 6–9 months.
Actual timeline depends on requirements clarity, existing tech debt, data migration scope.
Sentence 1: concrete numbers inside 30 words. Sentence 2: conditions. Sentence 3: variables. AI will probably only grab sentence 1 — and that's fine, because sentence 1 alone answers the question.
Counterintuitive point: traditional business writing loves buildup and saves the punchline for last. For AEO, that's backwards — AI grabs the first two sentences and moves on. Your key conclusion, saved for the end, never gets extracted.
B2B Service Page Implementation: Full Example
Using our own "Custom Software Development" service page. Next.js App Router + TypeScript.
Step 1: Define the FAQ Data
src/lib/faqs/custom-software.ts:
export interface FAQ {
question: string;
answer: string;
}
export const customSoftwareFAQs: FAQ[] = [
{
question: 'How long does a custom system typically take to launch?',
answer: 'A typical B2B internal system launches as MVP in 3–6 months; complex integrations take 6–9 months. Actual timeline depends on requirements clarity, existing tech debt, and data migration scope.',
},
{
question: 'What\'s the budget range for an ERP integration project?',
answer: 'Mid-sized B2B ERP integration projects typically run US$25K–100K. Below $25K is usually a single-point connection; above $100K usually means building a custom ERP or deeply integrating multiple systems. We offer free scope assessment.',
},
{
question: 'Do you maintain the system after launch, or do we?',
answer: 'Either works. Most clients pick a three-month handover — we maintain for the first three months, then hand off to the internal team; some prefer a long-term retainer. Handover includes full technical documentation and a handover session.',
},
{
question: 'Can you integrate with our existing ERP / CRM?',
answer: 'We\'ve integrated the major ERPs (SAP, Oracle, Dingxin, Chenghang, Odoo) and CRMs (Salesforce, HubSpot, Zoho). For legacy systems with strict API limits, we use DATA-BEE as a data-layer bridge.',
},
];
Step 2: Schema Generator
src/lib/schema.ts (continued from the previous post):
import type { FAQ } from './faqs/custom-software';
export function getFAQPageSchema(faqs: FAQ[]) {
return {
'@context': 'https://schema.org',
'@type': 'FAQPage',
mainEntity: faqs.map((faq) => ({
'@type': 'Question',
name: faq.question,
acceptedAnswer: {
'@type': 'Answer',
text: faq.answer,
},
})),
};
}
Step 3: Use It on the Service Page
src/app/services/custom-software/page.tsx:
import { JsonLd } from '@/components/JsonLd';
import { getFAQPageSchema } from '@/lib/schema';
import { customSoftwareFAQs } from '@/lib/faqs/custom-software';
export default function CustomSoftwarePage() {
return (
<>
<JsonLd data={getFAQPageSchema(customSoftwareFAQs)} />
{/* main service page content */}
<section className="py-20">
<h2 className="text-3xl font-bold mb-10">Frequently Asked Questions</h2>
<div className="space-y-4">
{customSoftwareFAQs.map((faq) => (
<details key={faq.question} className="group border-b pb-4">
<summary className="text-lg font-medium cursor-pointer">
{faq.question}
</summary>
<p className="mt-3 text-neutral-600 leading-relaxed">
{faq.answer}
</p>
</details>
))}
</div>
</section>
</>
);
}
Two traps to watch:
- JSON-LD content and visible FAQ must match. Questions in the schema must appear visibly on the page. Schema with 10 Qs but page only shows 3 = cloaking, and Google can demote you. Sharing one
customSoftwareFAQssource avoids this. - Default-collapsed
<details>is fine. AI crawlers see the fully rendered DOM regardless of visual collapse state. Collapse only affects UX, not schema validity.
Step 4: Verify
After deploy, feed the service-page URL to Rich Results Test. You should see FAQPage detected with each Q&A listed. If some are missing, it's usually JSON/page text mismatch — check the data source.
How to Test Your FAQ Schema
The step everyone skips after deploy — but this is the actual proof your schema is working for AEO.
1. Confirm schema is in the SSR HTML
The most common trap: schema rendered client-side, but AI crawlers only see SSR HTML.
curl -s https://your-site.com/contact | grep -c FAQPage
Should be ≥ 1. If it's 0, the JSON-LD isn't in the initial HTML — move it into a server component or layout.
2. Pass Google Rich Results Test
Feed your URL to Rich Results Test. Every Q&A should be listed.
⚠️ Note: Google deprecated FAQ rich results for general sites in August 2023 — only government and authoritative health sites still get the FAQ snippet block in SERP. For typical B2B, this step only validates the schema structure, not that you'll see a Google FAQ block. Structural validity is what matters for AI crawlers.
3. After 1–2 weeks, fact-check with AI engines
AI crawlers (GPTBot, ClaudeBot, PerplexityBot) re-crawl on their own cadence — don't expect immediate results. After 1–2 weeks, ask ChatGPT and Perplexity questions related to your FAQ topics (not necessarily verbatim):
- Does the answer reflect specific content from your FAQ?
- Does the AI cite your domain as the source?
Both yes → schema is doing its job for AEO. AI is now treating you as an answer source.
Don't call it a failure too soon: new domains can take 1–3 months before AI starts citing. The core deliverable of this step is "HTML actually has valid FAQPage schema" — AI citation is a matter of time.
B2B Schema Priority
Not every schema is worth doing. Our validated B2B priority:
| Schema | Priority | Why |
|---|---|---|
Organization | Must-do | The baseline for "who are you" |
FAQPage | Main driver | AI's favorite format, highest CTR |
Service | Recommended | Boost for service pages, smaller than FAQPage |
BreadcrumbList | Recommended | Good for SEO, limited for AEO |
Product | Depends | Only if you have SKUs / pricing |
Article | Depends | Blog posts can use it, limited B2B lead-gen effect |
Get Organization and FAQPage right and you capture 70% of the AEO schema upside.
Closing
FAQPage isn't a "drop it in and you're done" schema — what questions to pick, how to structure the answer, how to keep the visual UI in sync, all require engineering judgment. But the compound is strong: one design, two sources of traffic (AEO citations + SEO rich results), no ad spend, no link-building.
想把這套用在你的專案?
從盤點問題、設計流程到落地實作——Heiso 顧問團隊一起接住