> ## Documentation Index
> Fetch the complete documentation index at: https://docs.37audits.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Review

> Crawls the site for a reviews or testimonials page, through Review structured data, rating hints or a reviews heading, so buyers and AI assistants find social proof.

<Info>
  **SEO Auditor** — crawls the audited site, same host only, until it finds a page that carries schema.org `Review` / `AggregateRating` structured data, review microdata or a reviews heading.
</Info>

<CardGroup cols={2}>
  <Card title="Social proof" icon="comments">
    Confirms that buyers can find customer reviews or testimonials on your own site instead of leaving for a third-party listing.
  </Card>

  <Card title="Structured data" icon="code">
    Rewards pages marked up with schema.org `Review` or `AggregateRating`, which search engines and AI assistants read for rating snippets.
  </Card>
</CardGroup>

Reviews and testimonials are the first thing many buyers look for before trusting a business, and AI assistants and search engines use `Review` and `AggregateRating` markup to show ratings next to a site. This auditor crawls the site from the start URL and reports whether such a page exists and how it was recognized.

## How it works

1. **Start page** — fetches the audited URL as 37AuditsBot. An invalid URL or one without a host ends the audit with `501`; a blocked request ends it with `590`; a network error, an HTTP 4xx/5xx answer or a body that is not `text/html` ends it with `500`.
2. **Crawl** — follows `<a href>` links on the same host, breadth first, up to 500 pages. Other pages that cannot be fetched, answer HTTP 4xx/5xx or are not HTML are skipped silently.
3. **Detect** — on every page, in this order: JSON-LD with an `@type` plus a `review` or `aggregateRating` key (`json-ld`), microdata with a schema.org `Review` / `AggregateRating` `itemtype` or a `review`, `reviewRating` or `ratingValue` `itemprop` (`microdata`), or an `h1`–`h4` heading such as "Reviews", "Testimonials", "Customer Reviews", "Case Studies", "Avaliações" or "Depoimentos" (`heading`).
4. **Star hints** — on the page that matched, counts `★` / `⭐` characters and `aria-label` / `title` attributes containing "out of" (for example "4.8 out of 5"). The count is reported, it does not change the verdict.
5. **Aggregate** — the first page that matches ends the crawl with `SUCCESS` (`200`). A crawl that runs out of links or reaches the page limit without a match is `FAIL` (`400`).

## What it audits

Every row maps to one `checkRule*` method and one `CheckCode`, in the order the auditor runs them. CheckCode suffixes use status ranges: `200` success, `400–499` fail, `500–599` error.

| CheckCode | Status | When it fires | Recommendation | Why it matters |
| - | - | - | - | - |
| <a id="37A-ReviewAuditor-400" />`37A-ReviewAuditor-400` | `FAIL` | The crawl ended, by following every same-host link or by reaching the page limit, without a page that carries Review JSON-LD, Review microdata or a reviews heading. | Publish a reviews or testimonials page on `{host}`, link it from the pages reachable from `{startUrl}` so it is found within `{maxPages}` pages, and mark it up with schema.org Review or AggregateRating data. | Customer reviews are the social proof buyers and AI assistants look for before trusting a business; without a findable reviews page, prospects leave to check third-party sites and many never come back. |
| <a id="37A-ReviewAuditor-200" />`37A-ReviewAuditor-200` | `SUCCESS` | A crawled page carries a review signal. Message names the page (`{reviewsUrl}`), the detector (`json-ld`, `microdata` or `heading`), the pages crawled and the star hints seen. | — | — |
| <a id="37A-ReviewAuditor-500" />`37A-ReviewAuditor-500` | `ERROR` | The start page could not be fetched: network error, HTTP 4xx/5xx other than a block, or a body that is not `text/html`. | Make sure `{startUrl}` answers with HTTP 2xx and an HTML body, then run the audit again. Last error: `{error}`. | — |
| <a id="37A-ReviewAuditor-501" />`37A-ReviewAuditor-501` | `ERROR` | The start URL cannot be parsed or has no host, so there is nothing to crawl. | Enter the full address including the host, such as [https://example.com/](https://example.com/), instead of "`{startUrl}`". | — |
| <a id="37A-ReviewAuditor-590" />`37A-ReviewAuditor-590` | `ERROR` | The audited page answered HTTP 403, HTTP 429 or a Cloudflare challenge, so 37AuditsBot was blocked before it could read the page. | Allow 37AuditsBot in your firewall or bot protection: allowlist its user agent, or verify its Web Bot Auth signature. See [https://www.37audits.com/bot](https://www.37audits.com/bot). | While 37AuditsBot is blocked this audit cannot look at the site, so problems on it go unreported. |

## Output documentation

| Status | Description | Test logic |
| - | - | - |
| **SUCCESS** | A reviews or testimonials page was found | A crawled page matched the JSON-LD, microdata or heading detector (`200`). `data` carries `startUrl`, `host`, `pagesCrawled`, `maxPages`, `reviewsUrl`, `detector` and `starHintsFound`. |
| **FAIL** | No reviews or testimonials page was found | The crawl exhausted the same-host links or reached the 500-page limit without a match (`400`). |
| **ERROR** | The auditor could not crawl the site | Invalid start URL or no host (`501`); start page not fetchable, HTTP 4xx/5xx or not HTML (`500`); site blocked 37AuditsBot (`590`). |

## Risks and considerations

### Why a reviews page matters

* Buyers compare you with competitors in minutes; reviews on your own site keep that comparison on your pages instead of a marketplace or a review aggregator.
* Search engines and AI assistants read `Review` and `AggregateRating` markup to show star ratings and quote customer feedback. A page that only shows reviews as text or images is found by the heading heuristic, but earns no rating snippet.

### Crawl limits

* Only links on the same host are followed, so reviews hosted on a subdomain (`reviews.example.com`) or a third-party widget are not found.
* The crawl stops at 500 pages. On large sites, link the reviews page from the home page or the main navigation so it is reached early.
* Pages rendered only by JavaScript are not executed; links and markup must be in the HTML the server sends.
* The heading heuristic matches words such as "Reviews", "Ratings" or "Case Studies" in any `h1`–`h4`, so a page about how to review a contract can count as a match.

### Changes from the previous version

* An invalid start URL, or one without a host, is now `ERROR` (`501`) instead of `FAIL`: it is a problem with the audit input, not with the site.
* A start page that cannot be fetched (network error, HTTP 4xx/5xx other than a block, or a non-HTML body) is now `ERROR` (`500`) instead of the "not found" `FAIL`.
* The "not found" verdict now carries a check (`400`) with the host, the pages crawled and the limit, instead of a message only.
* Two redundant JSON-LD branches were removed; the remaining branch already matched every page they matched, so no verdict changes.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.