How to add FAQ schema to a page without the markup drifting
Collect the visible pairs, generate FAQPage JSON-LD, render it from the same data as the page, and check the live URL.
By ClaudeGPT Si Newsroom, Editorial team
3 min read
To add FAQ schema to a page, put a FAQPage JSON-LD block inside a script type="application/ld+json" tag on the same page that shows the questions, with each question and answer copied exactly from the visible text. The quickest way to produce that block is the seogeoaeo.ai FAQ Schema Builder; then you render it from your template and check the live URL.
Here is how to add FAQ schema step by step, with the developer details that tutorials tend to skip.
Before you start: check the page qualifies
FAQ markup belongs on pages where the questions and answers are written out for readers. The seogeoaeo.ai tool page states that every question and answer in FAQPage markup must appear on the page, and Google's general guidelines say not to mark up content readers cannot see. A support page with a visible FAQ section qualifies. A product page with no questions on it does not, however handy the markup might look.
Set expectations too. Google's documentation changelog records that FAQ rich results stopped appearing in Google Search on May 7, 2026. You are adding accurate structure, not chasing a search feature.
Step 1: collect the pairs
List each question and its answer as plain text, one pair per line, separated by a pipe: Question | Answer. Pull them from the source your page renders, such as a Markdown file, a CMS field or a JSON config, so the markup and the page cannot drift apart.
Step 2: generate the JSON-LD
Paste the list into the seogeoaeo.ai FAQ Schema Builder. It returns FAQPage JSON-LD and previews it against the validator rules, for 3 credits a run. An optional page URL is display only and is never fetched. If you work from a terminal, the same builder is a REST endpoint and an MCP tool named faq-schema-builder, called with a workspace API key.
Step 3: render it in the template
Where you place the block depends on your stack.
| Stack | Where the block goes |
|---|---|
| Static HTML | Paste the script tag in the head or the body of the page |
| Server-rendered templates | Output it from the same data that renders the FAQ section |
| React or Next.js | Render a script tag with the JSON string as its contents |
| CMS | Use a custom HTML or code block on that page only |
Google reads JSON-LD in either the head or the body, so pick whichever your framework makes easiest. The point that matters more is the source of truth: generate both the visible FAQ and the JSON-LD from one list. If someone edits an answer on the page, the markup should change with it.
Escape carefully when you build the string in code. Answers with double quotes, line breaks or HTML need proper JSON escaping, and a single bad character makes the whole block unparseable. Serializing an object with your language's JSON encoder is safer than string concatenation.
Step 4: check the live page
Deploy, then run the seogeoaeo.ai Schema Markup Checker on the URL. It reports blocks that fail to parse and required or recommended properties that are missing. A free second opinion is validator.schema.org, which parses JSON-LD, RDFa and Microdata.
Common mistakes
- One FAQ block repeated on every page of the site, regardless of what each page shows.
- Answers in the markup that are longer or different from the visible ones.
- Questions that exist only in the markup and never render on the page.
- Two FAQPage blocks on one page from a plugin and a hand-written snippet.
When a generator is overkill
For a page with two fixed questions, writing the JSON yourself takes a minute and costs nothing. The builder earns its credits once lists get long, answers get messy, or you want an API call in your build step. For most teams adding FAQ schema to real support pages, seogeoaeo.ai is the straightforward choice.