SEO Auditor — crawls the audited site, page by page, until it meets a page that carries
FAQPage structured data or an FAQ heading, and fails when none of the first 500 pages does.Visitors
A FAQ page answers the questions people ask before they buy, sign up or write to support.
Search and AI
FAQPage structured data lets search engines and AI assistants quote your answers directly.How it works
- Start URL — the audited URL is normalized (a missing scheme becomes
https://, the fragment is dropped). A URL that cannot be parsed, or has no host, ends the audit with502. - Plain-fetch crawl — the start page is fetched as 37AuditsBot. A block (HTTP 403, HTTP 429 or a Cloudflare challenge) ends the audit with
590; any other failure (timeout, DNS, TLS, HTTP 4xx/5xx, or a non-HTML answer) ends it with500. From there the crawl is breadth first, following only<a href>links whose host is exactly the start host (no subdomains), skippingmailto:,tel:andjavascript:links, and silently skipping later pages that fail, answer HTTP 4xx/5xx or are not HTML. It stops at 500 pages. - Detection — every crawled page is a FAQ page when it has a
<script type="application/ld+json">whose@typeisFAQPage(also inside an array), an element withitemtypepointing atschema.org/FAQPage, or anh1–h4heading that reads “FAQ”, “FAQs”, “Frequently Asked Questions”, “Perguntas Frequentes” or “Dúvidas Frequentes”. - Browser crawl — only when the plain-fetch crawl finds nothing is the same crawl run in a headless Chromium, so sites that build their pages or their navigation with JavaScript are judged on the rendered DOM. A browser that fails to run, even after one relaunch, ends the audit with
501. - Verdict — the first page recognized as a FAQ page is
SUCCESS(200), naming the page, the detector and the crawl that found it. When both crawls are exhausted or hit the page limit, the audit isFAIL(400).
What it audits
Every row maps to onecheckRule* method and one CheckCode, in the order the auditor runs them. CheckCode suffixes use status ranges: 200 success, 400–499 fail, 500–599 error.
Every check carries
startUrl, host, pagesCrawled, maxPages and method (jsoup for the plain-fetch crawl, playwright for the browser crawl) in its data; the success check adds faqUrl and detector (json-ld, microdata or heading), and the failure adds pagesCrawledWithJsoup and pagesCrawledWithBrowser.
Output documentation
This auditor emits no
WARNING or INFORMATION checks.
Risks and considerations
Why a FAQ page matters
- Visitors who cannot find an answer to a pre-sale question rarely ask; they leave. A FAQ page keeps them on the site and lowers the volume of repetitive support requests.
FAQPagestructured data makes the answers machine readable, so search engines and AI assistants can show them in rich results and direct answers, which drives qualified traffic.
How the crawl behaves
- Only links on the exact start host are followed. A FAQ hosted on
help.example.comorsupport.example.comis not found when the audited URL iswww.example.com; audit the help site separately. - Each crawl visits at most 500 pages, breadth first from the start URL. On a large site a FAQ page that sits deep in the navigation may never be reached; link it from the home page or the footer.
- The plain-fetch crawl reads the HTML the server sends. Sites whose navigation or content is built by JavaScript are covered by the browser crawl, which is slower: the audit can take several minutes on such sites.
- A heading alone is enough to pass. The auditor does not judge the questions or the answers, nor whether the structured data is valid; use a structured data validator for that.
Changes from the previous version
- An invalid start URL, or one without a host, is now
ERROR(502) instead ofFAIL. - A start page that cannot be fetched, answers HTTP 4xx/5xx or is not HTML is now
ERROR(500); it used to be skipped silently, so the audit ended inFAILwith zero pages crawled. - A browser crawl that fails to run is now
ERROR(501); the audit used to return theFAILof the plain-fetch crawl instead. - The “no FAQ page” verdict now carries a check (
400) with the pages crawled by each crawl, the host and the limit; it used to be a bareFAILresponse with no check.