Skip to content
Issue docs

Product schema missing a nested AggregateRating

Importantaggregaterating_schema_nestedIssue 107

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. 6 on 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.

  1. Identify reviewable content: Check pages with Product, LocalBusiness, Recipe, Movie, Book, or similar schemas

  2. Add 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"
      }
    }
  3. 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)
  4. 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
  5. 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

  1. Read the declared structured data: every JSON-LD block is parsed, and @graph wrappers are flattened.

  2. Walk each declared schema for nested AggregateRating blocks: wherever an AggregateRating object appears — most commonly inside Product or a LocalBusiness type's aggregateRating property — it is examined. A schema with no nested AggregateRating at all is not examined, and nothing is reported: a Product with no rating information is not a Product with broken rating information.

  3. Check the required properties: a nested AggregateRating must have ratingValue and reviewCount.

  4. This is reported when: a declared AggregateRating is missing ratingValue or reviewCount, reported under this issue with a message naming it as nested inside its parent type. A Product, LocalBusiness or other schema that declares no aggregateRating at 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

Further reading