{"id":362199,"date":"2026-09-01T10:24:18","date_gmt":"2026-09-01T10:24:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/aiforya-product-seo-for-woocommerce\/"},"modified":"2026-09-01T10:24:02","modified_gmt":"2026-09-01T10:24:02","slug":"aiforya-product-seo-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/aiforya-product-seo-for-woocommerce\/","author":23534313,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1","requires":"6.2","requires_php":"8.0","requires_plugins":null,"header_name":"AIFORYA Product SEO for WooCommerce","header_author":"AIFORYA","header_description":"Complete Product schema for WooCommerce, variations included - GTIN, price, stock, shipping and returns - plus canonical URLs, meta tags and image alt text. Computed locally from data WooCommerce already holds.","assets_banners_color":"2d102b","last_updated":"2026-09-01 10:24:02","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.aiforya.fr\/en\/wordpress\/extensions\/product-seo-for-woocommerce","header_author_uri":"https:\/\/www.aiforya.fr\/en","rating":0,"author_block_rating":0,"active_installs":0,"downloads":41,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"aiforya","date":"2026-09-01 10:24:02","revision":3675846}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3675842,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3675842,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3675842,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3675842,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3675842,"resolution":"1","location":"assets","locale":"","width":2880,"height":2166},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3675842,"resolution":"2","location":"assets","locale":"","width":2880,"height":2166},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3675842,"resolution":"3","location":"assets","locale":"","width":2880,"height":2418},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3675842,"resolution":"4","location":"assets","locale":"","width":2880,"height":2166},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3675842,"resolution":"5","location":"assets","locale":"","width":2880,"height":2166}},"screenshots":{"1":"Dashboard: how many product schemas are cached, and which best-sellers the sales-to-SEO bridge is boosting in internal linking.","2":"Products: what the Product schema of each product already contains, and exactly what is missing from it \u2014 image, brand, GTIN, variants, reviews.","3":"Settings: each SEO feature is switched on or off independently \u2014 schema, meta tags, canonical URLs, heading hygiene, image alt text and the bridge.","4":"Diagnostics: what the plugin detects on the store, including whether Yoast or Rank Math is active and which tags it is leaving to them.","5":"Documentation: what each feature does and what it writes, read from inside the plugin."}},"plugin_section":[],"plugin_tags":[148700,245147,186,1121,286],"plugin_category":[45,55],"plugin_contributors":[275016],"plugin_business_model":[],"class_list":["post-362199","plugin","type-plugin","status-publish","hentry","plugin_tags-gtin","plugin_tags-product-schema","plugin_tags-seo","plugin_tags-structured-data","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-seo-and-marketing","plugin_contributors-aiforya","plugin_committers-aiforya"],"banners":{"banner":"https:\/\/ps.w.org\/aiforya-product-seo-for-woocommerce\/assets\/banner-772x250.png?rev=3675842","banner_2x":"https:\/\/ps.w.org\/aiforya-product-seo-for-woocommerce\/assets\/banner-1544x500.png?rev=3675842","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/aiforya-product-seo-for-woocommerce\/assets\/icon-128x128.png?rev=3675842","icon_2x":"https:\/\/ps.w.org\/aiforya-product-seo-for-woocommerce\/assets\/icon-256x256.png?rev=3675842","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/aiforya-product-seo-for-woocommerce\/assets\/screenshot-1.png?rev=3675842","caption":"Dashboard: how many product schemas are cached, and which best-sellers the sales-to-SEO bridge is boosting in internal linking."},{"src":"https:\/\/ps.w.org\/aiforya-product-seo-for-woocommerce\/assets\/screenshot-2.png?rev=3675842","caption":"Products: what the Product schema of each product already contains, and exactly what is missing from it \u2014 image, brand, GTIN, variants, reviews."},{"src":"https:\/\/ps.w.org\/aiforya-product-seo-for-woocommerce\/assets\/screenshot-3.png?rev=3675842","caption":"Settings: each SEO feature is switched on or off independently \u2014 schema, meta tags, canonical URLs, heading hygiene, image alt text and the bridge."},{"src":"https:\/\/ps.w.org\/aiforya-product-seo-for-woocommerce\/assets\/screenshot-4.png?rev=3675842","caption":"Diagnostics: what the plugin detects on the store, including whether Yoast or Rank Math is active and which tags it is leaving to them."},{"src":"https:\/\/ps.w.org\/aiforya-product-seo-for-woocommerce\/assets\/screenshot-5.png?rev=3675842","caption":"Documentation: what each feature does and what it writes, read from inside the plugin."}],"raw_content":"<!--section=description-->\n<p><strong>AIFORYA Product SEO for WooCommerce<\/strong> builds the structured data and the technical SEO of your product pages. <strong>No AI, no API key, no external service<\/strong>: everything is computed locally from data WooCommerce already holds.<\/p>\n\n<h4>What this plugin covers<\/h4>\n\n<p>Product structured data, canonical URLs, meta tags and image alt text, in one plugin. Three points worth knowing before you install it:<\/p>\n\n<ol>\n<li><strong>Variable products are described as variable products.<\/strong> A WooCommerce product with sizes or colours is emitted as a <code>ProductGroup<\/code> with one entry per variation \u2014 each with <strong>its own price, its own stock status and its own GTIN<\/strong>, so a search engine receives one offer per variant rather than a single price for the whole product.<\/li>\n<li><strong>The native WooCommerce GTIN field is read first.<\/strong> Since WooCommerce 9.2 a product carries a built-in <em>GTIN, UPC, EAN, or ISBN<\/em> field. This plugin reads that field first and keeps the older custom fields as a fallback. The code is emitted as <code>gtin8<\/code>, <code>gtin12<\/code>, <code>gtin13<\/code> or <code>gtin14<\/code> according to its length, which is what search engines document.<\/li>\n<li><strong>Shipping cost and return window are included.<\/strong> Shipping is read from your existing WooCommerce shipping zones \u2014 nothing to re-enter. Both <code>shippingDetails<\/code> and <code>hasMerchantReturnPolicy<\/code> are recommended properties for product rich results.<\/li>\n<\/ol>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li><strong>Complete Product schema<\/strong> \u2014 price, currency, availability, brand, GTIN, MPN, ratings and reviews, kept in step with your stock.<\/li>\n<li><strong>Variations, properly<\/strong> \u2014 <code>ProductGroup<\/code> with one variant per WooCommerce variation, each with its own price, stock and identifier. Beyond 30 variations it falls back to a price range, which stays valid rather than making the page heavy.<\/li>\n<li><strong>Shipping and returns in the schema<\/strong> \u2014 shipping cost derived from your WooCommerce shipping zones; return window declared only if you set one.<\/li>\n<li><strong>Image alt text<\/strong> \u2014 main image, gallery and variation images. Only images that belong to a product are touched, and <strong>an alt text you wrote yourself is never overwritten<\/strong>.<\/li>\n<li><strong>Canonical URLs for facets and pagination<\/strong> \u2014 a filtered or paginated listing no longer competes with the page it came from.<\/li>\n<li><strong>Title, meta description and Open Graph tags<\/strong> \u2014 computed from the product's own name and brand, trimmed on a word boundary.<\/li>\n<li><strong>Heading structure<\/strong> \u2014 one <code>h1<\/code> per product page and a coherent hierarchy below it.<\/li>\n<li><strong>Sales-to-SEO bridge<\/strong> \u2014 your best-converting products are prioritised in the internal linking, so your visibility follows your sales.<\/li>\n<li><strong>You can see what it did<\/strong> \u2014 the Products tab lists, product by product, what the schema contains and what is missing from it. No guessing whether the plugin is working.<\/li>\n<li><strong>Nothing at render time<\/strong> \u2014 no external call while a page is displayed.<\/li>\n<li><strong>Compatible with Yoast and Rank Math<\/strong> \u2014 if a general-purpose SEO plugin is active, this extension leaves the title\/meta tags to it and keeps its own strengths: complete Product schema, image alt text and internal linking.<\/li>\n<li><strong>Compatible with WooCommerce<\/strong> and <strong>WordPress 6.2+<\/strong> (tested up to 7.1), including HPOS.<\/li>\n<\/ul>\n\n<h4>The tabs<\/h4>\n\n<p><strong>Dashboard<\/strong> \u2014 Best-sellers pushed into the internal linking, at a glance.<\/p>\n\n<p><strong>Products<\/strong> \u2014 Per-product view of what the Product schema contains and what it is missing.<\/p>\n\n<p><strong>Diagnostics<\/strong> \u2014 Extension status and details of the sales-to-SEO bridge, to check that everything is working.<\/p>\n\n<p><strong>Settings<\/strong> \u2014 Activation of features (schema, tags, canonical, title hygiene, image alt text, internal linking), return window and advanced options.<\/p>\n\n<p><strong>Documentation<\/strong> \u2014 Quick-start guide and key points to know.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>This extension stores no personal data about your customers and sends nothing to any third party. Everything it computes is derived from data WooCommerce already holds on your own site. Its data can be entirely deleted on uninstall.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This extension does not connect to any external service. All SEO features \u2014 Product schema, canonical URLs, meta tags, image alt text, heading structure and internal linking \u2014 are computed locally on your site, with no API key and no outbound request.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate WooCommerce.<\/li>\n<li>Install and activate AIFORYA Product SEO for WooCommerce.<\/li>\n<li>The Product schema, the canonical URLs, the title\/meta tags, the image alt text and the heading hygiene apply automatically from activation. There is nothing to configure to get started.<\/li>\n<li>Optionally, set your return window in Settings so it is declared in the schema.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20need%20an%20api%20key%3F\"><h3>Does it need an API key?<\/h3><\/dt>\n<dd><p>No. This version has no AI feature and makes no external call.<\/p><\/dd>\n<dt id=\"i%20already%20fill%20in%20the%20gtin%20field%20that%20came%20with%20woocommerce.%20will%20it%20be%20used%3F\"><h3>I already fill in the GTIN field that came with WooCommerce. Will it be used?<\/h3><\/dt>\n<dd><p>Yes, and it is read before any other source. If you also have an older plugin storing an EAN in its own custom field, that field is used as a fallback when the native one is empty.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20variable%20products%3F\"><h3>Does it work with variable products?<\/h3><\/dt>\n<dd><p>Yes. Each variation is emitted with its own price, its own stock status and its own GTIN, inside a <code>ProductGroup<\/code>. Above 30 variations the schema falls back to a price range so the page stays light.<\/p><\/dd>\n<dt id=\"will%20it%20overwrite%20the%20alt%20text%20i%20wrote%20on%20my%20images%3F\"><h3>Will it overwrite the alt text I wrote on my images?<\/h3><\/dt>\n<dd><p>No. An alt attribute that already has a value is left exactly as it is. Only empty ones are filled, and only on images belonging to a product.<\/p><\/dd>\n<dt id=\"nothing%20is%20written%20to%20my%20database%20for%20the%20alt%20text%3F\"><h3>Nothing is written to my database for the alt text?<\/h3><\/dt>\n<dd><p>Correct. The attribute is added when the image is rendered. Deactivate the plugin and your media library is exactly as it was.<\/p><\/dd>\n<dt id=\"will%20it%20conflict%20with%20yoast%20seo%20or%20rank%20math%3F\"><h3>Will it conflict with Yoast SEO or Rank Math?<\/h3><\/dt>\n<dd><p>No. If one of them is active, this extension detects it and leaves the title and meta tags to it, while keeping its own Product schema, image alt text and internal linking.<\/p><\/dd>\n<dt id=\"how%20do%20i%20know%20it%20is%20actually%20doing%20something%3F\"><h3>How do I know it is actually doing something?<\/h3><\/dt>\n<dd><p>Open the Products tab: it lists each product with what its schema already contains and what is missing. For image alt text, an attribute added by this plugin carries <code>data-aiforya-alt=\"1\"<\/code>, visible in your browser's inspector.<\/p><\/dd>\n<dt id=\"does%20it%20slow%20the%20store%20down%3F\"><h3>Does it slow the store down?<\/h3><\/dt>\n<dd><p>No external request is made while a page is being displayed. The front end reads what has already been computed.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Added the <code>Requires Plugins: woocommerce<\/code> header, so WordPress checks for WooCommerce before activation.<\/li>\n<li>Rewrote the description: it now states what the plugin does, in factual terms only.<\/li>\n<li>Links now point to the English pages of the site.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: complete Product schema (price, availability, brand, GTIN, MPN, ratings), with variable products emitted as a ProductGroup carrying per-variation price, stock and GTIN.<\/li>\n<li>Native WooCommerce GTIN field (<code>global_unique_id<\/code>) read first, with legacy custom fields as fallback; code emitted as gtin8\/gtin12\/gtin13\/gtin14 by length.<\/li>\n<li>Shipping cost derived from WooCommerce shipping zones, and an optional return window, both added to the schema.<\/li>\n<li>Image alt text on main, gallery and variation images, without ever overwriting an existing value and without writing to the database.<\/li>\n<li>Canonical URLs for facets and pagination, title\/meta\/Open Graph tags, heading structure, sales-to-SEO bridge. Compatible with Yoast\/Rank Math and HPOS.<\/li>\n<\/ul>","raw_excerpt":"Complete Product schema for WooCommerce, variations included \u2014 GTIN, price, stock, shipping and returns \u2014 plus canonical URLs and image alt text.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/362199","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=362199"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/aiforya"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=362199"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=362199"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=362199"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=362199"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=362199"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=362199"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}