FAQPage schema is implemented as a JSON-LD block in the page head that lists each question and answer pair from the page's FAQ section. The implementation is straightforward — each question and answer becomes an object in the mainEntity array — but getting it right requires that the answer text in the schema matches the visible answer text on the page, and that the question text matches the visible question heading.

The Complete FAQPage JSON-LD Structure

The FAQPage schema requires three levels of nesting: the FAQPage type declaration at the root, an array of Question objects in the mainEntity property, and an Answer object inside each Question. The Question's "name" field contains the question text. The Answer's "text" field contains the full answer. The answer text should be a complete, self-contained answer — not "see above" or a partial response that requires context from the surrounding page.

How Many FAQs to Include

There is no strict limit, but including 5 to 8 questions per page is the common practice for AEO purposes. More questions provide more extraction opportunities for AI systems. Fewer, more comprehensive questions perform better than many shallow ones. Each question should be something a real user would ask, phrased in natural language — not keyword-stuffed phrases dressed as questions.

Using @graph for Multiple Schemas on One Page

Pages with both Article and FAQPage schemas should use the "@graph" array format, which allows multiple schema types in a single JSON-LD block. The Article type and FAQPage type are listed as separate objects in the @graph array. This is the cleanest implementation for pages that are both articles and contain FAQ sections — which describes most AEO-optimized blog content. The Omni AEO implementation service deploys the full @graph format on every qualifying page.