# FAQ / question-answer schema

> FAQ / question-answer schema: Question-and-answer content is the type agents quote most. The fix: add FAQ schema. Standard: schema.org/FAQPage.

- Source: /checks/faq-schema
- Site: AgenticWebScore
- Language: English

---
Question-and-answer content is the type agents quote most.

| Property | Value |
| --- | --- |
| Check id | `faq-schema` |
| Dimension | Content Accessibility (22%) |
| Tier | Recommended — pool 20 pts |
| Weight inside tier | 2 |
| Impact | High |
| Maturity | Draft — A published specification that is not yet ratified. |
| Conditional | No |
| Publishing skill | `faq-schema` |
| Standards | schema.org/FAQPage |

## What is measured

This check declares no probe path, so the scanner works from the JSON-LD of the already fetched homepage `/` and looks for a `FAQPage` entity anywhere in the graph. Pass when `FAQPage` is present and `mainEntity` is a non-empty array of objects typed `Question` that each carry a `name` and an `acceptedAnswer` typed `Answer` with non-empty `text`; partial when `FAQPage` exists but `mainEntity` is empty, when an entry is not typed `Question`, or when a question lacks a typed, non-empty `acceptedAnswer`; fail when no `FAQPage` type appears.

## Reproduce it yourself

You do not have to take our word for any of this. Run the same measurement against your own domain:

```bash
DOMAIN="https://example.com"
curl -sL "$DOMAIN/" | perl -0777 -ne 'while (m{<script[^>]*application/ld\+json[^>]*>(.*?)</script>}gsi) { print "$1\n" }' | jq -r '.. | objects | select((."@type"? | if type == "array" then .[] else . end) == "FAQPage") | .mainEntity[] | [.name, (.acceptedAnswer.text // "NO ANSWER")] | @tsv'
```

## The fix

This is the artifact to ship. It is the complete change, not a description of one.

```html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What does an agent readiness audit measure?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "61 checks across discovery, content, bot access, protocol and commerce, each scored and paired with a fix."
      }
    },
    {
      "@type": "Question",
      "name": "How long does the audit take?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Scanning your public pages takes about two minutes; the scored report is generated immediately."
      }
    }
  ]
}
</script>
```

> The same questions must be visible as text on the page — structured data that does not match rendered content is treated as spam.

## Standards referenced

- `schema.org/FAQPage`

## Related checks

| Check | Tier | Impact | Same skill |
| --- | --- | --- | --- |
| `markdown-negotiation` — Markdown content negotiation | Recommended | Critical | — |
| `headings` — Semantic heading structure | Essential | High | — |
| `meta` — Title and summary metadata | Essential | High | — |
| `jsonld` — JSON-LD structured data | Essential | Critical | — |
| `breadcrumb` — Breadcrumb / navigation schema | Emerging | Low | — |
| `summary` — Prominent summary block | Recommended | Medium | — |
| `lang` — Language declaration and multilingual access | Recommended | Medium | — |
| `no-js-fallback` — Content that needs no JavaScript | Essential | High | — |
