# Review/AggregateRating schema is present

- **Pattern:** `ab-001767` (`marketing-local-seo.local-schema.review-schema`)
- **Severity:** medium
- **Lifecycle:** active
- **Last modified:** 2026-04-18
- **Canonical URL:** https://auditbuffet.com/patterns/ab-001767
- **License:** CC-BY-4.0 — attribute to AuditBuffet Pattern Catalog (https://auditbuffet.com/patterns/ab-001767)

## Why it matters

Star ratings in Google search results come exclusively from schema-org AggregateRating or schema-org Review structured data — a testimonials section in your UI does not surface this data to crawlers. Businesses displaying review stars in their search snippet receive significantly higher click-through rates. If your site already shows customer testimonials but lacks the corresponding JSON-LD, you're doing the work of collecting reviews while forfeiting the search result benefit entirely.

## Severity rationale

Medium because the omission loses a high-impact click-through signal (review stars in SERP) without creating a security or correctness defect.

## Remediation

Add `aggregateRating` to your LocalBusiness JSON-LD in `app/layout.tsx`. Use only real review data — fabricated values violate Google's structured data guidelines and can trigger manual actions.

```json
"aggregateRating": {
  "@type": "AggregateRating",
  "ratingValue": "4.8",
  "bestRating": "5",
  "reviewCount": "127"
}
```

If review counts are dynamic, pull them from your database at build time or via `generateMetadata` and inject the live values rather than hardcoding.

## Detection

- **ID:** `review-schema`
- **Severity:** `medium`
- **What to look for:** Check the LocalBusiness JSON-LD for an `aggregateRating` property (with `ratingValue` and `reviewCount`) or a `review` property (array of `Review` objects). Also look for any testimonials or reviews component that renders review data — check if it uses structured data.
- **Pass criteria:** Count all review/rating related properties in the LocalBusiness JSON-LD. The schema must include either `aggregateRating` with a valid `ratingValue` (numeric, 1-5 scale) and `reviewCount` (at least 1), or a `review` array with at least 1 Review object.
- **Fail criteria:** No review or rating data in the LocalBusiness schema, even if the site has a testimonials section in its UI.
- **Skip (N/A) when:** The project has no testimonials, reviews, or ratings anywhere in the codebase (no review components, no rating displays), or whole-audit N/A rule applies.
- **Detail on fail:** `"Site has testimonials/reviews in UI components but no aggregateRating or review property in LocalBusiness JSON-LD. Review stars will not appear in search results."` or `"No review or rating data found anywhere in the project"`
- **Remediation:** Add review data to your LocalBusiness JSON-LD in `app/layout.tsx`:

  ```json
  "aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.8", "reviewCount": "127" }
  ```

  Only include ratings you actually have -- fabricated ratings violate Google's structured data guidelines.

## External references

- schema-org AggregateRating
- schema-org Review

Taxons: findability

HTML version: https://auditbuffet.com/patterns/ab-001767
