Free tool

FAQ schema generator: FAQPage JSON-LD plus matching HTML

An FAQ schema generator turns your questions and answers into FAQPage JSON-LD and the visible FAQ section that has to match it. Add, remove and reorder Q&A rows, and the tool writes an escaped, </script>-safe script tag plus <details>/<summary> HTML, and warns about empty answers, duplicate questions and markup that doesn't match the page.

Updated

Questions and answers

Question 1
Question 2
Question 3

Heading level

Script tags are ignored, so existing JSON-LD on the page can't count as visible content. Nothing leaves your browser.

Validation

  • Note: Google shows FAQ rich results only for well-known, authoritative government and health websites (since August 2023). The markup is still valid and helps other machines parse your Q&A.

Paste into the page

<section class="faq">
  <h2>Frequently asked questions</h2>
  <details>
    <summary>Is there a free trial?</summary>
    <p>Yes. Every plan includes a 14-day free trial, and no card is required to start.</p>
  </details>
  <details>
    <summary>Do you use cookies?</summary>
    <p>No. The default tracking mode stores nothing on the visitor&#39;s device, so most sites don&#39;t need a cookie banner for it.</p>
  </details>
  <details>
    <summary>Can I cancel any time?</summary>
    <p>Yes. You can cancel from the billing page and keep access until the end of the period you paid for.</p>
  </details>
</section>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Is there a free trial?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. Every plan includes a 14-day free trial, and no card is required to start."
      }
    },
    {
      "@type": "Question",
      "name": "Do you use cookies?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. The default tracking mode stores nothing on the visitor's device, so most sites don't need a cookie banner for it."
      }
    },
    {
      "@type": "Question",
      "name": "Can I cancel any time?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. You can cancel from the billing page and keep access until the end of the period you paid for."
      }
    }
  ]
}
</script>

Preview

Frequently asked questions

Is there a free trial?

Yes. Every plan includes a 14-day free trial, and no card is required to start.

Do you use cookies?

No. The default tracking mode stores nothing on the visitor's device, so most sites don't need a cookie banner for it.

Can I cancel any time?

Yes. You can cancel from the billing page and keep access until the end of the period you paid for.

Key takeaways

  • Since August 2023 Google shows FAQ rich results only for well-known, authoritative government and health websites. Most sites won't get the expandable result in Google.
  • The markup is still valid schema.org and still helps machines, including AI answer engines, parse your page as a set of questions with their answers.
  • Every question and answer in the JSON-LD must be visible on the page, in the same words. That's why this tool generates both from the same rows.
  • Escape < inside JSON-LD. An answer that mentions </script> would otherwise end the script tag early and break the page.

What FAQ markup will and won't do in Google

Google announced in August 2023 that FAQ rich results are limited to well-known, authoritative government and health sites (Google Search Central blog). Adding FAQPage markup won't bring the dropdowns back for a SaaS or e-commerce site. It doesn't hurt either, and the FAQPage documentation still describes the format.

How to add FAQ schema to a page

  1. 1.Write the questions people actually ask: from support tickets, sales calls, or the search queries in Search Console. One question per row.
  2. 2.Answer each one in a full sentence that makes sense on its own. Answer engines quote single passages, so the first sentence should carry the answer.
  3. 3.Put the rows in the order a reader needs them, using Move up and Move down. The JSON-LD follows the same order as the visible list.
  4. 4.Fix every error the validator flags. Paste your live page's HTML into the check box if the FAQ already exists, so mismatched wording shows up as warnings.
  5. 5.Copy the HTML into the page where the FAQ should appear and the script tag anywhere in the same page, then test the URL with Google's Rich Results Test or the Schema Markup Validator.

Example: FAQ section with matching JSON-LD

<section class="faq">
  <h2>Frequently asked questions</h2>
  <details>
    <summary>Is there a free trial?</summary>
    <p>Yes. Every plan includes a 14-day free trial.</p>
  </details>
</section>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Is there a free trial?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. Every plan includes a 14-day free trial."
      }
    }
  ]
}
</script>
The question and answer text are identical in the visible HTML and in the JSON-LD.

Why <details> and <summary>

A native <details> element collapses without JavaScript, works with the keyboard and screen readers, and keeps the answer in the HTML that crawlers read, even while it's closed. Crawlers that don't run JavaScript, which includes most AI crawlers, still see every answer.

Common FAQ schema mistakes

  • Marking up Q&A that isn't on the page, or that's only loaded after a click by JavaScript. Google's guidelines require the content to be visible to users.
  • Different wording in the markup and on the page, usually because one was edited and the other wasn't.
  • Empty or one-word answers. acceptedAnswer.text is required and should answer the question in full.
  • The same question twice, often from a theme block and a plugin both adding FAQ markup. Check the page source for more than one FAQPage block.
  • Using FAQPage for user-submitted questions with several answers. That's QAPage, a different type.
  • Unescaped JSON-LD built by string concatenation. A quote or </script> in an answer breaks the JSON or the whole page.

Is it worth adding FAQ schema in 2026?

For Google's rich results, only if you run a well-known government or health site. For everyone else, it's a cheap, accurate description of content you already have. A clear FAQ section helps readers and gives search and answer engines self-contained answers to quote. The markup labels which text is the question and which is the answer. Don't expect a ranking or traffic jump from it alone.

VisitTrack can show you whether that content gets read and whether it sends visitors. AI crawler tracking records which AI crawlers, such as ChatGPT, Claude and Perplexity, fetch the page, and visits referred by AI assistants appear in their own AI channel. To see which questions readers open, send a custom event when a <details> element is toggled open, for example window.visitrack?.("faq_opened", { question }).

Frequently asked questions

What is FAQ schema?

FAQ schema is FAQPage structured data, usually written as JSON-LD, that lists the questions on a page and the accepted answer to each. It tells search engines and other machines which text is a question and which text answers it.

Does Google still show FAQ rich results?

Only for well-known, authoritative government and health websites. Google made that change in August 2023. For other sites the markup is still valid, but the expandable FAQ result no longer appears in Google Search.

Is FAQ schema still useful if Google doesn't show it?

It can be. The markup is a clean, machine-readable version of your Q&A that other search engines and AI answer engines can parse. The bigger benefit is usually the visible FAQ itself: clear, self-contained answers that readers and engines can quote.

Do the questions in the markup have to appear on the page?

Yes. Google's guidelines require every question and answer in FAQPage markup to be visible to users on the page. Use the same wording in both places. This tool generates the HTML and the JSON-LD from the same rows so they can't drift apart.

Can I put HTML inside the answer text?

Google allows a limited set of HTML tags in Answer.text, such as links, lists and paragraphs. This tool treats answers as plain text so the markup and the visible HTML stay identical. Blank lines become paragraphs and single line breaks become line breaks.

Where should the FAQ JSON-LD go on the page?

Anywhere in the page's HTML. The head and the end of the body both work. Put it on the same URL as the visible FAQ, and use only one FAQPage block per page.

What's the difference between FAQPage and QAPage?

FAQPage is for questions you wrote along with your own single answer to each. QAPage is for a page with one question where users can submit answers, like a forum thread or a community Q&A site.

Related tools and guides

See which channels actually bring paying customers

VisitTrack is cookie-free analytics with revenue attribution built in. One script tag, no consent banner, live in two minutes. 14 days free, no card required.

14-day free trial · No card required · Cookie-free · Cancel anytime

Or explore the live demo first →