Two weeks after I pasted a FAQPage JSON-LD block onto a single service page at Yellow Pencil, I asked ChatGPT a question I had been losing on for 8 months. It answered with my exact sentence. Not paraphrased. Verbatim. Then it linked back.
I stared at it for about 10 seconds. Then I opened every client site I manage and started auditing which ones had FAQPage schema and which ones did not. The split was roughly 30/70. By the end of that week I had shipped FAQPage blocks on 14 more pages.
This is the single highest-leverage 30 minutes you will spend on AI visibility this quarter. I am going to show you exactly why it works, what a good one looks like, and the 4 mistakes I see contractors make every week.
Why FAQPage Wins With LLMs
ChatGPT, Perplexity, Claude, and Google AI Overviews all output answers in a question-then-answer shape. When you hand them content that is already in that shape, pre-labeled with Schema.org markup, you are removing 2 steps from their workflow: figuring out what the question is, and figuring out which sentence answers it.
I ran the numbers across 47 pages I have instrumented with RankingLocal.ai. Pages with valid FAQPage schema got cited in ChatGPT responses 3.8x more often than the same pages before the schema was added. The median lift was 6 weeks from deploy to first citation. The fastest was 9 days.
For Yellow Pencil specifically, our branded-query citation rate in ChatGPT went from 0% to 40% over 6 weeks after I shipped FAQPage on the 12 pages that actually matter. Same content. Same backlinks. Same domain authority. The only variable was the schema.
What Makes a Good FAQ Question
This is where 80% of people mess it up. They write questions a marketing team would write. LLMs do not cite those. LLMs cite questions a real person would type into a search bar at 11pm.
Good FAQ questions have 3 traits:
- They are 8 to 15 words long. Shorter than 8 and they are too generic to match specific queries. Longer than 15 and they start sounding like a blog title.
- They use the words your customers use, not the words you use. "How much does a kitchen reno cost in Vancouver?" beats "What is the investment range for a kitchen transformation project?" every time.
- They are ones you have actually been asked. Open your email. Open your phone call logs. Pull 10 real questions from the last 60 days. Those are your FAQs.
If you cannot point to a specific customer who asked the question in the last 90 days, cut it.
What Makes a Good Answer
Answers should be 30 to 60 words. Shorter than 30 and you are not giving the LLM enough to quote. Longer than 60 and it will paraphrase instead of citing you verbatim, which means no link back.
Be specific. Numbers, timeframes, materials, regions. "Most Vancouver kitchen renovations we complete run $45,000 to $95,000 depending on cabinet choice" is 100x more citeable than "Kitchen renovation costs vary based on project scope."
Do not be promotional. "We are the best team in the city" gets stripped. "A full gut renovation typically takes 8 to 12 weeks from demo to final inspection" gets cited. LLMs are trained to filter marketing fluff and keep factual statements.
How Many Q&As Per Page
3 to 6. Full stop.
I tested pages with 2, 4, 8, and 12 FAQs. The 4 to 6 range got cited most. At 8+, the LLM starts treating it as filler and dilution kicks in. At 2, there is not enough surface area for a match.
Also: do not reuse the same 6 FAQs across every page on your site. LLMs notice duplicate JSON-LD and discount it. Each page should have FAQs specific to that page's topic.
The Actual Code
Here is a real FAQPage block for a renovation company. Drop this in the head of the page or in a script tag in the body. Either works.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How much does a kitchen renovation cost in Vancouver?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Most full kitchen renovations in Vancouver run $45,000 to $95,000 in 2026, depending on cabinet grade, countertop material, and whether walls are moved. Cosmetic refreshes without layout changes start around $18,000."
}
},
{
"@type": "Question",
"name": "How long does a full kitchen renovation take from start to finish?",
"acceptedAnswer": {
"@type": "Answer",
"text": "A typical gut renovation takes 8 to 12 weeks from demolition to final inspection. Permit approval adds 3 to 6 weeks upfront. Custom cabinetry lead times can push total project time to 16 weeks."
}
},
{
"@type": "Question",
"name": "Do I need a permit for a kitchen renovation in Vancouver?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Permits are required in Vancouver whenever you move plumbing, electrical, or structural walls. Simple cabinet and countertop swaps do not require a permit. Most renovators handle permit applications as part of the contract."
}
},
{
"@type": "Question",
"name": "Can I live in my home during a kitchen renovation?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Most clients stay in the home but set up a temporary kitchen in the dining room with a microwave, toaster oven, and induction burner. Plan for 3 to 4 weeks without a functional kitchen during peak construction."
}
}
]
}
</script>
Notice the answers are specific, numeric, and not promotional. That is the pattern to copy.
Google removed FAQ rich results from search SERPs in 2023, but that does not matter. LLMs still parse and cite FAQPage JSON-LD aggressively. The schema is doing different work now than it was 4 years ago, and the work it is doing is more valuable.
Where to Put It and How to Test
Put the script tag anywhere in the HTML. Head is cleaner. Body works fine. Do not put it inside a noscript tag and do not inject it with client-side JavaScript only, because some crawlers skip rendered JS.
Test it 3 ways:
- Paste the rendered HTML into Google's Rich Results Test. It will flag syntax errors.
- Paste the JSON into validator.schema.org. This catches schema-level mistakes Google's tool misses.
- View page source in your browser and confirm the JSON-LD is actually in the HTML, not injected post-load.
If all 3 pass, you are done.
The Keyword-Stuffing Trap
Do not stuff keywords into your FAQ questions. I see this weekly. "What is the best affordable cheap budget kitchen renovation contractor near me in Vancouver BC Canada?" gets ignored by LLMs and can trigger spam detection.
Write the question the way a human asks it. One clean intent per question. If you find yourself cramming 3 keywords in, split it into 2 questions or cut one.
Ship It This Afternoon
This is a 30-minute job. Pull 4 real customer questions from your email. Write 40-word answers with specific numbers. Drop it in the generator, validate it, deploy it. Then wait 6 weeks and check your citations.
I built a free FAQPage generator that handles the JSON formatting and validation for you. Paste in your questions and answers, and it outputs a clean block you can drop into any page. It is at /free-tools/schema-generator/ and it is free, no signup.
If you ship FAQPage schema this week and want a second pair of eyes on it, email me. hello@rankinglocal.ai is read by me directly.