Angeo Rich Data
angeo/module-rich-data
Injects spec-compliant JSON-LD structured data into Magento 2 — Product (with offers and AggregateRating), Organization, WebSite with SearchAction, BreadcrumbList, and auto-detected FAQPage schema on CMS pages — all configurable from the admin.
Build Tests
Code Quality
Tested on Magento 2.4.9
Recent Test History
Each release is tested against the latest Magento version at that time.
Top Contributors
View LeaderboardShare This Module's Status
README
Loaded from GitHubAngeo Rich Data — Magento 2
Fixes the "Product schema — JSON-LD structured data" signal in angeo/module-aeo-audit. Injects spec-compliant JSON-LD on product pages, CMS pages, and homepage.
What this module fixes
| AEO Audit signal | Before | After |
|---|---|---|
| Product schema — JSON-LD structured data | FAIL / WARN | PASS |
| FAQPage schema — AI answer eligibility | WARN | PASS (on FAQ CMS pages) |
| Merchant policies — return & shipping schema | FAIL | PASS (when enabled & configured) |
| Product schema — AggregateRating | WARN | PASS (when reviews exist) |
| JSON-LD quality — BreadcrumbList | WARN | PASS (now rendered on product pages) |
Schema types injected
| Schema | Pages | Key fields |
|---|---|---|
Product |
All product pages | name, description, image, sku, gtin/mpn, offers.price, offers.priceCurrency, offers.availability, offers.hasMerchantReturnPolicy, offers.shippingDetails, aggregateRating |
Organization |
All pages | name, url, logo, sameAs, contactPoint |
WebSite |
Homepage only | name, url, potentialAction/SearchAction |
BreadcrumbList |
Product pages | category path |
FAQPage |
CMS pages with FAQ content | auto-detected Q&A pairs |
Installation
composer require angeo/module-rich-data
bin/magento setup:upgrade
bin/magento cache:flush
Configuration
Stores → Configuration → Angeo → Rich Data (JSON-LD)
Product schema
- Enable/disable
- Include AggregateRating (from Magento reviews)
- Include BreadcrumbList
- Include SKU
- Include Brand (configurable attribute)
- Include GTIN / MPN (configurable attributes)
- Item condition (New/Used/Refurbished)
- In-stock / out-of-stock availability URLs
Merchant policies (return & shipping)
Injects offers.hasMerchantReturnPolicy and offers.shippingDetails — required by Google & ChatGPT Shopping since Jan 2026. Disabled by default; enable and fill in your real values.
- Return policy: enable, return window (days), applicable country, return fee
- Shipping details: enable, flat shipping rate, destination country, handling time (min/max days), transit time (min/max days)
Organization schema
- Organization name (default: store name)
- Logo URL
- sameAs social URLs (comma-separated)
- Contact telephone + type
WebSite schema
- Enable/disable
- Include SearchAction (Sitelinks Searchbox)
FAQPage schema
- Enable/disable — auto-detected from CMS page content
FAQ page markup (recommended)
Add data-faq-question / data-faq-answer attributes to your CMS FAQ page for explicit Q&A detection:
<div data-faq-question="What is your return policy?"
data-faq-answer="We offer 30-day returns on all items in original condition.">
</div>
Without these attributes the module uses heuristic detection: <h2>/<h3> followed by <p> are treated as question/answer pairs.
Extending with custom schemas
Implement Angeo\RichData\Api\Data\SchemaInterface and register via di.xml:
<type name="Angeo\RichData\Model\JsonLd\Renderer\SchemaRenderer">
<arguments>
<argument name="builders" xsi:type="array">
<item name="my_schema" xsi:type="object">Vendor\Module\Model\JsonLd\Builder\MySchemaBuilder</item>
</argument>
</arguments>
</type>
CLI validation
# Validate on random product
bin/magento angeo:rich-data:validate --store=en_us
# Validate specific product on specific store
bin/magento angeo:rich-data:validate --store=en_us --product-id=42
Output example:
Validating JSON-LD for: [42] Alpine Hiking Jacket
Store: default
URL: https://mystore.com/alpine-jacket
Found 3 JSON-LD block(s):
Block 1: @type:Organization — valid JSON ✓
Block 2: @type:Product — valid JSON ✓
PASS aggregateRating present
Block 3: @type:BreadcrumbList — valid JSON ✓
All JSON-LD blocks are valid.
The Angeo AI Suite
| Module | Purpose |
|---|---|
angeo/module-aeo-audit |
AEO audit — detects missing schema |
angeo/module-rich-data |
This module — fixes missing schema |
angeo/module-llms-txt |
Generates /llms.txt |
angeo/module-openai-product-feed-api |
ACP REST API for ChatGPT Shopping |
License
MIT — see LICENSE
This content is fetched directly from the module's GitHub repository. We are not the authors of this content and take no responsibility for its accuracy, completeness, or any consequences arising from its use.