Skip to main content

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 inside Product, LocalBusiness, Recipe, etc.
  • If visible ratings exist but schema absent → trigger issue

What to store

StructuredDataAudit with schemaType = AggregateRating, issueNumber = 61, plus StructuredDataField rows:

FieldTypeComment
rating_valuenumericActual rating value (e.g. 4.5)
review_countintegerNumber of reviews declared
has_best_ratingbooleanbestRating declared (default 5)
has_worst_ratingbooleanworstRating 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 AggregateRating on page with visible ratings"
  • Trigger Rule 2: Content mismatch
    • Target Field: matchesContent
    • Evaluation Logic: matchesContent = false
    • Severity: CRITICAL
    • Diagnostic Message: "Schema rating differs from visible rating"
  • Trigger Rule 3: Zero reviews
    • Target Field: review_count
    • Evaluation Logic: review_count < 1
    • Severity: CRITICAL
    • Diagnostic Message: "Invalid review count"

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

  1. Add aggregateRating nested inside the parent schema block
  2. Sync dynamically as new reviews are submitted
  3. Declare bestRating and worstRating explicitly
  4. Only mark up real, visible reviews
  5. Never mark up hidden or off-page reviews