Ihre Nachricht wurde gesendet.

Welches schema.org-Markup bringt Preis und Verfügbarkeit in eine Assistentenantwort?

Setzen Sie auf die Produktseite einen Product-Knoten und ein Offer mit price, priceCurrency und availability. Dieses JSON-LD steht im HTML vom Server, und die drei Werte sind dieselben wie im Feed. Ein Preis, der erst nach JavaScript erscheint, steht nicht in dem HTML, das ein Crawler gespeichert hat.

Die Knoten auf der Produktseite

schema.org Product ist der Artikel. schema.org Offer sind die kommerziellen Bedingungen: Preis, Währung und ob man kaufen kann. schema.org AggregateRating ist die Zusammenfassung der Bewertungen und ist optional.

Die Definitionen: https://schema.org/Product, https://schema.org/Offer und https://schema.org/AggregateRating. Das JSON-LD gehört in das HTML der Produkt-URL, nicht nur auf die Kategorieseite.

Google hat eine eigene Prüfung für Merchant Listings: https://developers.google.com/search/docs/appearance/structured-data/merchant-listing und eine Product-Snippet-Seite: https://developers.google.com/search/docs/appearance/structured-data/product. Das ist die Liste, die Google derzeit prüft. Das ist kein Versprechen, dass ChatGPT, Perplexity oder Gemini dieselben Felder lesen.

Die Merchant-Listing-Seite verlangt Product.name, image und ein verschachteltes Offer, kein AggregateOffer. Das Offer braucht einen Preis über null, als price oder als priceSpecification.price, und das passende priceCurrency. availability ist empfohlen.

Offer: Preis, Währung, Verfügbarkeit

price ist der Betrag, den ein Käufer zahlt, in Haupteinheiten, mit Dezimalpunkt. 18.00 ist achtzehn, nicht eintausendachthundert. Kein Währungssymbol in price.

priceCurrency ist der ISO-4217-Code, etwa PLN, EUR oder USD. Das ist ein eigenes Feld. Das Paar ist price 18.00 und priceCurrency PLN. Die Zeichenkette 18.00 PLN gehört in eine Feed-Datei, nicht in diese zwei Felder.

availability ist eine ItemAvailability-URL. Vorrätig: https://schema.org/InStock. Nicht vorrätig: https://schema.org/OutOfStock. Vorbestellung: https://schema.org/PreOrder. Nachlieferung: https://schema.org/BackOrder. Nutzen Sie diese volle URL. Googles Merchant-Listing-Seite akzeptiert auch den Kurznamen InStock. Ein Shop-Status wie instock ist keins von beiden.

url am Offer ist die Produktseite, mit gewählter Variante, wenn der Preis zu einer Variante gehört. itemCondition kann https://schema.org/NewCondition sein, wenn der Artikel neu ist. priceValidUntil ist optional und ersetzt kein Feed-Update.

Ein AggregateOffer mit lowPrice und highPrice beschreibt eine Spanne. Er sagt nicht, welche Variante vorrätig ist. Nutzen Sie ihn nur für eine Spanne. Für eine verkaufbare Variante nehmen Sie ein Offer.

Product und AggregateRating

Product.name ist der Name auf der Seite. image ist eine direkte Bild-URL und darf wiederholt werden. description ist Klartext. sku ist Ihre Kennung. brand ist ein Brand-Knoten mit name oder Text. offers zeigt auf das Offer oder auf ein Array von Offers, wenn mehrere Varianten wirklich Angebote sind.

AggregateRating.ratingValue ist der Durchschnitt. reviewCount ist die Zahl der Bewertungen, aus denen er stammt. ratingCount ist bei schema.org die andere Zählung. bestRating ist 5, wenn Sie es weglassen. Geben Sie keine Bewertung aus, wenn es keine Rezensionen gibt. Zählen Sie Shop-Bewertungen nicht in die Produktzahl.

Dieselben Fakten können in der OpenAI-Datei als star_rating und review_count stehen. Dort sind die Felder optional. Nennen Seite und Datei eine Bewertung, sollen es dieselben Rezensionen sein.

Feed und Seite sind zwei Kopien

Google Merchant Center hat einen eigenen Feed. Die Produktdaten-Spezifikation nutzt id, title, description, link, image_link, availability, price und brand. Der Preis sieht dort aus wie 18.00 PLN. availability nutzt in_stock, out_of_stock, preorder und backorder. Die Referenz: https://support.google.com/merchants/answer/7052112.

Die OpenAI-Discovery-Datei nutzt item_id, url, image_url und price als 18.00 PLN, und sie schreibt Vorbestellung als pre_order. seller_name ist dort erforderlich und hat in der einfachen Google-Zeile kein Gegenstück.

Das Offer auf der Seite, der Google-Feed und der OpenAI-Feed sind drei Kopien einer Tatsache. Weichen sie ab, bestimmen Sie nicht, welche Kopie ein Assistent wiederholt.

OpenAIs Händlerseite sagt, ein Feed ist optional, wenn ChatGPT die Site schon crawlt, und ein Feed gibt mehr Kontrolle darüber, wie Produkte erscheinen. Sie sagt nicht, dass der Feed gewinnt, wenn die beiden Preise auseinanderliegen. Perplexity, Gemini und Google AI Overviews sind nicht dieser Feed. Auf Googles AI-Features-Seite sollen strukturierte Daten zum sichtbaren Text passen.

Ein vollständiges Beispiel

Ein Produkt, ein Angebot, im HTML vom Server. Ersetzen Sie die example.com-URLs. price hat kein Währungssymbol. availability ist eine volle schema.org-URL.

Hat der Becher eine blaue und eine weiße Variante zu verschiedenen Preisen, lassen Sie nicht beide Preise aus dem HTML und tauschen sie per Skript. Entweder hat jede Variante eine eigene URL und ein eigenes Offer, oder das offers-Array enthält ein Offer je Variante, mit eigenem price, availability und url.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Ceramic mug, 350 ml",
  "image": "https://example.com/images/mug.jpg",
  "description": "Glazed ceramic mug with a handle. Dishwasher safe.",
  "sku": "MUG-350",
  "brand": { "@type": "Brand", "name": "Northline" },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/products/mug",
    "priceCurrency": "PLN",
    "price": "72.00",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.6",
    "reviewCount": "28"
  }
}

Wie Sie es prüfen

Öffnen Sie die Produkt-URL im Rich Results Test: https://search.google.com/test/rich-results. Der Dienst holt die URL, oder Sie fügen das HTML ein. Lesen Sie das Product-Element. price, priceCurrency und availability sind die Werte von heute, nicht ein alter Standard aus der Vorlage.

Der schema.org-Validator unter https://validator.schema.org/ prüft das Vokabular. Ein gültiger Graph kann trotzdem den falschen Preis tragen. Vergleichen Sie den extrahierten Preis mit dem Preis, den ein Käufer sieht.

Fordern Sie auch das rohe HTML an. Holen Sie die Produkt-URL mit curl oder nutzen Sie view-source und suchen Sie die Preiszeichenkette und schema.org/InStock. Erscheinen sie erst nach der Hydration, standen sie nicht in der ersten Antwort.

Was den Preis bricht

Ein Preis, den nur clientseitiges JavaScript schreibt, fehlt im ersten HTML. Google dokumentiert, dass Googlebot JavaScript ausführt: https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics. Das Dokument gilt für Googlebot. Es sagt das nicht für jeden KI-Crawler.

OpenAI, Perplexity und Anthropic dokumentieren keinen JavaScript-Renderer für GPTBot, OAI-SearchBot, ChatGPT-User, PerplexityBot oder ClaudeBot. Setzen Sie den Preis in das HTML, das der Server sendet.

Als Nächstes bricht die Abweichung vom Feed. Die Seite sagt 72.00 PLN und die Datei 79.99 USD, oder die Seite ist vorrätig, während die Datei out_of_stock sagt. Korrigieren Sie die Quelle, aus der beide Kopien lesen. Patchen Sie nicht nur das Markup.

Varianten brechen den Preis, wenn eine URL viele Preise ausliefert und das Offer nur den ersten nennt. Eine Farbe, die der Browser wählt und die das Server-HTML nicht ändert, lässt dem Assistenten die Standardvariante. Geben Sie der Variante eine stabile URL und setzen Sie sie in Offer.url.

Weitere stille Fehler: availability als Shop-Wort statt schema.org-URL, Preis mit Dezimalkomma, das Offer nur auf der Kategorieseite und fehlend auf der Produkt-URL, ein AggregateRating mit ratingValue und reviewCount null.

OpenAI nennt etwa 24 Stunden, bis eine robots.txt-Änderung die Suche trifft. Eine Frist für einen korrigierten Preis steht dort nicht. Laden Sie mindestens täglich einen vollständigen Snapshot hoch und prüfen Sie dieselbe SKU erneut.

  • Das HTML der Produkt-URL enthält Product und Offer, bevor ein Skript läuft.
  • price ist eine Dezimalzahl in Haupteinheiten, priceCurrency ist der ISO-Code.
  • availability ist https://schema.org/InStock oder die passende URL für nicht vorrätig, Vorbestellung oder Nachlieferung.
  • Jede Variante mit eigenem Preis hat ein eigenes Offer oder eine eigene URL.
  • AggregateRating entfällt, wenn es keine Bewertungen gibt.
  • Der Offer-Preis stimmt mit dem Google-Merchant-Preis und dem OpenAI-Feed überein.
  • Der Rich Results Test zeigt denselben Preis, den der Käufer sieht.
Ist JSON-LD nötig, oder reicht Microdata?

schema.org erlaubt mehr als eine Syntax. JSON-LD im HTML vom Server lässt sich leicht mit dem Feed vergleichen. Entscheidend ist, ob Preis und Verfügbarkeit im abgerufenen HTML unter lesbaren Namen stehen.

Soll die Kategorieseite ein Offer für jedes Produkt tragen?

Das Angebot gehört auf die URL, unter der das Produkt verkauft wird. Ein Kategorie-Raster darf Namen wiederholen. Es soll nicht der einzige Ort des Preises sein. Assistenten zitieren die Produkt-URL.

Welche Availability-URL gilt, wenn der Artikel nicht vorrätig ist?

https://schema.org/OutOfStock. Lassen Sie das Offer auf der Seite, mit dem aktuellen Preis. Das Offer zu entfernen sagt nicht nicht vorrätig. Es sagt nichts.

Ändert AggregateRating den Preis, den ein Assistent nennt?

Nein. Der Preis kommt aus Offer.price und priceCurrency. AggregateRating ist die Bewertungszusammenfassung. Lassen Sie es weg, wenn reviewCount null wäre.