Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when adding FAQ sections to landing pages or blog posts, generating FAQPage JSON-LD from existing Q&A content, or validating that structured data on pages with FAQ sections is syntactically and semantically correct.
.claude/skills/thedaviddias-faq/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 55% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 18% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 36% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 7% | 0% |
| case-05 | ✓→✓ | = Same ✓ | 150% | 0% |
Valid FAQPage structured data can generate rich results in Google Search, displaying expandable question-and-answer pairs directly in the SERP. This increases click-through rate and SERP real estate without requiring a higher ranking position.
FAQPage JSON-LD with mainEntity question/answer pairs to pages that contain FAQ sectionsQuestion must include acceptedAnswer with an Answer type containing the text propertyCheck pages that contain FAQ or Q&A sections. For each: (1) Is there a <script type="application/ld+json"> block with "@type": "FAQPage"? (2) Does it include a mainEntity array of Question objects? (3) Does each Question have a name (the question text) and an acceptedAnswer with "@type": "Answer" and a text property? (4) Does the schema content match what is visible on the page?
<head> or <body>:json{ "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "How do I reset my password?", "acceptedAnswer": { "@type": "Answer", "text": "Click 'Forgot password' on the login page and enter your email address. You will receive a reset link within 5 minutes." } } ] }
FAQPage structured data enables Google to display expandable Q&A pairs directly in search results as a rich result. This increases the page's visible footprint in the SERP and can improve click-through rate. Invalid or mismatched schema (questions in markup not visible on page) will cause Google to ignore it and may trigger a manual action.
Parse all <script type="application/ld+json"> blocks. Find any with "@type": "FAQPage". Validate that mainEntity is an array, each item has "@type": "Question", name is a non-empty string, and acceptedAnswer is an object with "@type": "Answer" and a non-empty text. Cross-reference each question in the schema against visible question elements on the page.
For full implementation details, code examples, and framework-specific guidance, see references/rule.md.
Rule page: https://frontendchecklist.io/en/rules/seo/faq
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 8,873 | 6,763 | -24% | 1 | 1 | 0% | 1,787 | 2,106 | +18% | 0 | 0 | — |
case-02 | fail→pass | 6,451 | 5,484 | -15% | 1 | 1 | 0% | 1,219 | 1,892 | +55% | 0 | 0 | — |
case-03 | pass→pass | 13,406 | 11,451 | -15% | 1 | 1 | 0% | 2,199 | 2,988 | +36% | 0 | 0 | — |
case-04 | pass→pass | 6,698 | 2,995 | -55% | 1 | 1 | 0% | 1,181 | 1,263 | +7% | 0 | 0 | — |
case-05 | pass→pass | 2,327 | 2,692 | +16% | 1 | 1 | 0% | 479 | 1,196 | +150% | 0 | 0 | — |
case-06 | pass→pass | 5,533 | 3,514 | -36% | 1 | 1 | 0% | 1,008 | 1,345 | +33% | 0 | 0 | — |
case-07 | pass→pass | 3,582 | 2,889 | -19% | 1 | 1 | 0% | 748 | 1,282 | +71% | 0 | 0 | — |
case-08 | pass→pass | 3,504 | 2,931 | -16% | 1 | 1 | 0% | 705 | 1,253 | +78% | 0 | 0 | — |
case-09 | pass→pass | 4,848 | 3,044 | -37% | 1 | 1 | 0% | 951 | 1,221 | +28% | 0 | 0 | — |
case-10 | pass→pass | 5,132 | 3,614 | -30% | 1 | 1 | 0% | 941 | 1,382 | +47% | 0 | 0 | — |
case-11 | pass→pass | 4,524 | 2,568 | -43% | 1 | 1 | 0% | 882 | 1,184 | +34% | 0 | 0 | — |
case-12 | pass→pass | 8,300 | 3,215 | -61% | 1 | 1 | 0% | 1,541 | 1,256 | -18% | 0 | 0 | — |
case-13 | pass→pass | 4,562 | 1,992 | -56% | 1 | 1 | 0% | 820 | 1,049 | +28% | 0 | 0 | — |
case-14 | pass→pass | 7,998 | 4,495 | -44% | 1 | 1 | 0% | 1,454 | 1,490 | +2% | 0 | 0 | — |
case-15 | pass→pass | 11,412 | 6,098 | -47% | 1 | 1 | 0% | 1,846 | 1,866 | +1% | 0 | 0 | — |
case-16 | pass→pass | 7,943 | 4,765 | -40% | 1 | 1 | 0% | 1,449 | 1,478 | +2% | 0 | 0 | — |
case-17 | pass→pass | 8,476 | 3,343 | -61% | 1 | 1 | 0% | 1,630 | 1,348 | -17% | 0 | 0 | — |
case-18 | pass→pass | 8,958 | 2,621 | -71% | 1 | 1 | 0% | 1,531 | 1,116 | -27% | 0 | 0 | — |
case-19 | pass→pass | 8,844 | 2,998 | -66% | 1 | 1 | 0% | 1,574 | 1,226 | -22% | 0 | 0 | — |
case-20 | pass→pass | 16,414 | 14,259 | -13% | 1 | 1 | 0% | 2,941 | 3,309 | +13% | 0 | 0 | — |
case-21 | pass→pass | 9,207 | 6,629 | -28% | 1 | 1 | 0% | 1,573 | 1,823 | +16% | 0 | 0 | — |
case-22 | pass→pass | 8,229 | 4,990 | -39% | 1 | 1 | 0% | 1,609 | 1,663 | +3% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +5 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.