Optimization Guide
Shopify Seller Rating and Store Aggregate Rating Structured Data for AI Shopping Agents
AI shopping agents make two separate trust checks: product quality (from product reviews) and seller reliability (from store-level ratings). Most Shopify stores wire up product AggregateRating and skip the seller-level signal entirely — leaving fulfillment reputation data invisible to agents that answer "best-rated shops for leather bags" or "most reliable Shopify stores for X."
AggregateRating to your Organization entity in theme.liquid to declare store-level seller ratings separately from product-level reviews. Source rating data from your third-party platform (Trustpilot, Judge.me, Okendo) and keep it current. Product ratings belong on Product types on product pages; seller ratings belong on Organization in your layout. Both signals are independent and both are processed by AI shopping agents.
Product Ratings vs. Seller Ratings: Two Distinct AI Signals
When an AI shopping agent answers "where should I buy a cashmere sweater?", it evaluates two independent trust dimensions:
- Product quality signal:
AggregateRatingonProduct— sourced from product-specific reviews (fit, quality, durability, accuracy). Varies by product. Present on product pages. - Seller trust signal:
AggregateRatingonOrganization— sourced from store reviews (shipping speed, packaging, returns, customer support). Applies store-wide. Present in site layout.
Shopify stores with product review apps (Judge.me, Okendo, Yotpo) typically have the product rating wired up automatically. The seller-level rating is almost universally missing from structured data, even when the store has hundreds of positive reviews on Trustpilot or Google reviews.
How AI agents use each rating type
| Rating type | Schema type | Source | AI agent use case |
|---|---|---|---|
| Product rating | Product > AggregateRating |
Product-specific reviews (size, quality, material) | "Best-rated linen sheets" — sorts by product quality |
| Seller rating | Organization > AggregateRating |
Store-level reviews (shipping, returns, support) | "Most reliable store for baby clothes" — sorts by fulfillment trust |
| Google Seller Ratings | Google Merchant Center signal (not schema) | Google-certified review partners | Stars in Google Shopping ads and organic panels |
Seller Rating JSON-LD Patterns
Organization AggregateRating in theme.liquid
Place this JSON-LD block in your layout/theme.liquid inside the <head> or before </body>. It applies to the entire domain and is crawled on every page:
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Your Store Name",
"url": "https://yourstore.com",
"logo": {
"@type": "ImageObject",
"url": "https://yourstore.com/assets/logo.svg"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"ratingCount": "2347",
"bestRating": "5",
"worstRating": "1",
"reviewCount": "2347"
},
"sameAs": [
"https://www.trustpilot.com/review/yourstore.com",
"https://www.google.com/maps/place/your-store"
]
}
Full Organization entity with seller ratings and contact
A more complete Organization entity pairs seller ratings with contact information, return policy, and shipping policy — all signals that AI agents use for seller trustworthiness scoring:
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Meadow & Oak Home Goods",
"url": "https://meadowandoak.com",
"logo": {
"@type": "ImageObject",
"url": "https://meadowandoak.com/assets/logo.svg"
},
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer service",
"email": "hello@meadowandoak.com",
"availableLanguage": "English"
},
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Home goods and furniture"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"ratingCount": "1892",
"bestRating": "5",
"worstRating": "1",
"reviewCount": "1892"
},
"sameAs": [
"https://www.trustpilot.com/review/meadowandoak.com"
]
}
Combining seller and product ratings on a product page
Both rating types can coexist on a product page without conflict — they are on different schema types. The product rating is on the Product type; the seller rating is on the Organization type rendered by the layout:
/* In product.liquid (product rating) */
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Linen Duvet Cover — King",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.9",
"ratingCount": "312",
"bestRating": "5"
},
"offers": { "@type": "Offer", "price": "149.00" }
}
/* In theme.liquid (seller/store rating — separate block) */
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Meadow & Oak",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"ratingCount": "1892",
"bestRating": "5"
}
}
Shopify Liquid Implementation
The challenge with seller ratings in Shopify is keeping the ratingValue and ratingCount current without manual theme edits every time your review score changes. Two approaches:
Approach 1: Shopify global settings metaobject (recommended)
Create a single-instance metaobject called store_ratings with fields for rating_value, rating_count, and rating_source. Update it via the Shopify Admin API on a schedule (daily or weekly) from your review platform's API. Inject into theme.liquid:
{% assign ratings = shop.metaobjects.store_ratings.first %}
{% if ratings != blank and ratings.rating_count.value != blank %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": {{ shop.name | json }},
"url": {{ shop.url | json }},
"logo": {
"@type": "ImageObject",
"url": "{{ shop.url }}/assets/logo.svg"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": {{ ratings.rating_value.value | json }},
"ratingCount": {{ ratings.rating_count.value | json }},
"bestRating": "5",
"worstRating": "1"
}
{% if ratings.trustpilot_url.value != blank %}
,"sameAs": [{{ ratings.trustpilot_url.value | json }}]
{% endif %}
}
</script>
{% endif %}
Approach 2: Hardcoded with update reminder
If you don't have automation, hardcode the current values and set a calendar reminder to update monthly. Add a comment with the source and last-updated date so the team knows when it's stale:
/* Last updated: 2026-06-01. Source: Trustpilot API.
Update monthly or when rating changes by ±0.1 */
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Your Store Name",
"url": "https://yourstore.com",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"ratingCount": "2347",
"bestRating": "5",
"worstRating": "1"
}
}
Metaobject fields for store_ratings
| Field key | Type | Example value | Purpose |
|---|---|---|---|
rating_value |
Number (decimal) | 4.8 |
Average store rating (1–5) |
rating_count |
Integer | 2347 |
Total number of seller reviews |
rating_source |
Single line text | Trustpilot |
Platform attribution for internal tracking |
trustpilot_url |
URL | https://www.trustpilot.com/review/... |
sameAs link for Organization entity |
last_synced_at |
Date and time | 2026-06-01T00:00:00Z |
Staleness tracking for automation alerts |
Review Platform Integration Reference
| Platform | API endpoint for rating data | Google Seller Ratings eligible | Schema.org compatible |
|---|---|---|---|
| Trustpilot | GET /v1/business-units/{id} (public API) |
Yes (Google-certified partner) | Yes — parse score.trustScore and numberOfReviews.total |
| Judge.me | Shopify app badge widget + REST API | Via Google integration | Yes — exports AggregateRating for Organization |
| Okendo | REST API + Shopify Storefront API | Via Google integration | Yes — separate product and seller ratings |
| Yotpo | REST API /apps/{app_key}/bottom_line |
Yes (Google-certified partner) | Yes — parse store_average_score and total_reviews |
| Google Customer Reviews | Merchant Center API | Direct (native integration) | No schema needed — feeds Google Shopping directly |
Common Mistakes to Avoid
| Mistake | AI agent consequence | Fix |
|---|---|---|
| Placing seller AggregateRating on Product type instead of Organization | Schema.org validator error; AI agent confusion between product and seller scores | Move seller rating to Organization type in theme.liquid |
| Hardcoding ratingValue that drifts from actual platform score | Structured data policy violation; potential trust penalty from Google | Sync via metaobject updated from review platform API on schedule |
| Using ratingCount below 10 for a store with thousands of reviews | AI agent deprioritizes signal as statistically insignificant | Use total published review count from your review platform |
Missing bestRating and worstRating |
Schema.org validator warning; agents can't normalize score to 5-star scale | Always include bestRating: "5" and worstRating: "1" |
No sameAs linking to review platform profile |
AI agents can't cross-reference platform source for validation | Add sameAs array with Trustpilot/Google profile URL |
Implementation Checklist
- Add
Organizationtype withAggregateRatingtolayout/theme.liquid - Set
ratingValue,ratingCount,bestRating: "5",worstRating: "1" - Add
sameAslinking to Trustpilot, Google, or primary review platform profile - Create
store_ratingsmetaobject for automated rating syncing - Wire metaobject fields to review platform API (Trustpilot, Yotpo, Judge.me, Okendo)
- Set up weekly or daily sync from review platform API to metaobject
- Verify existing product
AggregateRatingis onProducttype — not merged with Organization - Enroll in Google Customer Reviews for Google Shopping seller rating stars
- Validate Organization structured data with Schema.org Validator
- Run CatalogScan to confirm seller rating signal appears in AI readiness score
Frequently Asked Questions
What is the difference between a product AggregateRating and a seller AggregateRating?
A product AggregateRating (on Product) reflects reviews of a specific item — quality, fit, durability. A seller AggregateRating (on Organization) reflects the store's fulfillment experience — shipping speed, packaging, returns, support. AI agents use both independently: product ratings filter product quality, seller ratings filter store trustworthiness.
Where should seller rating JSON-LD be placed on a Shopify store?
Place seller AggregateRating on the Organization type in layout/theme.liquid — not on product pages. The Organization-level rating applies site-wide and is crawled on every page. Product pages should carry product AggregateRating on the Product type separately.
Which review platforms feed into seller ratings for AI shopping agents?
For Google AI Mode and Google Shopping, seller ratings aggregate from Google Customer Reviews, Trustpilot, Yotpo, and other Google-certified partners. For ChatGPT Shopping and Perplexity Shopping, the agents read your Organization AggregateRating JSON-LD directly from your site. Add both: Organization JSON-LD sourced from your review platform, plus Google Customer Reviews enrollment for Google Shopping stars.
What is the minimum ratingCount required for AggregateRating to be valid?
Schema.org requires at least 1. Google recommends at least 3 for rich snippet eligibility. Google Shopping seller rating stars require 100+ ratings over 12 months. For AI agent recommendations specifically, there is no documented minimum — any valid AggregateRating with a non-trivial count is processed as a trust signal.
Can I use Trustpilot or Judge.me data in my Organization AggregateRating JSON-LD?
Yes, provided the data is accurate and current. The ratingValue and ratingCount must match your actual published ratings. Use a metaobject synced from your review platform's API rather than hardcoding values — stale scores drift and become a policy violation. If your Trustpilot rating changes, your JSON-LD must reflect the update within a reasonable timeframe.