AgentReady emits AggregateRating only when it can safely own that output. Two review apps writing markup on one product page is how rich results break. The longer version is One AggregateRating per page. Duplicate-schema background: two review apps.
1. Run the ownership check
In Reviews, open the rich-snippet card. AgentReady fetches a public product URL and looks for Review and AggregateRating markup that it does not own, including JSON-LD and microdata. A password page, timeout, or unreadable response never counts as clear.
2. The four states
| State | Meaning |
|---|---|
| Not checked | You have not run the check. Nothing is projected. |
| Clear to activate | No competing markup was found. You can opt in. |
| Competing markup found | Another app or the theme already owns review markup. AgentReady will not add a second copy. |
| Could not verify | The page could not be read. Activation stays off. |
3. Auto-demotion
If competing markup appears after you activate, AgentReady demotes its own AggregateRating so the page never ships duplicate schema. It does not edit theme code or another app's markup.
4. Opt-in reviews.rating sync
After a clear check and explicit approval, AgentReady can write Shopify's standard reviews.rating and reviews.rating_count metafields from approved reviews, then refresh Product JSON-LD. That write is opt-in. Import, moderation, blocks, and export work without it.
Deactivation removes only AgentReady-owned rating projections. It does not strip another app's stars.
What AI agents see
JSON-LD is a second surface, not a substitute for first-paint HTML. Blocks can show reviews while AggregateRating stays off. That split is honest: shoppers see the list, machines get markup only when the page has a single owner.

