PHPackages                             mage2kishan/module-structured-data - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. mage2kishan/module-structured-data

ActiveMagento2-module[Utility &amp; Helpers](/categories/utility)

mage2kishan/module-structured-data
==================================

Panth Structured Data — JSON-LD schemas for Magento 2: Product, Breadcrumb, Organization, Website, Article, Review, Video, Brand, FAQ, SaleEvent, ReturnPolicy, Certification, Energy Label, Pros/Cons, and more.

1.0.10(3w ago)039↓50%proprietaryPHPPHP ~8.1.0||~8.2.0||~8.3.0||~8.4.0

Since Apr 22Pushed yesterdayCompare

[ Source](https://github.com/mage2sk/module-structured-data)[ Packagist](https://packagist.org/packages/mage2kishan/module-structured-data)[ Docs](https://kishansavaliya.com)[ RSS](/packages/mage2kishan-module-structured-data/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (7)Versions (12)Used By (0)

Panth Structured Data — JSON-LD for Magento 2 (Hyva + Luma) | Panth Infotech
============================================================================

[](#panth-structured-data--json-ld-for-magento-2-hyva--luma--panth-infotech)

[![Magento 2.4.4 - 2.4.8](https://camo.githubusercontent.com/079c832211eed4f9451ebe264e3865f825b0f9f31b041cbf03676c6e254535d4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d6167656e746f2d322e342e342532302d2d253230322e342e382d6f72616e67653f6c6f676f3d6d6167656e746f266c6f676f436f6c6f723d7768697465)](https://magento.com)[![PHP 8.1 - 8.4](https://camo.githubusercontent.com/56b3cce18841623e2cbed2ebf09b06be1be8807e99e6e054a89d304ab4790b8e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e312532302d2d253230382e342d626c75653f6c6f676f3d706870266c6f676f436f6c6f723d7768697465)](https://php.net)[![Hyva Compatible](https://camo.githubusercontent.com/7414aeca90f39bc425062b9e70a302e67b18a960620e7c0651f204e7ed65ca2e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f487976612d436f6d70617469626c652d304439343838)](https://www.hyva.io)![Luma Compatible](https://camo.githubusercontent.com/3c1945ee121ef64870a6f3583c91ffdfb4d8ffc35809e7ce34ca549a357e1ded/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c756d612d436f6d70617469626c652d6f72616e6765)[![Packagist](https://camo.githubusercontent.com/bf3841e919eb97555ed07a583bf60a960062c0be9b66f53d52b6778407cfc457/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5061636b61676973742d6d616765326b697368616e2532466d6f64756c652d2d737472756374757265642d2d646174612d6f72616e67653f6c6f676f3d7061636b6167697374266c6f676f436f6c6f723d7768697465)](https://packagist.org/packages/mage2kishan/module-structured-data)[![GitHub](https://camo.githubusercontent.com/947f50b8ca553c55d4bdff84c04b4fbad22a0eaf292abeea9b682839c8076a6b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4769744875622d6d61676532736b2532466d6f64756c652d2d737472756374757265642d2d646174612d3138313731373f6c6f676f3d676974687562266c6f676f436f6c6f723d7768697465)](https://github.com/mage2sk/module-structured-data)[![Upwork Top Rated Plus](https://camo.githubusercontent.com/6f72584179420c41ed90432fd2579a4ed36199d4229e8181d20f353c1c4ee4eb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5570776f726b2d546f702532305261746564253230506c75732d3134613830303f6c6f676f3d7570776f726b266c6f676f436f6c6f723d7768697465)](https://www.upwork.com/freelancers/~016dd1767321100e21)[![Website](https://camo.githubusercontent.com/f1ae86d28e2b505aee60f240d3e5508e390b0a8dc7a9b7ecf1b450fad862053f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f576562736974652d6b697368616e736176616c6979612e636f6d2d304439343838)](https://kishansavaliya.com)

 [![Magento 2 Structured Data JSON-LD free extension for Google Rich Results, Hyva and Luma ready — built by Kishan Savaliya (Panth Infotech), Top Rated Plus on Upwork.](docs/images/hero-banner.png)](docs/images/hero-banner.png)

> **One JSON-LD block per page, product-type aware, theme-agnostic.** Panth Structured Data emits a single `` with a deduplicated `@graph` covering every schema.org node Google cares about — Product, Offer / AggregateOffer, BreadcrumbList, Organization, WebSite + SearchAction, ItemList, Review + AggregateRating, FAQPage, Article, VideoObject, MerchantReturnPolicy — with automatic strip of Magento's native duplicate markup. Identical output on Hyva and Luma, zero theme overrides.

**Panth Structured Data** is a production-grade schema.org JSON-LD module for Magento 2. A single head block feeds a pipeline of 24 content providers that each contribute one or more nodes to a shared `@graph` which an `Aggregator` deduplicates by `@id` and deep-merges so two providers contributing to the same entity always produce a single coherent node. A plugin on `AbstractBlock::afterToHtml` strips Magento's native `application/ld+json` scripts from `product.info.main`, `breadcrumbs` and `product.price.final` so you never ship two versions of the same schema. Every toggle, attribute code, and social URL lives under **Admin → Stores → Configuration → Panth Extensions → Structured Data** — nothing runs unless it's applicable on the current page.

Full product-type coverage: **simple** products emit `Product + Offer`, **configurable** emits `Product + AggregateOffer` with one child `Offer` per variant (15 variants → 15 offers), **bundle** emits `Product + AggregateOffer` with `lowPrice` / `highPrice` from the bundle price range, **grouped** emits `Product + AggregateOffer` with one child `Offer` per grouped SKU. Across all variant types the shared offer-level extras (`itemCondition`, `seller @id → #organization`, `priceValidUntil`, `shippingDetails`, `hasMerchantReturnPolicy`) ride through the deep-merge so rich-result validators always see a complete Offer.

---

🚀 Need Custom Magento 2 Development?
------------------------------------

[](#-need-custom-magento-2-development)

> **Get a free quote for your project in 24 hours** — custom modules, Hyva themes, performance optimization, M1→M2 migrations, and Adobe Commerce Cloud.

 [ ![Get a Free Quote](https://camo.githubusercontent.com/eac8c45d21cff8b139ddc392325f3bd6c8266a6f3d7b23f15131c958f3d3c8d0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f476574253230612532304672656525323051756f74652532302545322538362539322d5265706c7925323077697468696e2532303234253230686f7572732d4443323632363f7374796c653d666f722d7468652d6261646765) ](https://kishansavaliya.com/get-quote)

### 🏆 Kishan Savaliya

[](#-kishan-savaliya)

**Top Rated Plus on Upwork**

[![Hire on Upwork](https://camo.githubusercontent.com/b69353d3c6e192f4d03cc36bb8883612004e32f54dd2dbcc1e700dd791acd875/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f486972652532306f6e2532305570776f726b2d546f702532305261746564253230506c75732d3134613830303f7374796c653d666f722d7468652d6261646765266c6f676f3d7570776f726b266c6f676f436f6c6f723d7768697465)](https://www.upwork.com/freelancers/~016dd1767321100e21)

100% Job Success • 10+ Years Magento Experience Adobe Certified • Hyva Specialist

### 🏢 Panth Infotech Agency

[](#-panth-infotech-agency)

**Magento Development Team**

[![Visit Agency](https://camo.githubusercontent.com/bbf04bdd2aff502082508568ec42ace3a7475c98756f596e2013056c89726ed6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f56697369742532304167656e63792d50616e7468253230496e666f746563682d3134613830303f7374796c653d666f722d7468652d6261646765266c6f676f3d7570776f726b266c6f676f436f6c6f723d7768697465)](https://www.upwork.com/agencies/1881421506131960778/)

Custom Modules • Theme Design • Migrations Performance • SEO • Adobe Commerce Cloud

**Visit our website:** [kishansavaliya.com](https://kishansavaliya.com) | **Get a quote:** [kishansavaliya.com/get-quote](https://kishansavaliya.com/get-quote)

---

Table of Contents
-----------------

[](#table-of-contents)

- [Admin Preview](#admin-preview)
- [Key Features](#key-features)
- [How It Works](#how-it-works)
- [Schema.org Nodes Emitted](#schemaorg-nodes-emitted)
- [Product Type Coverage](#product-type-coverage)
- [Compatibility](#compatibility)
- [Installation](#installation)
- [Configuration](#configuration)
- [Quick Test — URLs You Can Hit Right Now](#quick-test--urls-you-can-hit-right-now)
- [How to Validate with Google Search Console (Step by Step)](#how-to-validate-with-google-search-console-step-by-step)
- [Other Validators](#other-validators)
- [Per-Provider Deep Dive](#per-provider-deep-dive)
- [Troubleshooting](#troubleshooting)
- [FAQ](#faq)
- [Support](#support)
- [About Panth Infotech](#about-panth-infotech)

---

Admin Preview
-------------

[](#admin-preview)

**Stores → Configuration → Panth Extensions → Structured Data** carries the full configuration surface — Social Profiles (Organization `sameAs`), Organization Details, Structured Data toggles (JSON-LD), and Breadcrumbs. Every field is `[store view]`-scoped so a multi-store install can ship a different schema per storefront.

[![Admin configuration](docs/images/admin-config.png)](docs/images/admin-config.png)

---

Key Features
------------

[](#key-features)

### One Block, One Graph, Zero Duplicates

[](#one-block-one-graph-zero-duplicates)

- **Single ``** per page. Everything the module knows about the current entity lives inside one `@graph`.
- **Aggregator** deduplicates by `@id` and **deep-merges** so the Product node emitted by `ProductProvider` and the AggregateOffer from `ConfigurableOfferProvider` become one coherent Product with one Offer, no collisions.
- **Native-markup strip plugin** removes Magento's built-in `application/ld+json` from `product.info.main`, `breadcrumbs`, `product.price.final` plus all `itemprop` / `itemscope` / `itemtype` microdata attributes on those blocks — so you never ship two Product schemas.
- **Own blocks are explicitly skipped** — scripts carrying `data-panth-seo` are preserved.

### Full Product Type Coverage

[](#full-product-type-coverage)

- **Simple** → `Product` + scalar `Offer` (price / availability / itemCondition / seller / priceValidUntil / shippingDetails).
- **Configurable** → `Product` + `AggregateOffer` (`lowPrice` / `highPrice` / `offerCount`) with one child `Offer` per visible variant, each carrying its own price / sku / availability / url.
- **Bundle** → `Product` + `AggregateOffer` with `lowPrice` / `highPrice` pulled from the bundle option price range. Fixed-price bundles get a single `Offer` with the fixed final price.
- **Grouped** → `Product` + `AggregateOffer` with one child `Offer` per grouped SKU (name / price / availability / sku / url).
- **Virtual / Downloadable** → treated like simple products — `Product` + `Offer`.
- **ProductGroup + hasVariant** (optional, opt-in) → richer variant modelling via `ProductGroup` + `variesBy` on `color` / `size` / `material`.

### Identity Nodes

[](#identity-nodes)

- **Organization** — name / url / logo / legalName / contactPoint (phone + email) / PostalAddress / `sameAs` array merging the 7 dedicated social-profile fields (Facebook, Twitter/X, Instagram, LinkedIn, YouTube, Pinterest, TikTok) with a free-form textarea for anything else.
- **WebSite** — with `SearchAction` for Google Sitelinks Search Box eligibility.
- **Seller** — auto-merged into `#organization` by default (since `business_type = Organization`); switches the `@type` to `LocalBusiness` / `Store` / `OnlineStore` when configured.

### Content-Rich Nodes

[](#content-rich-nodes)

- **BreadcrumbList** — full category hierarchy for products (Home → Gear → Bags → Product), not just Home + Product. Respects admin-configured category priority weights when enabled.
- **ItemList** — on category pages, listing products with `position` for rich carousel results.
- **Review** + **AggregateRating** — top-N approved reviews with ISO 8601 `datePublished`, scaled 1-5 rating from Magento's 0-100 percent votes.
- **FAQPage** — auto-extracted `Question` / `acceptedAnswer` pairs from product / category / CMS descriptions. Recognises `…?…` and `…?…` patterns.
- **Article** — for CMS pages under `blog/*`, `news/*`, `articles/*` or carrying `article` in their meta keywords.
- **VideoObject** — for product media gallery entries of type `external-video` (YouTube / Vimeo).

### Merchant / Pricing Extras

[](#merchant--pricing-extras)

- **MerchantReturnPolicy** — `applicableCountry` (ISO 3166-1), `merchantReturnDays` (int), `returnMethod`, `returnFees` (properly mapped to the schema.org `ReturnFeesEnumeration` URL).
- **Product** pricing: `priceValidUntil` from product `special_to_date` → admin default → auto +1 year fallback; `availability` from `isSalable()` / `StockRegistry` with LimitedAvailability / BackOrder / PreOrder / Discontinued beyond InStock / OutOfStock.
- **Sale Event** (opt-in) — `priceSpecification` with `validFrom` / `validThrough` on products with active special prices.
- **Delivery Methods** — structured shipping details from admin-listed methods.
- **Payment Methods** — `acceptedPaymentMethod` in Offer from admin list.
- **Multi-Region Shipping** (auto-detect) — reads Magento's table-rate / flat-rate config and emits `shippingDetails` per region. Only when admin hasn't configured manual `delivery_methods`.

### Specialist Nodes

[](#specialist-nodes)

- **Brand** — standalone Brand node using the configured product attribute (default `manufacturer`) + admin-configurable default fallback brand.
- **Certifications** — `hasCertification` from a textarea attribute in `Authority | Name | ID` format.
- **Energy Efficiency Label (EU)** — `hasEnergyConsumptionDetails` with grades A–G.
- **Pros / Cons** — `positiveNotes` / `negativeNotes` ItemLists from textarea attributes.
- **Custom Properties** — admin-configurable JSON object deep-merged into the Product node for anything beyond the built-in schemas (e.g. `material`, `audience`, custom-vocabulary facets).

### Production-Grade Implementation

[](#production-grade-implementation)

- **Theme-agnostic** — head block attached to `head.additional` via `view/frontend/layout/default.xml`. No JS, no RequireJS, no `x-magento-init`. Identical output on Hyva, Luma, Breeze, and every custom theme.
- **Fully cacheable** — the head block is `cacheable="true"`, so FPC bakes the JSON-LD alongside the rest of the `` and the providers only run on uncached renders.
- **ISO 8601 dates everywhere** — product `dateModified` / `datePublished`, review `datePublished`, article dates, sale `validFrom`/`validThrough` all go through `DateTimeImmutable::format(ATOM)` for strict schema.org compliance.
- **Attribute-text coerced** — `getAttributeText()` return values (string | array | false | null from multi-select attributes) are normalised before use, preventing a single multi-select attribute from silently killing the entire Product node.
- **XSS-safe JSON payload** — every `getCode())` reads `panth_structured_data/structured_data/{code}`. Admin disables any provider with a single Yes/No toggle.
3. **Node collection** — applicable + enabled providers' `getJsonLd()` returns are collected. Single-node returns and list-of-nodes returns both work.
4. **Dedup + deep-merge** — two nodes with the same `@id` get merged key-by-key. Scalars from later providers win, arrays recurse, new keys get appended. Two providers contributing to the same Product, Organization, or Offer always produce one coherent node.
5. **Document shape** — one node in `@graph` → inline the node under `@context`. Multiple nodes → wrap in `@graph`.
6. **XSS safety** — every ` 0``FAQPage``{store_url}#faq-{sha1 of path}`Any page with ≥2 Q&amp;A pairs in description`Article``{page_url}#article`Blog-like CMS pages`VideoObject`no @id (list items)Product pages with external-video gallery entries`ItemList``{category_url}#productlist`Category pages with products`Brand`inline under `Product.brand`Product pages when brand attribute has value`ProductGroup``{parent_url}#productgroup`Configurable products (opt-in)All URL-valued attributes (`og:url`, `url`, `image`, `logo`, `sameAs`) preserve `:` and `/` (no entity-encoding). All dates are ISO 8601 (`YYYY-MM-DDTHH:MM:SS+00:00`). All enumerations (`availability`, `itemCondition`, `returnFees`, `returnPolicyCategory`, `returnMethod`) are full schema.org URLs.

---

Product Type Coverage
---------------------

[](#product-type-coverage)

Tested end-to-end across Magento's sample catalogue on both Hyva and Luma:

TypeSample SKUSample URL`Product.offers.@type`NotesSimple`24-WB02``/compete-track-tote.html``Offer`price, availability, itemCondition, seller, priceValidUntil, shippingDetailsConfigurable`MH01``/chaz-kangeroo-hoodie.html``AggregateOffer`15 child Offers (one per variant), lowPrice / highPrice / offerCountBundle (dynamic)`24-WG080``/sprite-yoga-companion-kit.html``AggregateOffer`lowPrice / highPrice from bundle option range, offerCount = 1Bundle (fixed)any fixed-price bundle—`Offer`single Offer with fixed final priceGrouped`24-WG085_Group``/set-of-sprite-yoga-straps.html``AggregateOffer`3 child Offers (one per grouped SKU)Virtualany virtual product—`Offer`same as simpleDownloadableany downloadable product—`Offer`same as simpleAcross all variant types the shared offer-level extras (`itemCondition`, `seller @id`, `priceValidUntil`, `shippingDetails`) merge into the `AggregateOffer` via the deep-merge path, so a bundle / grouped / configurable product still carries its return policy and product condition on the Offer node.

---

Compatibility
-------------

[](#compatibility)

RequirementVersions SupportedMagento Open Source2.4.4, 2.4.5, 2.4.6, 2.4.7, 2.4.8Adobe Commerce2.4.4, 2.4.5, 2.4.6, 2.4.7, 2.4.8Adobe Commerce Cloud2.4.4 — 2.4.8PHP8.1.x, 8.2.x, 8.3.x, 8.4.xMySQL8.0+MariaDB10.4+Hyva Theme1.0+ (native support)Luma ThemeNative supportRequired Dependency`mage2kishan/module-core` ^1.0Works standalone (no other Panth module needed) and composes cleanly with `Panth_AdvancedSEO`, `Panth_Faq`, `Panth_Testimonials` when any of those are installed (specialist providers defer to those modules on their own routes).

---

Installation
------------

[](#installation)

### Composer Installation (Recommended)

[](#composer-installation-recommended)

```
composer require mage2kishan/module-structured-data
bin/magento module:enable Panth_Core Panth_StructuredData
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento setup:static-content:deploy -f
bin/magento cache:flush
```

### Manual Installation via ZIP

[](#manual-installation-via-zip)

1. Download the latest release ZIP from [Packagist](https://packagist.org/packages/mage2kishan/module-structured-data) or the [Adobe Commerce Marketplace](https://commercemarketplace.adobe.com).
2. Extract the contents to `app/code/Panth/StructuredData/` in your Magento installation.
3. Ensure `Panth_Core` is installed (required dependency).
4. Run the same commands as above starting from `bin/magento module:enable`.

### Verify Installation

[](#verify-installation)

```
bin/magento module:status Panth_StructuredData
# Expected output: Module is enabled

# Every page now carries one JSON-LD block:
curl -ks https://your-store.test/ | grep -c 'application/ld+json'
# Expected output: 1
```

---

Configuration
-------------

[](#configuration)

Navigate to **Admin → Stores → Configuration → Panth Extensions → Structured Data**. Four fieldsets:

### Social Profiles (Organization `sameAs`)

[](#social-profiles-organization-sameas)

FieldPurposeFacebook URLFull `https://www.facebook.com/yourpage` URL added to `sameAs`Twitter (X) URLFull `https://twitter.com/yourhandle` URLInstagram URLFull Instagram profile URLLinkedIn URLFull LinkedIn company-page URLYouTube URLFull YouTube channel URLPinterest URLFull Pinterest profile URLTikTok URLFull TikTok profile URLAll URLs validated against `validate-url` and the module's internal HTTPS-only allowlist before being emitted.

### Organization Details

[](#organization-details)

FieldPurposeLegal Name`legalName` on the Organization nodeLogo URL`logo` (ImageObject)Phone`contactPoint.telephone` — overrides `general/store_information/phone`Email`contactPoint.email`Street / City / Region / Postal CodeFull `PostalAddress`Country (ISO 3166-1 alpha-2)`addressCountry` — e.g. `US`, `GB`, `DE`Additional `sameAs` URLsOne URL per line — appended to the social-profile `sameAs` arrayLeave empty to fall back to core Magento Store Information.

### Structured Data (JSON-LD)

[](#structured-data-json-ld)

Master toggles + attribute codes + defaults. Every toggle is Yes/No, every attribute code is a plain Magento attribute identifier.

SettingDefaultWhat it controlsEnable ProductYesEmits `Product` + `Offer` on product pagesEnable BreadcrumbYesEmits `BreadcrumbList` everywhereEnable OrganizationYesEmits `Organization` on every pageEnable WebSite / SiteLinksYesEmits `WebSite` + `SearchAction`Enable Auto-Extracted FAQ SchemaYesScans descriptions for Q&amp;A pairsEnable ArticleYesEmits `Article` on blog-like CMS pagesEnable ReviewYesEmits `Review` + `AggregateRating`Enable VideoObjectYesEmits `VideoObject` for external-video gallery entriesEnable BrandYesEmits `Brand` nodeEnable SellerYesEmits Seller (merged into `#organization` by default)Configurable: Multi-OfferYesEmits one child `Offer` per configurable variantRemove Native Magento JSON-LD MarkupYesStrips Magento's native ld+json on product / breadcrumb blocksReturn Policy Days30`merchantReturnDays` — set to 0 to disable the MerchantReturnPolicy nodeBrand Attribute Code`manufacturer`Product attribute used for Brand nameGTIN Attribute Code*(empty)*Product attribute for `gtin` / `gtin13` / `ean`MPN Attribute Code*(empty)*Product attribute for Manufacturer Part NumberEnable Product List SchemaYes`ItemList` on category pagesAccepted Payment Methods*(empty)*One method per line (Visa, Mastercard, PayPal)Delivery Methods*(empty)*One method per line (Standard Shipping, Express)Product ConditionNew`itemCondition` enum (New / Used / Refurbished / Damaged)Default Price Valid Until*(empty)*`YYYY-MM-DD` — falls back to +1 yearCustom JSON-LD Properties (Product)*(empty)*JSON object merged into the Product nodeEnable ProductGroup + hasVariantNoEmits `ProductGroup` with `variesBy` on color / size / materialEnable Pros/ConsNoEmits `positiveNotes` / `negativeNotes` ItemListsPros Attribute Code`product_pros`Textarea attribute for prosCons Attribute Code`product_cons`Textarea attribute for consEnable Energy Efficiency Label (EU)NoEmits `hasEnergyConsumptionDetails`Energy Class Attribute Code`energy_class`Attribute for grades A–GEnable Product CertificationsNoEmits `hasCertification`Certification Attribute Code`certifications`Textarea, one `Authority | Name | ID` per lineEnable Sale Event / Special Price DetailsYesEmits `priceSpecification` with `validFrom` / `validThrough`Seller Business TypeOrganization`Organization` / `LocalBusiness` / `Store` / `OnlineStore`Default Brand Name*(empty)*Fallback when product has no brand attributeReturn Policy TypeRefund`refund` / `exchange` (as `additionalProperty`)Return Fees`free``free` / `ReturnFeesCustomerResponsibility` / `ReturnShippingFees` / `RestockingFees`Limited Stock Threshold5Below this → `LimitedAvailability` instead of `InStock`### Breadcrumbs

[](#breadcrumbs)

SettingDefaultWhat it controlsEnable Breadcrumb PriorityNoWhen Yes, product breadcrumbs use category priority weightsBreadcrumb FormatLongest (deepest)`shortest` / `longest` — tiebreaker when priorities are equalEvery field is `[store view]`-scoped.

After any change, flush caches:

```
bin/magento cache:flush config full_page
```

---

Quick Test — URLs You Can Hit Right Now
---------------------------------------

[](#quick-test--urls-you-can-hit-right-now)

Every URL below returns HTML with exactly one `…` block. Substitute your own host for the domain.

### 1. View the JSON-LD in a browser

[](#1-view-the-json-ld-in-a-browser)

Open any URL → right-click → View Page Source → Ctrl-F for `application/ld+json`. The block carries the full `@graph`.

**Product types — Hyva + Luma test stores**

TypeHyvaLumaSimple`https://your-store.test/compete-track-tote.html``https://luma.your-store.test/compete-track-tote.html`Configurable`https://your-store.test/chaz-kangeroo-hoodie.html``https://luma.your-store.test/chaz-kangeroo-hoodie.html`Bundle`https://your-store.test/sprite-yoga-companion-kit.html``https://luma.your-store.test/sprite-yoga-companion-kit.html`Grouped`https://your-store.test/set-of-sprite-yoga-straps.html``https://luma.your-store.test/set-of-sprite-yoga-straps.html`**Other page types**

PageHyvaLumaHome`https://your-store.test/``https://luma.your-store.test/`Category (ItemList)`https://your-store.test/gear/bags.html``https://luma.your-store.test/gear/bags.html`CMS`https://your-store.test/about-us``https://luma.your-store.test/about-us`404`https://your-store.test/no-route``https://luma.your-store.test/no-route`Search`https://your-store.test/catalogsearch/result/?q=bag``https://luma.your-store.test/catalogsearch/result/?q=bag`### 2. Pretty-print from the terminal

[](#2-pretty-print-from-the-terminal)

```
curl -ks https://your-store.test/chaz-kangeroo-hoodie.html \
  | perl -ne 'BEGIN{$/=undef} while (/]*>(.*?)/gs) { print "$1\n" }' \
  | python3 -m json.tool
```

### 3. One-shot type summary across every page

[](#3-one-shot-type-summary-across-every-page)

```
for url in / /compete-track-tote.html /chaz-kangeroo-hoodie.html \
           /sprite-yoga-companion-kit.html /set-of-sprite-yoga-straps.html \
           /gear/bags.html /about-us /no-route; do
  types=$(curl -ks "https://your-store.test$url" \
    | perl -ne 'BEGIN{$/=undef} while (/]*>(.*?)/gs) { print "$1\n" }' \
    | python3 -c 'import json,sys; d=json.loads(sys.stdin.read()); print(",".join(n.get("@type","?") for n in d.get("@graph",[d])))')
  printf "  %-40s %s\n" "$url" "$types"
done
```

Expected output on a stock sample-data install:

```
  /                                        Organization,WebSite
  /compete-track-tote.html                 Organization,WebSite,BreadcrumbList,Product,Review,MerchantReturnPolicy
  /chaz-kangeroo-hoodie.html               Organization,WebSite,BreadcrumbList,Product,MerchantReturnPolicy
  /sprite-yoga-companion-kit.html          Organization,WebSite,BreadcrumbList,Product,MerchantReturnPolicy
  /set-of-sprite-yoga-straps.html          Organization,WebSite,BreadcrumbList,Product,MerchantReturnPolicy
  /gear/bags.html                          Organization,WebSite,BreadcrumbList,ItemList
  /about-us                                Organization,WebSite
  /no-route                                Organization

```

### 4. Browser DevTools one-liner

[](#4-browser-devtools-one-liner)

Paste in Chrome / Firefox / Safari DevTools console on any page:

```
JSON.parse(document.querySelector('script[data-panth-seo="jsonld"]').textContent)
  ['@graph'].forEach(n => console.log(n['@type'], '→', n.name || n.headline || n['@id']))
```

---

How to Validate with Google Search Console (Step by Step)
---------------------------------------------------------

[](#how-to-validate-with-google-search-console-step-by-step)

Google's Rich Results Test is the authoritative validator — it's what determines whether your pages get rich cards in SERPs. Here's the full flow.

### Prerequisite: your site must be publicly reachable

[](#prerequisite-your-site-must-be-publicly-reachable)

Google's crawler can't reach `localhost`, `*.test`, VPN-internal, or intranet URLs. If you're testing locally, expose the site through a tunnel first:

```
# Option A: Cloudflare Tunnel (free, no signup for temporary tunnels)
cloudflared tunnel --url https://your-store.test

# Option B: ngrok (free tier fine for testing)
ngrok http https://your-store.test
```

Either gives you a public `https://xxxx.trycloudflare.com/` or `https://xxxx.ngrok.io/` URL. Use that in every validator below.

### Step 1 — Google Rich Results Test

[](#step-1--google-rich-results-test)

1. Open [**search.google.com/test/rich-results**](https://search.google.com/test/rich-results).
2. Paste your full product URL (e.g. `https://xxxx.trycloudflare.com/compete-track-tote.html`).
3. Click **Test URL**. Google fetches the page.
4. Once it finishes, you'll see one or more "Detected items" — **Products**, **Breadcrumbs**, **Reviews**, **Merchant listings**, etc.
5. Click each item to expand. The left pane shows a live SERP preview card with your product image, price, rating stars, and availability.
6. Any errors or warnings show at the top of each item panel. **Errors** block rich results; **warnings** are suggestions.

**What to expect on a working product page:**

- ✅ Products — 1 item detected (valid)
- ✅ Breadcrumbs — 1 item detected (valid)
- ✅ Merchant listings — 1 item detected (valid) \[if MerchantReturnPolicy enabled\]
- ✅ Reviews — N items detected \[if product has reviews\]

### Step 2 — Submit your domain to Google Search Console

[](#step-2--submit-your-domain-to-google-search-console)

To track rich-result performance over time, add the whole site:

1. Open [**search.google.com/search-console**](https://search.google.com/search-console).
2. Click **Add property**.
3. Choose **Domain** (covers all subdomains + http/https) or **URL prefix** (for a specific scheme + host).
4. Follow the verification flow — DNS TXT record for a domain property, or HTML file upload / meta tag / Google Analytics / Google Tag Manager for URL prefix.
5. Once verified you'll see the **Overview** dashboard within 24 hours.

### Step 3 — Submit your sitemap

[](#step-3--submit-your-sitemap)

If you have `Panth_HtmlSitemap` or any other sitemap generator, submit it:

1. In Search Console → **Sitemaps** (left sidebar).
2. Paste the sitemap URL (e.g. `https://your-store.com/sitemap.xml`).
3. Click **Submit**. Google will crawl every URL in the sitemap and start detecting structured data.

### Step 4 — Monitor rich-result eligibility

[](#step-4--monitor-rich-result-eligibility)

After Google re-crawls (typically 1–7 days):

1. In Search Console → **Enhancements** (left sidebar).
2. You'll see separate reports for every rich-result type your site emits:
    - **Products** (from `Product` schema)
    - **Breadcrumbs** (from `BreadcrumbList` schema)
    - **Review snippets** (from `Review` + `AggregateRating`)
    - **Merchant listings** (from `Product` + `Offer` with price + availability + merchant return policy)
    - **Sitelinks searchbox** (from `WebSite` + `SearchAction`)
    - **FAQ** (from `FAQPage` schema)
    - **Logo** (from `Organization` + `logo`)
3. Each report shows **Valid** / **Valid with warnings** / **Invalid** URLs. Invalid URLs are the ones to fix first.

### Step 5 — Fix any invalid items

[](#step-5--fix-any-invalid-items)

For each invalid URL:

1. Click the error type (e.g. "Missing field 'priceValidUntil'").
2. Review the list of affected URLs.
3. Open the URL in the Rich Results Test (Step 1) to see the exact problem.
4. Fix the admin config — e.g. populate **Default Price Valid Until** or the missing brand attribute.
5. Flush caches (`bin/magento cache:flush config full_page`).
6. In Search Console, click **Validate fix** on the error. Google will re-crawl within days.

### Step 6 — Request indexing (optional, speeds things up)

[](#step-6--request-indexing-optional-speeds-things-up)

For a single URL:

1. In Search Console → **URL Inspection** (top search bar).
2. Paste a product URL.
3. Click **Request Indexing**.
4. Google will prioritize crawling that URL. Repeat for 10-20 of your most important pages.

### Step 7 — Confirm rich results in SERP

[](#step-7--confirm-rich-results-in-serp)

After Google re-indexes, search for your product in `site:your-store.com` mode:

```
site:your-store.com compete track tote

```

Rich snippets (price, stars, availability badges, breadcrumb path above the title) should appear. Full rollout across all indexed pages takes 2-8 weeks.

---

Other Validators
----------------

[](#other-validators)

Complement Google's Rich Results Test with these before shipping:

ToolWhat it checksURL**Schema.org Validator**Stricter than Google — every schema.org issue, nested or not[validator.schema.org](https://validator.schema.org/)**Facebook Sharing Debugger**Open Graph + schema.org for Facebook preview cards[developers.facebook.com/tools/debug](https://developers.facebook.com/tools/debug/)**LinkedIn Post Inspector**Schema preview for LinkedIn shares[linkedin.com/post-inspector](https://www.linkedin.com/post-inspector/)**Bing Webmaster Tools — Markup Validator**Bing's equivalent of Rich Results Test[bing.com/webmasters/tools/markup-validator](https://www.bing.com/webmasters/tools/markup-validator)**opengraph.xyz**Multi-platform preview (Facebook, Twitter/X, LinkedIn, WhatsApp, Slack, iMessage, Discord)[opengraph.xyz](https://www.opengraph.xyz/)**Merkle Schema Markup Validator**Batch-check multiple URLs[technicalseo.com/tools/schema-markup-generator](https://technicalseo.com/tools/schema-markup-generator)**Yandex Structured Data Validator**Yandex-specific schema rules[webmaster.yandex.com/tools/microtest](https://webmaster.yandex.com/tools/microtest/)---

Per-Provider Deep Dive
----------------------

[](#per-provider-deep-dive)

### `ProductProvider`

[](#productprovider)

- Runs on: product pages (`current_product` in registry).
- Emits: `Product` with `@id = {product_url}#product`, full image list (from Magento Image helper + media gallery), description (meta\_description → short\_description → description, ≤5000 chars), brand (via `Brand`), audience (via `PeopleAudience.audienceType` from `gender` attribute), scalar `Offer` for simple products or offer-level extras (itemCondition, seller, priceValidUntil, shippingDetails, hasMerchantReturnPolicy) for variant types, `AggregateRating` from Magento's review summary, ISO 8601 `dateModified` / `datePublished`.
- Availability logic: Discontinued (status=disabled or visibility=not\_visible) → PreOrder (news\_from\_date in future) → BackOrder (backorders &gt; 0) → OutOfStock → LimitedAvailability (qty &lt; threshold) → InStock.
- Variant types (`configurable` / `bundle` / `grouped`) skip scalar `price` / `priceCurrency` / `availability` / `url` — the specialised provider contributes those via deep-merge.

### `ConfigurableOfferProvider`, `BundleOfferProvider`, `GroupedOfferProvider`

[](#configurableofferprovider-bundleofferprovider-groupedofferprovider)

- Run on: configurable, bundle, grouped products respectively.
- Emit: a `Product #product` contribution containing an `AggregateOffer` with `lowPrice` / `highPrice` / `offerCount` and for Configurable / Grouped a child `offers` array of per-variant `Offer` nodes.
- Bundle dynamic pricing pulls min/max from the bundle option price range. Bundle fixed pricing emits a scalar `Offer`.
- All three merge into the same `#product` @id so the result is one coherent Product node.

### `OrganizationProvider` + `SellerProvider`

[](#organizationprovider--sellerprovider)

- Run on: every page (Organization) / product pages (Seller).
- Emit: `Organization #organization` with full identity details.
- `SellerProvider` uses the same `@id = #organization` by default; when `business_type = LocalBusiness / Store / OnlineStore` the merged `@type` is promoted to the more specific class.
- `sameAs` combines 7 dedicated social-profile fields with a free-form textarea.

### `BreadcrumbProvider`

[](#breadcrumbprovider)

- Runs on: any page with a clear entity (product / category / CMS).
- For products: picks the primary category from the product's category set, honoring admin-configured priority weights when `enable_breadcrumb_priority = Yes`, else tiebreaker on depth (longest / shortest).
- Builds full hierarchy: Home → Category → Subcategory → Product (4 levels on most PDPs).

### `ProductListProvider`

[](#productlistprovider)

- Runs on: category pages only.
- Emits: `ItemList` with one `ListItem` per visible product in the current category view, preserving pagination order.

### `ReviewProvider`

[](#reviewprovider)

- Runs on: product pages with reviews enabled (`catalog/review/active`).
- Emits: up to 5 most-recent approved `Review` nodes with ISO 8601 `datePublished`, scaled 1-5 rating from Magento's 0-100 percent vote aggregate.
- Defers to `Panth_Testimonials` on its own routes.

### `WebsiteProvider`

[](#websiteprovider)

- Runs on: every page.
- Emits: `WebSite #website` with `SearchAction` pointing at `{store_url}catalogsearch/result/?q={search_term_string}` — enables Google Sitelinks Search Box.

### `FaqExtractor`

[](#faqextractor)

- Runs on: any page with a description containing heading/paragraph Q&amp;A pairs.
- Parser: `…?…` and `…?…`.
- Needs ≥2 Q&amp;A pairs; defers to `Panth_Faq` on its routes.

### `CmsArticleProvider`

[](#cmsarticleprovider)

- Runs on: CMS pages whose identifier starts with `blog/`, `news/`, `articles/` or whose meta keywords contain `article`.
- Emits: `Article` with headline / description / mainEntityOfPage / url / author / publisher refs + ISO 8601 `datePublished` / `dateModified` + up to 5000 chars of articleBody.

### `ReturnPolicyProvider`

[](#returnpolicyprovider)

- Runs on: product pages when `return_policy_days > 0`.
- Emits: `MerchantReturnPolicy` with `applicableCountry` from store config, `merchantReturnDays` (int), `returnMethod`, `returnFees` (mapped to `ReturnFeesEnumeration` URL).

### `VideoProvider`

[](#videoprovider)

- Runs on: product pages with media gallery entries of type `external-video`.
- Emits: `VideoObject` for each video (YouTube / Vimeo).

### Specialist providers

[](#specialist-providers)

- `CertificationProvider` — `hasCertification` from a textarea attribute.
- `EnergyLabelProvider` — `hasEnergyConsumptionDetails` with grade A–G.
- `ProsConsProvider` — `positiveNotes` / `negativeNotes` ItemLists.
- `SaleEventProvider` — `priceSpecification` (UnitPriceSpecification) with validFrom/validThrough when special price is active.
- `DeliveryMethodProvider` / `PaymentMethodProvider` / `MultiRegionShippingProvider` — Offer extensions for shipping + payment.
- `ProductGroupProvider` — `ProductGroup` + `hasVariant` + `variesBy` (opt-in; richer variant modelling).
- `CustomPropertiesProvider` — admin-editable JSON object deep-merged into the Product node for anything outside the built-in schemas.
- `BrandProvider` — standalone Brand node alongside the inline `Product.brand`.

---

Troubleshooting
---------------

[](#troubleshooting)

IssueCauseResolutionNo JSON-LD on any pageFPC cache from before install`bin/magento cache:flush config full_page`JSON-LD missing on specific page typeProvider's `isApplicable()` returned falseCheck the provider's rules — e.g. `ItemList` needs a category with products; `FAQPage` needs ≥2 Q&amp;A pairsDuplicate Product schema in SERP`remove_native_markup = No`Flip to Yes + flush cache`Breadcrumbs` only has 2 items (Home → Product) on PDPs with categoriesOld versions (pre-1.0.1) had a missing Config constantUpgrade to ≥ 1.0.1Multi-select `gender` or `brand` attr silently drops entire Product schemaPre-1.0.2 `(string)` cast on array returnUpgrade to ≥ 1.0.2Configurable / bundle / grouped `offers` has leftover `price` keyPre-1.0.2 ProductProvider didn't gate scalar pricing for variant typesUpgrade to ≥ 1.0.2Google Rich Results Test: "Either 'offers', 'review', or 'aggregateRating' should be specified"Product has `$0.00` final price or is out-of-stock with stock-based logicSet a price; check availability logicGoogle: "Missing field 'priceValidUntil'"No `special_to_date` and admin default emptySet **Default Price Valid Until** to a future `YYYY-MM-DD` (module auto-falls-back to +1 year when both are empty)Google: "Invalid URL in field 'image'"Product has no image and store logo is a CDN URL that 404sUpload a valid product image or store logoGoogle: "Missing field 'returnFees'"Pre-1.0.2 emitted free-text `returnFees` that didn't match `ReturnFeesEnumeration`Upgrade to ≥ 1.0.2FAQPage not detectedDescriptions use a non-standard Q&amp;A HTML shapeUse `Question?Answer.` — needs ≥2 pairs`SearchAction` points at wrong URLStore base URL misconfiguredFix **Stores → Configuration → Web → Base URLs**Organization name renders as "Default Store View"Store Information → Store Name not setSet it under **Stores → Configuration → General → Store Information**---

FAQ
---

[](#faq)

### Will this slow down my storefront?

[](#will-this-slow-down-my-storefront)

No. The head block is `cacheable="true"` so the full JSON-LD payload is baked into full-page cache. Providers only run on uncached renders; cached hits serve the pre-rendered `` tag with zero PHP evaluation.

### Is it GDPR compliant?

[](#is-it-gdpr-compliant)

The module only emits data already public on your storefront — product details, store identity, and aggregate review stats. It does not render personally identifiable data in structured-data form.

### Can I disable individual schemas?

[](#can-i-disable-individual-schemas)

Yes. Every provider has a **Yes/No** toggle under **Stores → Configuration → Panth Extensions → Structured Data** — Product, Breadcrumb, Organization, WebSite, FAQ, Article, Review, VideoObject, Brand, Seller, Product List (ItemList), ProductGroup, Pros/Cons, Energy Label, Certifications, Sale Event, Remove Native Markup.

### Does it work with Hyva?

[](#does-it-work-with-hyva)

Yes. No JS, no RequireJS, no `x-magento-init`. The head block attaches via `view/frontend/layout/default.xml` to the `head.additional` container which every Magento theme exposes. Identical output on Hyva, Luma, Breeze, and any custom theme.

### Does it support multi-store / multi-language?

[](#does-it-support-multi-store--multi-language)

Yes. Every admin field is `[store view]`-scoped, so different store views can ship different Organization data, social profiles, toggles, and attribute codes. URLs in the JSON-LD are scoped to the current store's base URL.

### Can I customize the emitted JSON?

[](#can-i-customize-the-emitted-json)

Three ways, in increasing order of effort:

1. **Custom JSON-LD Properties (Product)** — admin field that accepts a JSON object; merged into the Product node on every PDP.
2. **Per-product EAV attributes** — the resolver reads product attributes like `meta_description`, `short_description`, `manufacturer`, `gender` — populate those for per-product overrides.
3. **Custom provider class** — implement `StructuredDataProviderInterface`, register in `di.xml` under the `providers` argument of `Panth\StructuredData\Model\StructuredData\Composite` (and `Aggregator`). The aggregator will pick it up automatically.

### Can I override a provider's output?

[](#can-i-override-a-providers-output)

Yes — declare a virtualType in your own module's `di.xml` with the same class name as the provider you want to replace, or use a preference on `Panth\StructuredData\Api\StructuredDataProviderInterface` with a type constraint.

### Does it interact with `Panth_AdvancedSEO`, `Panth_Faq`, `Panth_Testimonials`?

[](#does-it-interact-with-panth_advancedseo-panth_faq-panth_testimonials)

Yes, friendly:

- `Panth_AdvancedSEO`: shares the `panth_seo/general/enabled` master switch when installed; defaults are set locally so standalone installs still work.
- `Panth_Faq`: `FaqExtractor` defers to `Panth_Faq` on its own routes and when the `faq.schema` block is mounted and producing data.
- `Panth_Testimonials`: `ReviewProvider` defers on the `testimonials` route when the module is enabled.

### Is `Panth_Core` required?

[](#is-panth_core-required)

Yes. `mage2kishan/module-core` is a required dependency and is pulled in automatically by Composer.

### Does it emit `itemprop` / microdata?

[](#does-it-emit-itemprop--microdata)

No — only JSON-LD. Microdata is legacy and mixing the two often produces duplicate-structured-data warnings in Search Console. The `RemoveNativeMarkupPlugin` actively strips native Magento microdata from the target blocks.

### What's the smallest Magento version supported?

[](#whats-the-smallest-magento-version-supported)

2.4.4. For earlier Magento versions, contact [Panth Infotech](https://kishansavaliya.com/get-quote) — we can backport on request.

---

Support
-------

[](#support)

ChannelContactEmailWebsite[kishansavaliya.com](https://kishansavaliya.com)WhatsApp+91 84012 70422GitHub Issues[github.com/mage2sk/module-structured-data/issues](https://github.com/mage2sk/module-structured-data/issues)Upwork (Top Rated Plus)[Hire Kishan Savaliya](https://www.upwork.com/freelancers/~016dd1767321100e21)Upwork Agency[Panth Infotech](https://www.upwork.com/agencies/1881421506131960778/)Response time: 1-2 business days.

### 💼 Need Custom Magento Development?

[](#-need-custom-magento-development)

Looking for **custom Magento module development**, **Hyva theme customization**, **store migrations**, or **performance optimization**? Get a free quote in 24 hours:

 [ ![Get a Free Quote](https://camo.githubusercontent.com/0d9512dc4f89ef40179e9f650fd0786b6bc846d289ab2cb04a223a43f2833eeb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f254630253946253932254143253230476574253230612532304672656525323051756f74652d6b697368616e736176616c6979612e636f6d2532466765742d2d71756f74652d4443323632363f7374796c653d666f722d7468652d6261646765) ](https://kishansavaliya.com/get-quote)

 [ ![Hire on Upwork](https://camo.githubusercontent.com/fad56e8be7896e39593f090cd2ed32e6bf86b4b6e75974cf292aee99d45f5077/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f486972652532304b697368616e2d546f702532305261746564253230506c75732d3134613830303f7374796c653d666f722d7468652d6261646765266c6f676f3d7570776f726b266c6f676f436f6c6f723d7768697465) ](https://www.upwork.com/freelancers/~016dd1767321100e21) [ ![Visit Agency](https://camo.githubusercontent.com/fdf45a9d937d72b896f5e2557337d47efebc0e06b7ad4d4c162c0a64375a62fa/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f56697369742d50616e7468253230496e666f746563682532304167656e63792d3134613830303f7374796c653d666f722d7468652d6261646765266c6f676f3d7570776f726b266c6f676f436f6c6f723d7768697465) ](https://www.upwork.com/agencies/1881421506131960778/) [ ![Visit Website](https://camo.githubusercontent.com/7455559317a374eb3eb536c5ea201ca2c2a29bc13d82cc127278975a680d552c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5669736974253230576562736974652d6b697368616e736176616c6979612e636f6d2d3044393438383f7374796c653d666f722d7468652d6261646765) ](https://kishansavaliya.com)

**Specializations:**

- 🛒 **Magento 2 Module Development** — custom extensions following MEQP standards
- 🎨 **Hyva Theme Development** — Alpine.js + Tailwind CSS, lightning-fast storefronts
- 🖌️ **Luma Theme Customization** — pixel-perfect designs, responsive layouts
- ⚡ **Performance Optimization** — Core Web Vitals, page speed, caching strategies
- 🔍 **Magento SEO** — structured data, hreflang, sitemaps, AI-generated meta
- 🛍️ **Checkout Optimization** — one-page checkout, conversion rate optimization
- 🚀 **M1 to M2 Migrations** — data migration, custom feature porting
- ☁️ **Adobe Commerce Cloud** — deployment, CI/CD, performance tuning
- 🔌 **Third-party Integrations** — payment gateways, ERP, CRM, marketing tools

---

License
-------

[](#license)

Panth Structured Data is licensed under a proprietary license — see `LICENSE.txt`. One license per Magento installation.

---

About Panth Infotech
--------------------

[](#about-panth-infotech)

Built and maintained by **Kishan Savaliya** — [kishansavaliya.com](https://kishansavaliya.com) — a **Top Rated Plus** Magento developer on Upwork with 10+ years of eCommerce experience.

**Panth Infotech** is a Magento 2 development agency specializing in high-quality, security-focused extensions and themes for both Hyva and Luma storefronts. Our extension suite covers SEO, performance, checkout, product presentation, customer engagement, and store management — over 34 modules built to MEQP standards and tested across Magento 2.4.4 to 2.4.8.

Browse the full extension catalog on the [Adobe Commerce Marketplace](https://commercemarketplace.adobe.com) or [Packagist](https://packagist.org/packages/mage2kishan/).

### Quick Links

[](#quick-links)

- 🌐 **Website:** [kishansavaliya.com](https://kishansavaliya.com)
- 💬 **Get a Quote:** [kishansavaliya.com/get-quote](https://kishansavaliya.com/get-quote)
- 👨‍💻 **Upwork Profile (Top Rated Plus):** [upwork.com/freelancers/~016dd1767321100e21](https://www.upwork.com/freelancers/~016dd1767321100e21)
- 🏢 **Upwork Agency:** [upwork.com/agencies/1881421506131960778](https://www.upwork.com/agencies/1881421506131960778/)
- 📦 **Packagist:** [packagist.org/packages/mage2kishan/module-structured-data](https://packagist.org/packages/mage2kishan/module-structured-data)
- 🐙 **GitHub:** [github.com/mage2sk/module-structured-data](https://github.com/mage2sk/module-structured-data)
- 🛒 **Adobe Marketplace:** [commercemarketplace.adobe.com](https://commercemarketplace.adobe.com)
- 📧 **Email:**
- 📱 **WhatsApp:** +91 84012 70422

---

 **Ready to ship Google-validated structured data?**
 [ ![Get Started](https://camo.githubusercontent.com/66dee04430af977df988ac18454416f2f08a5169868a0d0689061b7e8db6f8ca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f254630253946253941253830253230476574253230537461727465642532302545322538362539322d4672656525323051756f7465253230696e2532303234682d4443323632363f7374796c653d666f722d7468652d6261646765) ](https://kishansavaliya.com/get-quote)

---

**SEO Keywords:** magento 2 structured data, magento 2 json-ld, magento 2 schema.org, magento 2 rich results, magento 2 product schema, magento 2 aggregateoffer, magento 2 breadcrumb schema, magento 2 organization schema, magento 2 review schema, magento 2 faqpage, magento 2 article schema, magento 2 videoobject, magento 2 merchantreturnpolicy, magento 2 product list schema, magento 2 itemlist, magento 2 seo schema, magento 2 google rich results, magento 2 sitelinks searchbox, magento 2 productgroup hasvariant, magento 2 pros cons schema, magento 2 energy label schema, magento 2 certifications schema, magento 2 saleevent schema, magento 2 multi region shipping, magento 2 delivery method schema, magento 2 payment method schema, magento 2 configurable product schema, magento 2 bundle product schema, magento 2 grouped product schema, hyva structured data, hyva json-ld, luma structured data, luma schema, mage2kishan structured data, panth infotech structured data, kishan savaliya magento, magento 2.4.8 structured data, magento 2 PHP 8.4 structured data, hire magento developer upwork, top rated plus magento freelancer, custom magento development, adobe commerce structured data, magento rich snippets, magento seo extension, magento schema generator

###  Health Score

46

—

FairBetter than 92% of packages

Maintenance98

Actively maintained with recent releases

Popularity11

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~2 days

Total

11

Last Release

27d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/343e344aa298f189db888b32d62f9202d31ced1a5ea23411850a63dc4a30299c?d=identicon)[kishansavaliya](/maintainers/kishansavaliya)

---

Top Contributors

[![KishanSavaliya](https://avatars.githubusercontent.com/u/16853223?v=4)](https://github.com/KishanSavaliya "KishanSavaliya (12 commits)")

---

Tags

JSON-LDseostructured-dataschema-orgmagento2magento2 modulerich resultspanth

### Embed Badge

![Health badge](/badges/mage2kishan-module-structured-data/health.svg)

```
[![Health](https://phpackages.com/badges/mage2kishan-module-structured-data/health.svg)](https://phpackages.com/packages/mage2kishan-module-structured-data)
```

###  Alternatives

[run-as-root/magento2-prometheus-exporter

Magento2 Prometheus Exporter

68353.9k](/packages/run-as-root-magento2-prometheus-exporter)[mollie/magento2

Mollie Payment Module for Magento 2

1131.8M12](/packages/mollie-magento2)[loki/magento2-components

Core module for defining Alpine.js components with advanced AJAX features

1010.0k22](/packages/loki-magento2-components)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
