- Fixed: Themes that add their own content to the buy area of the product page (e.g. the product name above the price) lost it as soon as the product schema was active. Content from themes and other extensions now stays, only the microdata itself is removed. The same applies to individual reviews.
- Fixed: For graduated prices the schema stated the default price instead of the visible tier prices. It now outputs an AggregateOffer with the lowest and highest tier price. The product feed (/feeds/products.json) states the price for a single unit.
- Improved: internal code cleanups for stricter static analysis – no functional changes.
Neu
- Versandkosten nach Bestellwert: Die Tabelle „Versandkosten je Land“ hat zwei optionale Spalten: „Reduziert ab Bestellwert“ und „Reduzierte Versandkosten“. Erreicht der Produktpreis die Grenze, nennt das Schema den reduzierten Betrag (0 bedeutet kostenloser Versand), sonst weiterhin den Höchstbetrag. Bei Produkten mit Varianten zählt der günstigste Preis. Zeilen ohne diese Angaben verhalten sich unverändert.
- KI-Nutzungssignal in der robots.txt: Drei neue Auswahlfelder in der Karte „Robots“ (Suche, KI-Antworten, KI-Training) geben die Zeile „Content-Signal“ in der robots.txt aus. Der Standard ist „Keine Angabe“, dann bleibt die robots.txt unverändert. Das Signal ist eine Absichtserklärung und keine technische Sperre. Es wirkt ab Shopware 6.7.1, weil Shopware 6.6 die robots.txt nicht selbst erzeugt.
- Preisgültigkeit steuerbar: „Preisgültigkeit (Tage)“ mit dem Wert 0 lässt das Feld priceValidUntil komplett weg. Bisher wurde 0 stillschweigend auf 30 Tage gesetzt. Der neue Schalter „Preis gültig ab: ohne Erscheinungsdatum heutiges Datum verwenden“ entscheidet, ob validFrom bei Produkten ohne Erscheinungsdatum das heutige Datum erhält (Standard: an, wie bisher).
- Shopwares eigene llms.txt (ab Shopware 6.7.15): Ist die llms.txt von Shopware für einen Verkaufskanal aktiviert, zum Beispiel durch die Erweiterung „Agentic Commerce“, liefert das Plugin diese Datei aus und ergänzt sie um Kurzbeschreibung, Sortiment, Kontaktdaten und den Link auf die llms-full.txt.
Verbessert
- Konfiguration neu sortiert: Oben stehen die Angaben, die Shop-Betreiber selbst pflegen (Organisation, Produkt, Versanddetails, Rückgabe-Bedingungen, KI/LLM-Dateien), in der Mitte die einfachen Schalter, unten die technischen Einstellungen. Feldnamen und gespeicherte Werte bleiben unverändert, nach dem Update muss nichts neu eingestellt werden.
- Verständlichere Hilfetexte: Neu formuliert wurden die Texte zur Preisgültigkeit (Google empfiehlt das Feld, verlangt es aber nicht), zu den Social- und Bewertungsprofilen (zum Beispiel auch Trusted Shops) und zu hreflang. Dort steht jetzt, wann das Feld „Verkaufskanäle, die Sprachversionen desselben Shops sind“ gebraucht wird und dass der aktuelle Verkaufskanal mit ausgewählt sein muss. Die Spalte „Höchstbetrag“ heißt jetzt „Versandkosten (Höchstbetrag)“.
Behoben
- Der Produkt-Feed /feeds/products.json lieferte einen Fehler 500, wenn bei einem Produkt ohne Meta-Beschreibung ein Umlaut oder ein anderes Mehrbyte-Zeichen genau an der Kürzungsstelle der Beschreibung stand. Ein einzelnes Produkt reichte, um den ganzen Feed zu blockieren. Die Beschreibung wird jetzt zeichenweise gekürzt, ungültige Zeichen führen nicht mehr zu einem Fehler.
- Ist in Shopware 6.7.9 oder neuer das eigene JSON-LD von Shopware aktiv (ab Shopware 6.8 der Standard), erschienen Product, BreadcrumbList, Organization, WebSite, WebPage und auf Kategorieseiten die ItemList doppelt. Das Plugin unterdrückt jetzt die Shopware-Variante für jeden Typ, den es selbst ausgibt. Ist ein Schema im Plugin ausgeschaltet, bleibt die Shopware-Variante erhalten.
- Die Seitennavigation von Kategorien verlinkte „Seite 1“ und „Zurück“ (wenn es auf Seite 1 führt) auf „?p=1“, eine doppelte URL. Diese Links zeigen jetzt auf die normale Kategorie-URL. Gesteuert wird das über den bestehenden Schalter „Selbstreferenzierendes Canonical für paginierte Listings“.
- Im Erlebniswelten-Editor zeigte das FAQ-Element bei jedem neu angelegten Eintrag den Hinweis „Dieser Editor enthält benutzerdefinierten Code, der im visuellen Modus nicht vollständig unterstützt wird“ (Shopware 6.7). Der Hinweis erscheint nicht mehr.
- Die llms.txt lieferte einen Fehler 404, obwohl sie in Shopware für den Verkaufskanal aktiviert war, sobald die llms.txt des Plugins ausgeschaltet oder leer war. In diesem Fall wird jetzt Shopwares eigene Datei ausgeliefert.
- New: A global switch "Never mark any product as a purchasable offer" (card "Product Schema") can treat every product as if the existing per-product switch "Do not mark up as a purchasable offer" were set — without maintaining it on each product individually. Intended for shops that never show a buyable price in the storefront at all (e.g. B2B-only, net pricing). Depending on the existing "Products marked 'do not mark up as a purchasable offer'" setting, this either just omits the price or suppresses the whole product schema. The per-product switch keeps working alongside it: turning the global switch back off falls back to whatever each product has set individually. Applies consistently to both the product schema (JSON-LD) and the /feeds/products.json feed.
- Geändert: hreflang verknüpft standardmäßig nur noch die Sprach-Domains des eigenen Verkaufskanals. Kanalübergreifende Verknüpfung ist über die neue Einstellung „Verknüpfte Verkaufskanäle“ wählbar. Shops mit Sprachen als getrennten Verkaufskanälen müssen diese nach dem Update einmal auswählen.
- Behoben: hreflang verweist nur noch auf Kanäle, in denen Produkt bzw. Kategorie tatsächlich sichtbar ist – keine 404-Verweise mehr durch veraltete SEO-URLs.
- Behoben: Pro Sprache wird nur noch eine hreflang-URL ausgegeben.
Fixed: on paginated category listings, the canonical, the WebPage schema URL and `rel="prev"`/`rel="next"` could contain a doubled page parameter (`?p=7?p=8`) when the base canonical already carried `?p=`. Crawlers following these links triggered HTTP 400 errors. Any existing query string is now removed from the base URL before the page parameter is appended.
Fixed: on page 2, `rel="prev"` pointed to the wrong address when the base canonical already contained a page parameter. It now always points to the plain category URL.
Version 2.5.5
- New: Shipping costs by country — a table with one row per destination country replaces the previous "Default Shipping Cost" and "Shipping Destination Country" fields. Each country gets its own maximum price (ideal for rates staggered by weight or order value) and its own transit time.
- Fixed: With several countries entered in the old field, the plugin produced an invalid shipping/return schema — visible as Google Search Console's "Invalid string length in field 'name'" error on the return policy. Every country is now output as its own, correct entry.
- Fixed: Stray whitespace in the Organization card's contact fields (phone, email, address) is now stripped automatically before it reaches the structured data.
Version 2.5.4
Ready for Google's new PageSpeed category "Agentic Browsing"
Since May 2026, Chrome Lighthouse has had its own category for how accessible a website is to AI agents — including whether the llms.txt follows the recommendations. That check requires real Markdown links; a file containing plain text addresses is reported as "does not contain any links". The llms.txt this plugin generates now fully complies with the llmstxt.org specification and passes the check:
- Every reference the plugin generates is a Markdown link — website, social media profiles and the references to llms-full.txt, products.json and faq.md
- Email and phone are emitted as mailto: and tel: links, the postal address as a map link — the human-readable value stays alongside each of them
- The free-text "Product range & highlights" field now sits in the section intended for it, without a heading, since it is allowed to contain prose
A clean structure without a duplicate page entity
Shopware marks up the element itself as a WebPage on every page — independently of this plugin, and invisible when only checking the JSON-LD. Analysis tools counted two WebPage entities per page as a result, one complete and one incomplete. That native markup is now removed together with the plugin's own WebPage schema. Values Shopware used to attach to it end up in a typeless, ignored element instead of on a typed entity.
Fewer 404 reports in Search Console
Shops running several sales channels could previously pull a headless or API channel into the hreflang calculation. Its "domain" is not a browsable address — often just a placeholder with no protocol or host. Search engines assembled invalid URLs from it and reported them as 404s on every product and category page. Headless and API channels are now left out of hreflang generation.
A more complete LocalBusiness schema
With the local business markup enabled, the image property Google expects is now emitted alongside logo.
- Improved: structured data on product pages now stays clean across the latest Shopware 6.7 releases, incomplete Product element in the page source (showing up, among other things, as a Google Search Console notice about missing offers/review/aggregateRating) no longer occurs.
- Added: landing pages are now fully supported – including FAQ schema, speakable markup, canonical link and robots directive, just like product and category pages.
- Improved: multiple FAQ sections on the same page are now combined into one clean, correct FAQPage structure instead of being output several times.
- Added: the llms.txt and llms-full.txt text fields can now be maintained per language – a bilingual shop can keep separate content for each language. Existing text is carried over automatically into every language as a starting point when updating.
- Improved: better compatibility with other plugins and themes.
- Fixed: the delivery time in the schema for weeks fixed
Version 2.5.1
- More precise review counts in the product snippet – now shows the exact number of reviews available
- Improved breadcrumbs: structure categories are now integrated cleanly and correctly
- More stability on category pages: breadcrumbs, modification date, and noindex/nofollow control now run reliably across all supported Shopware versions
- Better multi-language support: a category's noindex/nofollow setting now also applies reliably in secondary languages
Shopware 6.6 compatibility
- One codebase for Shopware 6.6 and 6.7
New WebPage schema with a freshness signal, corrected addresses in structured data and safer default values.
- Added: WebPage schema with dateModified. Publishes the modification date of a product, category or landing page – AI systems weigh freshness more heavily than classic search engines. Two switches in the new „WebPage Schema“ card, enabled by default.
- Fixed: the WebPage and breadcrumb schema carried the internal /navigation/… address instead of the canonical URL, contradicting the canonical link on the same page. Structure categories are no longer linked – their address answered 404.
- Fixed: a failed update could leave the plugin deactivated. Updates now only log a problem.
- Fixed: bullet lists in FAQ answers lost their structure. Lists now stay recognisable in the FAQPage schema and in /feeds/faq.md.
- Changed: „Shipping Details“ and „Return Policy“ are off by default. With the previous default values a freshly installed shop promised free shipping and free returns. Existing installations keep their setting – anyone who never touched these cards should check both values once.
- Security: every JSON-LD block now escapes angle brackets.
Improved reliability when creating the plugin's custom fields.
- Shops set up before version 2.2.0 receive all custom fields automatically with this update – including the HowTo field set and the product switch „Do not mark up as a purchasable offer“. No manual steps required.
- Each field set is created independently of the others.
New options for items that are not purchasable plus fixes for hreflang, availability and the feeds.
Added
- Product switch „Do not mark up as a purchasable offer“ for items that cannot be ordered at the price shown – price on request, catalogue-only items, discontinued articles. The product schema is then published without price and availability, or omitted entirely. Indexing of the page is not affected.
- The product feed marks those items and reports via total, limit and truncated whether it is complete.
- All text generated by the plugin is available in German and English.
Fixed
- Availability now matches the stock situation – InStock, BackOrder, OutOfStock or PreOrder – instead of always InStock.
- hreflang: home page, search and CMS pages keep the tags generated by Shopware. x-default follows the default domain configured on the sales channel.
- llms.txt, llms-full.txt and the feed links also work on installations below the domain root.
- FAQ feed: only content of the requested sales channel, in a stable order and without duplicates.
- Products without an image of their own no longer use the shop logo as the product image.
- Category pages: broken pagination links removed
- FAQ element in Shopping Experiences: missing labels
- New: Offers now include the validFrom field – fixes Google's "Missing field validFrom (in offers)" warning.
- New: Price validity (priceValidUntil) is now configurable in the settings (default: 30 days).
- Fixed: Duplicate/orphaned structured data in reviews and the buy box is removed while the product schema is active – fixes the critical Google error "Invalid object type for field " for review snippets.
New structured data (JSON-LD)
- Organization schema on every page: contact details, address, social profiles, optionally as LocalBusiness with opening hours, certifications and team
- Breadcrumb schema for product and category pages
- ItemList schema for category listing pages
- Speakable schema (automatic for FAQ content, optionally configurable for other areas)
- Product schema extended with additional properties (additionalProperty), shipping details and return policy
- FAQPage schema for the new FAQ element
- HowTo schema for landing pages (step-by-step guides)
New FAQ element
- New CMS element "FAQ (Question & Answer)" with accordion display
- Fully configurable: icon style, font size, border color, auto-open, single or multi accordion mode, optional numbering, tracking event on open
Crawling & indexing
- Canonical and pagination handling for paginated category pages (rel="next"/"prev", self-referencing canonical)
- Automatic hreflang for multi-language shops
AI/LLM visibility (new)
- llms.txt and llms-full.txt following the emerging AI standard, with contact details filled in automatically
- Machine-readable feeds: /feeds/products.json (all active products) and /feeds/faq.md (all FAQ content), generated live, no manual upkeep needed
Other
- Configuration screen restructured into topic-based cards
- Short explanatory boxes at the top of each configuration card for a better overview
- Extended shipping details: Handling time (min/max business days) is now emitted as handlingTime alongside transit time — recommended by Google.
- Return policy (MerchantReturnPolicy): Configurable return window, return method (mail/in-store) and return fees (free/customer pays/return shipping fees) added to the product schema.
- Expanded organization data: Phone, contact email, postal address (street, ZIP, city, region, country) and social profiles (sameAs) added to the Organization schema.
- Richer product schema: Category, canonical ID as well as physical dimensions and weight (weight, height, width, depth) are now included.
- Duplicate microdata removed: Shopware's native Product microdata on the detail page is suppressed when the plugin is active — no more duplicate Product entity in Google's Rich Results Test.
- Improved breadcrumb schema: Switched to plainBreadcrumb for more reliable category paths without the root navigation.
Improved processing of plugin configuration values for schema output
- Hreflang tags are now only generated when "Enable Hreflang" is active in the sales channel configuration
- Fixed hreflang parameter name (hrefLang instead of hreflang) to match Shopware core conventions
- Performance: Reduced SEO URL queries for hreflang generation from N individual queries to a single bulk query
- Variant support: Products with variants now output an AggregateOffer schema – Google can display the price range (e.g. "From €29.99")
- Shipping details: Shipping cost, destination and delivery time are now included in the offer schema (OfferShippingDetails)
- Delivery time: Automatically pulled from Shopware product data (days, weeks, months)
- New settings: Enable shipping details, default shipping cost, shipping destination country (ISO code)
- New: ItemList schema (JSON-LD) on category listing pages — each product is listed as a ListItem with position, URL, name and image
- New: WebSite schema with SearchAction on all pages (enables Sitelinks Searchbox in Google)
- New: Configuration option to enable/disable the ItemList schema
- Improved: More reliable detection of category pages
- Improved: Product URL is now included directly in the Product schema
Compatibility with Shopware 6.7 plus improved data enrichment
- Shipping details with shipping rate, handling time and transit time
- Return policy with configurable return window, return method and return fees
- Hreflang now also on product pages – plus performance boost via bulk-loaded SEO URLs
- Microdata cleanup: removes Shopware's native Product wrapper and prevents duplicate or broken schema detection
- New configuration sections for shipping, returns and organization data (address, contact, social profiles)
Integration of SEO-friendly pagination
Integration of hreflang for different language shops
Adjusting texts in the configuration
our first store version - testet on 6.5 and 6.6