AggregateRating / Review Schema Missing
Issue No: 61
Category: Structured Data & Rich Results
Issue type: Issue
Priority: IMPORTANT
Description
Pages with visible user reviews or ratings are missing AggregateRating or Review schema, preventing star ratings from appearing in Google search results.
How do we capture it
- Detect pages with visible star ratings, rating counts, or review sections
- Check JSON-LD for
"@type": "AggregateRating"nested insideProduct,LocalBusiness,Recipe, etc. - If visible ratings exist but schema absent → trigger issue
What to store
StructuredDataAudit with schemaType = AggregateRating, issueNumber = 61, plus StructuredDataField rows:
| Field | Type | Comment |
|---|---|---|
rating_value | numeric | Actual rating value (e.g. 4.5) |
review_count | integer | Number of reviews declared |
has_best_rating | boolean | bestRating declared (default 5) |
has_worst_rating | boolean | worstRating declared (default 1) |
Core audit fields: isPresent, matchesContent, rawJson
Condition for trigger
The following rules trigger this issue:
- Trigger Rule 1: Schema absent
- Target Field:
isPresent - Evaluation Logic:
isPresent = false - Severity: CRITICAL
- Diagnostic Message: "No
AggregateRatingon page with visible ratings"
- Target Field:
- Trigger Rule 2: Content mismatch
- Target Field:
matchesContent - Evaluation Logic:
matchesContent = false - Severity: CRITICAL
- Diagnostic Message: "Schema rating differs from visible rating"
- Target Field:
- Trigger Rule 3: Zero reviews
- Target Field:
review_count - Evaluation Logic:
review_count < 1 - Severity: CRITICAL
- Diagnostic Message: "Invalid review count"
- Target Field:
Sources
Long description
Star ratings are one of the highest-CTR rich result features. When correctly declared, Google shows:
Widget Pro — Example Corp ★★★★½ 128 reviews $49.99
Critical rule: Never fabricate ratings. Fake AggregateRating causes Google manual penalties and complete rich result removal. Schema must exactly match what users see on the page.
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"bestRating": "5",
"worstRating": "1",
"reviewCount": "342"
}
AggregateRating can be nested inside: Product, LocalBusiness, Recipe, Book, Movie, Course, SoftwareApplication.
How to Fix
- Add
aggregateRatingnested inside the parent schema block - Sync dynamically as new reviews are submitted
- Declare
bestRatingandworstRatingexplicitly - Only mark up real, visible reviews
- Never mark up hidden or off-page reviews