KOSTENLOSES TOOL · PRODUCT SCHEMA GENERATOR

Product Schema Generator: strukturierte Daten für Produkte

Beschreib ein Produkt und erhalte Product- und Offer-JSON-LD, das die Regeln für Händlereinträge schon beim Tippen prüft — Preis über null, Währung vorhanden, kein abgelaufenes Preisdatum —, dazu den sichtbaren Produktblock mit denselben Werten. Mit den Stellen, an denen deutsches Preisrecht ins Markup greift: Bruttopreis, Grundpreis, Streichpreis.

KostenlosSofortOhne AnmeldungNichts wird hochgeladen

Auch aufEnglish繁體中文日本語한국어EspañolFrançaisDeutschPortuguês (Brasil)

Product + Offer · Generator
Das Produkt

Pflicht. Google empfiehlt dasselbe Motiv in mehreren Seitenverhältnissen: 1:1, 4:3 und 16:9.

Höchstens ein Markenname.

Die Ziffern unter dem Strichcode: 8, 12, 13 oder 14. Die 13-stellige EAN ist eine GTIN. Die URL-Form unterstützt Google nicht.

Das Angebot

Ziffern und ein Punkt: 49.90 — nicht 49,90 und nicht 49,90 €. Das ist die schema.org-Regel; auf der Seite schreibst du weiter „49,90 €“.

JJJJ-MM-TT. Ein Datum in der Vergangenheit kann dazu führen, dass der Eintrag gar nicht erscheint.

Versand und Rückgabe (optional)

Die URL des Knotens, den du unter Organization ausgezeichnet hast. Google zieht das einer Kopie in jedem Offer vor.

Gesamtbewertung (optional)

Nur Bewertungen, die dein Shop selbst von Käufern gesammelt hat — nie den Schnitt eines Marktplatzes. Punkt statt Komma: 4.7.

Leer lassen heißt: Google nimmt eine Fünferskala an.

Fehler und Warnungen
    JSON-LD — in die Produktseite einfügen
    
                
    Sichtbares HTML — dieselben Werte auf der Seite
    
                

    Alles läuft auf dieser Seite. Kein Produktname, kein Preis und keine Bild-URL verlässt deinen Browser.

    Quellen: Google Search Central — Strukturierte Daten für Händlereinträge (Product, Offer); Google Merchant Center — Preis [price] und Mengeneinheit für Grundpreis; Preisangabenverordnung — § 2, § 4, § 5, § 6 und § 11 PAngV; EuGH, Rechtssache C-330/23 (Aldi Süd), Urteil vom 26. September 2024; GS1 Germany — EAN-Nummern (GTIN); schema.org/price. Stand: September 2026.

    So erstellst du strukturierte Produktdaten

    Drei Pflichtangaben am Produkt, zwei am Angebot und eine Handvoll Regeln, die entscheiden, ob der Eintrag überhaupt erscheint. Der Generator prüft jede davon beim Tippen und schreibt den sichtbaren Block aus denselben Werten.

    1. Produkt benennen, Bilder hinzufügen. name und image sind für Händlereinträge Pflicht. Mehrere Seitenverhältnisse desselben Fotos sind besser als eines, und jede URL muss crawlbar und indexierbar sein.
    2. Das Angebot ausfüllen — brutto. Ein Preis über null, mit Punkt geschrieben, und der Währungscode EUR. Für Verbraucher in Deutschland ist das der Gesamtpreis inklusive Umsatzsteuer, derselbe Betrag, der auf der Seite steht.
    3. Verfügbarkeit und Preisdatum setzen. availability und itemCondition kommen als Kurznamen heraus, die Google unterstützt. Lass priceValidUntil lieber leer, als ein abgelaufenes Datum darin stehen zu lassen.
    4. Auf Richtlinien verweisen statt sie zu kopieren. Versand und Rückgabe einmal unter Organization auszeichnen und hier per @id referenzieren. Google empfiehlt die globale Richtlinie statt einer Kopie in jedem Angebot.
    5. Beide Ausgaben einfügen — und den Grundpreis ergänzen, wo er Pflicht ist. Das JSON-LD kommt in die Produktseite, der Block trägt dieselben Werte mit deutschen Beschriftungen. Verkaufst du nach Gewicht, Volumen, Länge oder Fläche, baust du den Grundpreis nach dem Muster weiter unten ein.

    Drei Pflichtangaben am Produkt, zwei am Angebot

    Ein Product-Schema-Generator macht aus Produktangaben strukturierte Daten vom Typ Product und Offer — das JSON-LD, aus dem Google Preis, Verfügbarkeit und Produktkennungen liest und mit dem eine Seite für Händlereinträge und Produkt-Snippets infrage kommt. Die Pflichtliste ist kurz, und das meiste, was andere Formulare verlangen, steht nicht darauf.

    EbenePflichtWas ohne sie passiert
    Productname, image, offersKein Händlereintrag. offers muss ein Offer sein — ein AggregateOffer akzeptiert Google nur für Produkt-Snippets, weil ein Händlereintrag voraussetzt, dass du der Verkäufer bist.
    Offerprice (oder priceSpecification.price), priceCurrencyNichts zu listen. priceCurrency ist Pflicht, sobald ein Preis dasteht, und für Händlereinträge muss der Preis über null liegen.

    Alles andere — brand, sku, gtin, description, availability, itemCondition, priceValidUntil, aggregateRating — ist empfohlen. Empfohlen heißt nicht Dekoration: Die Beschreibung nennt Google „dringend empfohlen“, und eine Kennung ist das, womit dein Angebot demselben Produkt anderswo zugeordnet wird. Zwei Sätze aus Googles Richtlinien sparen Stunden Fehlersuche: Nur Seiten, auf denen man das Produkt kaufen kann, kommen für Händlereinträge infrage. Und wer in mehreren Währungen verkauft — Euro für Deutschland, Franken für die Schweiz —, braucht pro Währung eine eigene URL. Einen Feed im Merchant Center ersetzt das Markup nicht: Mit beidem, schreibt Google, kommst du am ehesten für die Ergebnistypen infrage.

    Der Preis im deutschen Shop: brutto, mit Punkt, über null

    Am Preis treffen drei Regelwerke aufeinander — Preisangabenverordnung, Google und schema.org —, und in Deutschland zeigen alle drei in dieselbe Richtung.

    • Der Preis ist der Gesamtpreis. Wer Verbrauchern Waren anbietet, muss nach § 3 PAngV Gesamtpreise angeben, und § 2 PAngV definiert den Gesamtpreis als den Preis einschließlich der Umsatzsteuer und sonstiger Preisbestandteile. Das Merchant Center verlangt für Deutschland ebenfalls den Preis inklusive Mehrwertsteuer — und dass er mit dem Preis auf der Landingpage übereinstimmt. Das Markup beschreibt, was die Seite zeigt: price ist der Bruttopreis, nicht der Nettowert aus deiner Warenwirtschaft.
    • Versand gehört nicht hinein. Im Fernabsatz verlangt § 6 PAngV den Hinweis, dass die Preise die Umsatzsteuer enthalten und ob Liefer- oder Versandkosten hinzukommen — das „inkl. MwSt., zzgl. Versand“ neben dem Preis. Das Merchant Center sagt ausdrücklich: Versandkosten nicht in den Preis einrechnen. Versand beschreiben die Versandbedingungen, nicht price.
    • Die Seite schreibt 49,90 €, das Markup 49.90. schema.org verlangt einen Punkt als Dezimalzeichen, keine Tausendertrennzeichen und die Währung in priceCurrency statt eines Symbols im Wert. Die deutsche Schreibweise ist genau die Umkehrung davon. Der Generator lehnt 49,90 und 1.299,00 € ab — aber 1.299 ist für ihn eine gültige Zahl, nämlich eins Komma zwei neun neun. Einen Tausenderpunkt kann kein Prüfer von einem Dezimalpunkt unterscheiden; schreib 1299.00.
    • Null ist kein Preis, und ein altes Datum ist schlimmer als keins. Anders als Produkt-Snippets verlangen Händlereinträge einen Preis über null — ein „Preis auf Anfrage“ als 0 disqualifiziert das Angebot. Und Google schreibt: Dein Eintrag wird möglicherweise nicht angezeigt, wenn priceValidUntil in der Vergangenheit liegt. Der Generator vergleicht das Datum mit heute und macht daraus einen Fehler.

    Der sichtbare Block hat deutsche Beschriftungen, übernimmt die Werte aber so, wie sie im Markup stehen — 49.90, EUR, InStock. Auf der Produktseite formatierst du sie deutsch; schema.org sieht genau das vor, maschinenlesbarer Wert neben menschenfreundlicher Schreibweise. Nur der Wert selbst darf sich nicht unterscheiden.

    Grundpreis: Pflicht nach PAngV, im Markup eine UnitPriceSpecification

    Wer Waren nach Gewicht, Volumen, Länge oder Fläche verkauft — Kaffee, Öl, Stoff, Bodenbelag —, muss neben dem Gesamtpreis den Grundpreis angeben (§ 4 PAngV), und zwar je 1 Kilogramm, 1 Liter, 1 Kubikmeter, 1 Meter oder 1 Quadratmeter; nur bei loser Ware sind auch 100 Gramm oder 100 Milliliter zulässig (§ 5 PAngV). Nur wenn der Grundpreis mit dem Gesamtpreis identisch ist — die Kilotüte zum Kilopreis —, darf er entfallen.

    Google hat für genau diesen Fall ein Muster, und die deutsche Doku nennt es beim Namen: Preise mit Mengeneinheit für den Grundpreis, laut Google in der EU besonders wichtig für Produkte, die nach Volumen, Länge oder Gewicht verkauft werden. Im Merchant-Center-Feed ist die Mengeneinheit für solche Produkte in der EU sogar Pflicht. Für eine 500-Gramm-Packung Kaffee zu 12,90 € (Grundpreis 25,80 € je Kilogramm) sieht der Offer-Knoten so aus:

    "offers": {
            "@type": "Offer",
            "priceSpecification": {
              "@type": "UnitPriceSpecification",
              "price": "12.90",
              "priceCurrency": "EUR",
              "referenceQuantity": {
                "@type": "QuantitativeValue",
                "value": "0.5",
                "unitCode": "kg",
                "valueReference": {
                  "@type": "QuantitativeValue",
                  "value": "1",
                  "unitCode": "kg"
                }
              }
            }
          }

    Zwei Details machen den Unterschied. Erstens steht der aktive Preis in der UnitPriceSpecification und nicht zusätzlich in offers.price: Google schreibt, dass es bei doppelt codiertem aktivem Preis offers.price verwendet und offers.priceSpecification ignoriert — samt Mengenangabe. Dieser Generator schreibt offers.price; für Grundpreis-Ware ersetzt du dessen price und priceCurrency durch den Block oben. Zweitens akzeptiert unitCode laut Google UN/CEFACT-Codes oder die Einheiten aus der Merchant-Center-Hilfe (g, kg, ml, l, m, sqm …), und das Merchant Center empfiehlt, für Menge und Bezugsgröße dieselbe Einheit zu verwenden — deshalb 0.5 kg statt 500 g.

    Googles eigenes Beispiel ist übrigens ein Parfüm mit Preis je 100 ml. In Deutschland wäre das doppelt ungewöhnlich: § 5 PAngV setzt für abgepackte Ware 1 Liter an, und Parfüms mit mindestens 3 Volumenprozent Duftöl und 70 Volumenprozent Ethylalkohol sind nach § 4 Abs. 3 PAngV von der Grundpreispflicht ganz ausgenommen.

    Streichpreise: StrikethroughPrice trifft auf § 11 PAngV

    Bei einem Sonderangebot bleibt der aktive Preis in price, und der ursprüngliche kommt als zweite Preisangabe dazu — eine UnitPriceSpecification mit priceType StrikethroughPrice. Den aktiven Preis markierst du nicht mit priceType, und eine Preisangabe, die priceType und validForMemberTier zugleich trägt, ignoriert Google. Der Generator schreibt den aktiven Preis; den Streichpreis ergänzt du so:

    "offers": {
            "@type": "Offer",
            "price": "39.90",
            "priceCurrency": "EUR",
            "priceSpecification": {
              "@type": "UnitPriceSpecification",
              "priceType": "https://schema.org/StrikethroughPrice",
              "price": "49.90",
              "priceCurrency": "EUR"
            }
          }

    Welche Zahl du durchstreichst, entscheidet in Deutschland allerdings nicht Google. § 11 PAngV verlangt bei jeder Bekanntgabe einer Preisermäßigung die Angabe des niedrigsten Gesamtpreises, den du in den letzten 30 Tagen vor der Ermäßigung verlangt hast. Und der EuGH hat am 26. September 2024 in einem Verfahren aus Düsseldorf (C-330/23, Verbraucherzentrale Baden-Württemberg gegen Aldi Süd) entschieden, dass eine als Prozentsatz oder mit einer werblichen Aussage bekanntgegebene Ermäßigung auf Grundlage dieses „vorherigen Preises“ zu bestimmen ist. Wer „−20 %“ neben einen Preis schreibt, rechnet also vom 30-Tage-Tiefstpreis.

    Fürs Markup folgt daraus eine einfache Regel: Der StrikethroughPrice ist der Preis, der auf deiner Seite tatsächlich durchgestrichen steht — kein älterer Listenpreis, der nur im JSON-LD auftaucht. Den Hinweis auf einen Preisnachlass in den Suchergebnissen berechnet Google laut eigener Doku ohnehin selbst, aus den Preisänderungen, die es über die Zeit beobachtet.

    EAN, Artikelnummer und die Sterne, die dir nicht gehören

    Die EAN auf deiner Verpackung ist eine GTIN. GS1 Germany schreibt, dass EAN die frühere Bezeichnung der heute international verwendeten GTIN ist, dass GS1 seit 2009 offiziell von GTIN spricht und dass die Nummer im Regelfall 13-stellig ist. Sie gehört in gtin, in numerischer Form — die URL-Form unterstützt Google nicht. Google empfiehlt die spezifischste Property; für eine 13-stellige EAN kannst du gtin in gtin13 umbenennen.

    • Dieselbe Nummer wie auf dem Marktplatz. Laut GS1 Germany verlangen Amazon, eBay und Google eine EAN beziehungsweise GTIN. Steht dieselbe Nummer im Markup deines Shops, kann Google dein Angebot demselben Artikel anderswo zuordnen.
    • sku ohne Leerzeichen. Google verbietet Leerzeichen in der SKU und empfiehlt reine ASCII-Zeichen — also auch keine Umlaute in der Artikelnummer. mpn ist die Teilenummer des Herstellers.
    • Versand und Rückgabe sind keine Pflicht. shippingDetails und hasMerchantReturnPolicy stehen bei Google unter den empfohlenen Properties von Offer, und Google rät, globale Versand- und Rückgabebedingungen unter Organization anzugeben. Deshalb erzeugen die beiden optionalen Felder nur einen Verweis per @id.

    Sterne auf einem Produkt, das du verkaufst, sind erlaubt, wenn die Bewertungen von deinen Käufern auf deiner Website stammen; die Regel gegen eigennützige Rezensionen betrifft Seiten mit LocalBusiness- und Organization-Markup. Tabu bleibt, was von anderswo kommt: Den Schnitt deines Marktplatz-Angebots ins eigene Markup zu übernehmen, verstößt gegen Googles Regel, keine Rezensionen oder Bewertungen von anderen Websites zusammenzufassen. Mindestens ratingCount oder reviewCount ist Pflicht. Die vollständigen Regeln — samt dem, was das UWG seit 2022 zu Kundenbewertungen verlangt — stehen beim Review Schema Generator.

    FAQ

    Was ist ein Product-Schema-Generator?

    Ein Product-Schema-Generator macht aus Produktangaben strukturierte Daten vom Typ Product und Offer — das JSON-LD, aus dem Google Preis, Verfügbarkeit und Produktkennungen liest und mit dem eine Seite für Händlereinträge und Produkt-Snippets infrage kommt. Dieser prüft Googles Regeln schon beim Tippen und schreibt einen sichtbaren Produktblock mit denselben Werten.

    Welche Angaben sind in strukturierten Produktdaten Pflicht?

    Am Produkt name, image und offers, im Angebot price und priceCurrency. Für Händlereinträge muss der Preis über null liegen, und offers muss ein Offer sein, kein AggregateOffer, denn Google setzt voraus, dass du der Verkäufer bist. Alles andere, von brand bis gtin, ist empfohlen.

    Muss der Preis im Markup inklusive Mehrwertsteuer sein?

    Bei einem Shop für Verbraucher in Deutschland: ja. Die Preisangabenverordnung verlangt den Gesamtpreis einschließlich Umsatzsteuer, das Merchant Center verlangt für Deutschland den Preis inklusive MwSt. und denselben Betrag auf der Landingpage, und das Markup beschreibt, was die Seite zeigt. price ist also der Bruttopreis, ohne Versandkosten.

    Schreibe ich den Preis als 49,90 oder 49.90?

    Im JSON-LD 49.90, mit Punkt und ohne Eurozeichen; die Währung steht als EUR in priceCurrency. So verlangt es schema.org. Auf der Seite bleibt es bei 49,90 €. Vorsicht mit Tausenderpunkten: 1.299 liest ein Parser als 1,299, also knapp 1,30 — schreib 1299.00.

    Wie zeichne ich den Grundpreis aus?

    Mit einer UnitPriceSpecification, die den aktiven Preis und eine referenceQuantity enthält: die Packungsmenge als value und unitCode, die Bezugsgröße als valueReference, etwa 0.5 kg bezogen auf 1 kg. In Deutschland ist die Bezugsgröße nach § 5 PAngV 1 kg, 1 l, 1 m, 1 m² oder 1 m³. Steht der aktive Preis zusätzlich in offers.price, ignoriert Google die priceSpecification.

    Warum erscheint mein Produkt nicht als Rich Result, obwohl das Markup gültig ist?

    Prüf zuerst priceValidUntil: Google schreibt, dass der Eintrag möglicherweise nicht angezeigt wird, wenn dieses Datum in der Vergangenheit liegt. Ein Preis von null, eine fehlende Währung oder ein für den Crawler gesperrtes Bild haben dieselbe Wirkung, ohne das JSON-LD ungültig zu machen. Und für Händlereinträge kommen nur Seiten infrage, auf denen man kaufen kann.

    Darf ich die Bewertungen von Amazon oder eBay in mein Markup übernehmen?

    Nein. Googles Richtlinien für Rezensions-Snippets untersagen, Rezensionen oder Bewertungen von anderen Websites zusammenzufassen; der Schnitt auf einem Marktplatz gehört zu dessen Seite. Erlaubt sind Bewertungen, die deine eigenen Käufer auf deiner Website abgegeben haben — echt, und mit ratingCount oder reviewCount.

    clize seo check — kostenlos für deine eigene Domain

    Zehntausend Produktseiten. Welche davon hat Google wirklich?

    Die eigene Domain zu prüfen kostet nichts: jede Seite mit live abgerufenem HTTP-Status und Indexstatus, Impressionen und Positionen gegen das vorherige Zeitfenster, Traffic nach Quelle mit KI-Suchmaschinen getrennt gezählt. Ein Befehl, direkt aus deinem Agenten.

    $ npm i -g @clize/clize && clize install
    $ clize seo check --domain deinshop.de
    [ Agent SEO von Clize → ]