Build FAQ pages from real customer questions: mine support tickets, chat and sales notes for questions, rank and group them by intent, write short self-contained answers in customer language, ship accessible HTML plus valid FAQPage JSON-LD, and keep answers current on a review cycle. Use when creating, rewriting, auditing, or maintaining an FAQ page or FAQ section, adding FAQ schema, or cutting repeat support questions.
./install.sh faq-page-buildername: faq_page_builder description: Build FAQ pages from real customer questions: mine support tickets, chat and sales notes for questions, rank and group them by intent, write short self-contained answers in customer language, ship accessible HTML plus valid FAQPage JSON-LD, and keep answers current on a review cycle. Use when creating, rewriting, auditing, or maintaining an FAQ page or FAQ section, adding FAQ schema, or cutting repeat support questions.
Turn questions customers actually ask into a page that answers them without a support ticket. The work is mining first, writing second, markup last. A page built from guessed questions looks complete and helps nobody.
Read references/mining-and-freshness.md for the mining method and review cycle, and references/schema-and-accessibility.md before shipping markup or an accordion.
Pull the last 90 days from every place questions land: support tickets, live chat transcripts, sales call notes, site search terms with no result, and reviews that ask something. Keep the customer's exact wording.
Run the miner on a text file (one question per line) or a CSV with question,count,category:
python3 bin/faq_build.py mine questions.csv --out out/
It normalizes punctuation, groups near-duplicates by shared keywords, keeps the most frequent exact phrasing as the heading, and ranks by count in out/ranked.md. Treat the ranking as evidence. A question asked twice a week belongs. A question nobody asked does not, however clever it sounds.
No data yet (new product): say so, then seed from competitor FAQ pages, forum threads, and search suggestions, and label the page as seeded. Replace seeded questions with mined ones at the first review.
Format for every answer: direct answer first, brief context second, next step or link last.
Write the approved Q&A set as JSON, then generate the page, a Markdown version, and the JSON-LD from the same source so the three can never drift apart:
python3 bin/faq_build.py build faq-input.json --out out/
Input is a list of objects with question, answer, and optional category. The builder refuses duplicates and warns on answers over 150 words or under 5 words.
Page rules:
details and summary, which works without JavaScript and is keyboard operable by default. If the design needs a custom accordion, follow the W3C button pattern in the reference file exactly.Generate the JSON-LD with the builder, then validate it:
python3 bin/faq_build.py validate out/faq.jsonld
Set expectations plainly with whoever asked: Google restricted FAQ rich results to well-known government and health sites in August 2023 and stopped showing them in May 2026. Valid FAQPage markup is not penalized and other engines and answer systems still parse labelled Q&A, so ship it as machine-readable hygiene, never as a promised traffic win. See the reference file for the required properties and the rules that still matter (one definition per page, one instance per Q&A site-wide, no advertising in answers, FAQPage for site-authored answers and QAPage only for user-submitted Q&A).
Create a register next to the source JSON: each question, an owner, and a last_reviewed date. Review on a fixed cadence, quarterly is a workable default, and immediately when a price, policy, plan, or product behavior changes.
python3 bin/faq_build.py freshness faq-meta.json --max-days 90
At each review: re-mine the last 90 days, promote new frequent questions, retire questions nobody asks anymore, re-check every date-sensitive answer against the current product, and update last_reviewed only for answers actually re-verified, not skimmed.
Deliver all of these from one source file:
faq.html: accessible page with visible contact path and the JSON-LD embedded.faq.md: the same Q&A in Markdown for docs, help centers, and review.faq.jsonld: standalone FAQPage block that validates clean.aria-expanded state, and visible focus ship with the first version.publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e
No ratings yet — be the first to rate it.