Product schema missing a nested AggregateRating
What is this issue?
This issue reports a nested AggregateRating block your page already declares —
inside a Product, LocalBusiness or similar schema — that is missing ratingValue
or reviewCount. It does not report a Product or business that has no rating
information at all.
What this issue is not:
- It does not guess that a page showing star ratings visually ought to declare
aggregateRating. A schema with none declared is never reported. - It does not check whether the rating value falls inside its scale (e.g.
6on a 1-5 scale) — that value-level rule is part of the parent Product's own validation and is reported under issue #108.
Why it matters
AggregateRating schema significantly impacts click-through rates and trust:
- Star ratings in search: Pages with star ratings get 35% more clicks on average
- Social proof: Users trust businesses and products with visible ratings
- Rich snippets: Enables review count and rating display in search results
- Local SEO: LocalBusiness with ratings appear more prominently in maps
- AI search signals: AI engines use rating data to recommend top-rated options
Resolving this issue improves your SEO health score by adding powerful social proof signals that increase click-through rates and user trust.
How to fix it
If this issue was raised, your page already declares an aggregateRating that is
missing ratingValue or reviewCount — open the finding for which one. The steps
below are for adding rating markup where none exists yet: worthwhile, and never
reported as a defect while absent.
Identify reviewable content: Check pages with
Product,LocalBusiness,Recipe,Movie,Book, or similar schemasAdd AggregateRating to your schema:
{ "@context": "https://schema.org", "@type": "Product", "name": "Product Name", "description": "Product description", "aggregateRating": { "@type": "AggregateRating", "ratingValue": "4.5", "reviewCount": "125", "bestRating": "5", "worstRating": "1" }, "offers": { "@type": "Offer", "price": "29.99", "priceCurrency": "USD" } }Use correct values:
ratingValue: Numeric value as string (e.g., "4.5")reviewCount: Integer as string (e.g., "125")bestRating: Usually "5" (default if not specified)worstRating: Usually "1" (default if not specified)
Ensure ratings are legitimate:
- Only use real reviews from actual customers
- Don't create fake reviews or manipulate ratings
- Make sure the rating matches what's displayed on the page
Validate with Google's Rich Results Test
Examples
Example 1: No AggregateRating Declared — Not This Issue
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Wireless Headphones",
"description": "High-quality wireless headphones"
}Nothing is reported. A Product with no aggregateRating at all is not a Product with
broken rating data — see #108 for the Product's own required properties.
Example 2: AggregateRating on a LocalBusiness (passes)
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Coffee Shop Downtown",
"address": {
"@type": "PostalAddress",
"streetAddress": "1 Main St",
"addressLocality": "Springfield",
"postalCode": "62704"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "342",
"bestRating": "5",
"worstRating": "1"
}
}Example 3: AggregateRating Missing reviewCount (fails)
Problematic state:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Wireless Headphones",
"image": "https://example.com/headphones.jpg",
"description": "High-quality wireless headphones",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "5"
}
}Reported: AggregateRating schema (nested inside Product) is present but failed validation: reviewCount missing.
Corrected state:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Wireless Headphones",
"image": "https://example.com/headphones.jpg",
"description": "High-quality wireless headphones",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "5",
"reviewCount": "89",
"bestRating": "5",
"worstRating": "1"
}
}How PixyScan detects this
Read the declared structured data: every JSON-LD block is parsed, and
@graphwrappers are flattened.Walk each declared schema for nested
AggregateRatingblocks: wherever anAggregateRatingobject appears — most commonly insideProductor aLocalBusinesstype'saggregateRatingproperty — it is examined. A schema with no nestedAggregateRatingat all is not examined, and nothing is reported: a Product with no rating information is not a Product with broken rating information.Check the required properties: a nested
AggregateRatingmust haveratingValueandreviewCount.This is reported when: a declared
AggregateRatingis missingratingValueorreviewCount, reported under this issue with a message naming it as nested inside its parent type. A Product, LocalBusiness or other schema that declares noaggregateRatingat all is never reported here.
A ratingValue that is present but falls outside its declared scale (e.g. 6 on a
1-5 scale) is a separate rule, checked as part of the parent Product's own validation
and reported under the Product's own issue (#108), not this one.
What we store
Storage Level
Page Level — This issue is evaluated for each individual URL that contains structured data.
Database Table / Prisma Model
PageStructuredData
Stored Fields
| Field | Type | Description |
|---|---|---|
| schemaType | SchemaType | The type of schema (e.g., Organization, Person) |
| schemaFormat | SchemaFormat | The format of the schema (JSON-LD, Microdata, RDFa) |
| schemaIdentifier | String? | Unique identifier for the schema |
| rawJson | Json? | The raw JSON-LD or structured data content |
| schemaErrors | Json? | Array of validation errors found in the schema |
| isValidSchema | Boolean? | Whether the schema is valid according to validation |
| missingFields | Json? | Reserved for future use — the crawler always writes null here today; no check currently populates it |
Detection Dependencies
- The following data sources are required to evaluate this issue:
- HTML Document — The crawler parses the HTML to find structured data (JSON-LD, Microdata, RDFa)
- Structured Data Validation — The extracted schema is validated against Schema.org definitions
- Schema Parser — JSON-LD scripts, Microdata attributes, and RDFa markup are parsed