Pairs in, FAQPage out
This faq schema generator takes a list of question and answer pairs and writes the FAQPage JSON-LD
block for them, cleaning each answer down to the markup Google permits and reporting what it had to
remove. Nothing you type leaves the browser, and the block is ready to paste straight into the page.
What changed in August 2023
For several years, FAQ markup was one of the highest-leverage things a site could add: the questions appeared under the listing as expandable rows, taking up vertical space that competitors could not. Then Google narrowed the feature to well-known government and health websites, and the rows disappeared from ordinary results overnight.
Plenty of advice written before that date is still circulating, which is why so many people add this markup expecting a SERP change that will not arrive. Be clear about what you are buying now.
Why it is still worth marking up
The rich result was one consumer of this data, and it was never the only one. FAQPage states, in a
form no parser has to guess at, that this page contains a specific question and this specific answer
to it. That statement is read by systems that summarise and cite pages rather than list them — and
those systems are a growing share of how a page gets found.
There is also a cheaper argument. Writing the markup forces you to state the questions the page answers, in the words a visitor would use. Pages that survive that exercise tend to be better pages. If you cannot fill in three genuine pairs, the FAQ section probably should not exist.
The visibility rule is not negotiable
Every question and every answer in the block has to be present on the page, visible to a person who loads it, in the same wording. Content hidden behind an accordion counts as visible; content that exists only inside the JSON-LD does not.
This matters more than it sounds. Hidden structured data is one of the few markup problems that attracts a manual action rather than being quietly ignored, and a manual action against structured data on one template tends to cost the whole site its eligibility for every feature.
What the cleaner takes out, and why
Google permits a small set of tags inside an answer: paragraphs, unordered lists and list items, links, bold and italic in both their spellings, and line breaks. That is deliberately close to the minimum needed to write a readable answer.
Everything else is removed here before it reaches the output. Headings, tables, div and span
wrappers, and images are stripped of their tags while their text survives; script and style
blocks are removed with their contents, because nothing in them belongs in an answer. Attributes go
too, except an href on a link — and an href using a javascript: scheme is dropped while the
link text stays. The tool lists what it removed, so a paste from a word processor that arrives
wrapped in twelve span elements is visible rather than silent.
Validity is not eligibility
The block this tool produces is valid JSON-LD and conformant with schema.org. What it cannot tell you is whether Google will do anything with it, because eligibility for any rich result is decided by Google against the live page. Publish the markup, then run the URL through the Rich Results Test, which reports what it parsed and which features the page qualifies for — for FAQ, on most sites, the honest answer will be none, and that is the expected outcome rather than a fault in the markup.
For the other blocks that belong on a content page, the article schema generator covers authorship and dates, and the breadcrumb schema generator covers the navigation path that Google does still display.