Am 14. Oktober 2026 berichtete Barry Schwartz in Search Engine Roundtable, dass OpenAI den Werbetreibenden auf seiner Anzeigenplattform inzwischen Menschen zur Seite stellt und nicht nur ein Dashboard. Seine Zusammenfassung: “OpenAI hat Mitarbeiter, die auf Werbetreibende zugehen, um ihnen bei der Verwaltung ihrer ChatGPT Ads zu helfen.” (eigene Übersetzung) Als Beleg diente eine E-Mail, die Anthony Higman auf X veröffentlicht hatte, mit dem Betreff Introducing your ChatGPT Ads Account Manager. Darin wird eine Kontaktperson genannt, zu Fragen eingeladen, ein Kennenlerngespräch vorgeschlagen und ein zweiwöchentlicher Termin angeregt, um die Performance zu prüfen und nach Optimierungsmöglichkeiten zu suchen.
Das ist nicht der Start der Werbung in ChatGPT. OpenAI hat seine Werbegrundsätze bereits früher im Jahr 2026 veröffentlicht, und das Entwicklerportal dokumentiert schon einen vollständigen Werbe-Stack: Kampagnen, Produktfeeds, ein Measurement Pixel und eine serverseitige Conversions API. Die Account-Manager-E-Mail ist die Vertriebsebene, die auf einer bereits funktionierenden Plattform hinzukommt.
Für WooCommerce-Shops lautet die nützliche Frage nicht, ob Konversationswerbung grundsätzlich an Bedeutung gewinnen wird. Entscheidend ist, was die Plattform tatsächlich von einem Shop erwartet: welche Produktdaten, in welchem Format und wie ein Kauf zurückgemeldet wird. Dieser Leitfaden hält sich an das, was OpenAI dokumentiert, und ordnet jeder Anforderung den passenden WordPress- und WooCommerce-Code zu.
was die E-Mail des ChatGPT Ads Account Managers Werbetreibenden anbietet
Die E-Mail aus dem Bericht von Search Engine Roundtable ist Account Management und keine Kaltakquise bei Marken, die noch nie geworben haben. Sie stellt einen namentlich genannten Manager vor, bietet ein erstes Gespräch an und schlägt regelmäßige zweiwöchentliche Auswertungen der Kampagnenergebnisse vor. Schwartz deutet das so, dass diese Mitarbeiter Agenturen bei der Betreuung der Anzeigen ihrer Kunden helfen könnten, und bezeichnet diese Deutung selbst als Vermutung.
Zwei Details aus OpenAIs eigener Dokumentation erklären, warum ein menschlicher Ansprechpartner selbst auf einer Self-Service-Plattform zählt:
- Manche Funktionen werden pro Konto freigeschaltet. Der Leitfaden zu Produktfeeds nennt den API-Zugang zu Produktfeeds für das Konto als Voraussetzung und rät Werbetreibenden ohne Feed-Zugang, sich an das Account-Team von OpenAI zu wenden.
- Mehrere Einstellungen sind endgültig. Laut Leitfaden zum Conversion-Tracking lässt sich das Kampagnenziel nach dem Anlegen nicht mehr ändern, und bei einer auf Conversions optimierten Kampagne gilt das auch für das gewählte Conversion-Ereignis. Fehler bei der Einrichtung kosten eine neu aufgebaute Kampagne, deshalb hat ein Abstimmungsgespräch vor dem Start echten Wert.
Die Reaktionen auf X fielen gemischt aus. Higman scherzte über endlose Telefonate mit Betreuern von Google, Meta und ChatGPT Ads, und ein anderer Nutzer merkte an, dass OpenAI für den Support KI einsetzt, für den Vertrieb aber Menschen. Für Shopbetreiber ist die praktische Folgerung einfacher: Wenn Sie diese E-Mail erhalten, ist das erste Gespräch der richtige Moment, um zu klären, ob Feed-Zugang und Conversion-Optimierung für Ihr Konto aktiviert sind.
wie Anzeigen laut OpenAI in ChatGPT erscheinen
OpenAIs Beitrag zum eigenen Werbeansatz und zum erweiterten Zugang zu ChatGPT legt die Regeln fest, die für jede Platzierung gelten. Anzeigen erscheinen am Ende einer Antwort, wenn es auf Grundlage des aktuellen Gesprächs ein relevantes gesponsertes Produkt oder eine passende Dienstleistung gibt. Sie sind gekennzeichnet und optisch von der organischen Antwort getrennt.
Derselbe Beitrag nennt die Zusagen, die bestimmen, was Werbetreibende kaufen können und was nicht:
- Unabhängigkeit der Antwort. Anzeigen beeinflussen die Antworten von ChatGPT nicht. Ein Shop kann nicht dafür bezahlen, im Antworttext genannt zu werden.
- Vertraulichkeit der Gespräche. Gespräche bleiben gegenüber Werbetreibenden privat, und OpenAI erklärt, keine Nutzerdaten an sie zu verkaufen.
- Kontrolle durch die Nutzer. Nutzer können die Personalisierung von Anzeigen abschalten und die dafür verwendeten Daten löschen.
- Ausgeschlossene Zielgruppen und Themen. Konten von Nutzern unter 18 Jahren sehen keine Anzeigen, und neben sensiblen Themen wie Gesundheit, psychischer Gesundheit oder Politik erscheinen keine.
- Bezahlte Tarife. Die höheren bezahlten Tarife bleiben werbefrei; Anzeigen richten sich an die kostenlose und die günstigeren Stufen.
Damit ist ein verbreitetes Missverständnis ausgeräumt. Berichte, wonach gesponserte Produkte in die Argumentation des Modells eingewoben werden, widersprechen der Darstellung von OpenAI: zwei getrennte Systeme, eine organische Antwort und darunter eine gekennzeichnete Anzeigeneinheit. Organische und bezahlte Sichtbarkeit sind getrennte Aufgaben, und keine lässt sich mit der anderen erkaufen.
wie das Targeting von ChatGPT Ads ohne Keywords funktioniert
Die Referenz zum Kampagnen-Targeting nennt vier Stellschrauben, und keine davon ist eine Keyword-Liste:
| Stellschraube | Was sie steuert | Hinweise aus der Dokumentation |
|---|---|---|
| Geografisches Targeting | Länder oder Standort-IDs, mit Ausschlüssen | Produktfeed-Kampagnen unterstützen nur Targeting auf Länderebene |
| Plattform-Targeting | ios_app, android_app, web | web umfasst auch mobile Browser, nicht nur den Desktop |
| Custom Audiences | Gehashte Kundenlisten für Einschluss, Ausschluss oder Gebotsmultiplikatoren | Ausschlüsse gewinnen, wenn ein Nutzer in beiden Listen steht |
| Kontexthinweise | Beschreibungen von Produkten, Anwendungsfällen oder Bedürfnissen für eine Anzeigengruppe | Keine Keywords mit exakter Übereinstimmung |
Kontexthinweise kommen der Keyword-Recherche am nächsten, und die Dokumentation stellt ausdrücklich klar, dass sie keine Keywords sind. Sie beschreiben, was eine Anzeigengruppe verkauft und an wen, deshalb funktionieren sie am besten als kurzes Produkt-Briefing statt als Liste von Suchphrasen.
Der Unterschied zwischen dem Einschluss einer Zielgruppe und einem Gebotsmultiplikator ist für Shops mit Kundenliste wichtig. Ein Einschluss beschränkt die Auslieferung auf passende Nutzer. Ein Gebotsmultiplikator erhöht das Gebot für passende Nutzer, während alle anderen weiterhin erreichbar bleiben. Ein Shop, der frühere Kunden als Einschluss-Zielgruppe hochlädt, erreicht keine Neukunden mehr; dieselbe Liste als Multiplikator hochgeladen hat diesen Effekt nicht.
Gebotsoptionen und Kampagnenziele bei ChatGPT Ads
Der Leitfaden zu Geboten und Budgets trennt drei Einstellungen, die Nutzer von Google Ads gern als eine behandeln: das Kampagnenziel (worauf optimiert wird), das Abrechnungsereignis (wofür Sie zahlen) und die Gebotsstrategie (wer das Gebot festlegt).
| Kampagnenziel | Abrechnungsereignis | Gebotsstrategie |
|---|---|---|
| Impressionen | Impression | Festes Gebot |
| Klicks | Klick | Festes Gebot oder Klicks maximieren |
| Conversions | Klick | Festes Gebot oder Conversions maximieren |
Conversion-Kampagnen optimieren auf einen Kauf oder Lead, rechnen aber weiterhin gültige Klicks ab. Die beiden Maximieren-Strategien setzen ein Tagesbudget voraus und erlauben kein Höchstgebot. Gebotsmultiplikatoren für Zielgruppen funktionieren nur mit festen Geboten.
Geldbeträge werden auf der Plattform in drei verschiedenen Einheiten angegeben, und ihre Verwechslung ist der wahrscheinlichste Integrationsfehler:
- Budgets und Gebote verwenden Micros: Eine Million Micros entspricht einer Einheit der Kontowährung. Ein Gebot von 2,50 wird als 2500000 übermittelt.
- Impressionsgebote gelten pro Impression, daher wird ein CPM-Wert vor der Umrechnung in Micros durch 1.000 geteilt.
- Beträge von Conversion-Ereignissen und Preise in der Delta API verwenden ganzzahlige kleinste Einheiten: 8900 bedeutet 89,00 in einer Währung mit Cent.
- Preise im CSV-Feed verwenden Haupteinheiten mit Währungscode, etwa
79.99 EUR.
Die Conversion-Optimierung braucht genau ein aktives Standard-Conversion-Ereignis, etwa order_created. Benutzerdefinierte Ereignisse lassen sich messen, können aber kein Optimierungsziel sein. Da Ziel und gewähltes Ereignis beim Anlegen festgelegt werden, muss die unten beschriebene Arbeit am Conversion-Tracking abgeschlossen sein, bevor die erste Conversion-Kampagne entsteht.
wie Sie einen Produktfeed für ChatGPT Ads aus WooCommerce erstellen
Shopping-Anzeigen in ChatGPT entstehen aus einem Produktfeed. Der Leitfaden zu Produktfeeds beschreibt den Ablauf: Feed über die Advertiser API anlegen, SFTP-Zugang mit Passwort oder SSH-Schlüssel einrichten und dann eine UTF-8-CSV mit einer Zeile pro Produkt oder Variante hochladen. Die Dateien kommen direkt in das SFTP-Stammverzeichnis, ohne Unterordner, und jedes Produkt sollte über alle Dateien hinweg nur einmal vorkommen.
Die Felddefinitionen stehen in OpenAIs Schema für Produktdateien, das auch für die organische Produktsuche in ChatGPT gilt. Neun Basisfelder sind Pflicht, und jedes lässt sich sauber auf WooCommerce-Daten abbilden:
| Feed-Feld | Quelle in WooCommerce | Hinweise aus dem Schema |
|---|---|---|
item_id | SKU des Produkts oder der Variante, alternativ die ID | Stabil, nie für einen anderen Artikel wiederverwendet |
title | Produktname, einschließlich Variante | Höchstens etwa 150 Zeichen anstreben |
description | Kurz- oder Langbeschreibung, ohne Tags | Reiner Text, bis etwa 5.000 Zeichen |
url | Permalink, nach Möglichkeit mit vorausgewählter Variante | Öffentlich über HTTPS, stabil |
brand | Marken-Attribut oder Taxonomie | Eine echte Marke, kein Platzhalter |
seller_name | Name des Shops | Der Verkäufer dieses Angebots |
image_url | Hauptbild dieser Variante | Direkte JPEG- oder PNG-URL |
price | Regulärer Preis | Haupteinheiten plus Währung, etwa 79.99 EUR |
availability | Lagerstatus | in_stock, out_of_stock, pre_order, backorder oder unknown |
Variable Produkte brauchen in jeder Variantenzeile drei zusätzliche Felder: eine gemeinsame group_id (die ID des Elternprodukts eignet sich), listing_has_variations auf true und ein variant_dict wie {"color":"Black","size":"10"}, gebildet aus den Variantenattributen. Die Gruppen-ID muss sich von jeder Artikel-ID unterscheiden.
Kennungen verdienen besondere Aufmerksamkeit. Seit WooCommerce 9.1 stellen Produkte get_global_unique_id() bereit, das Feld, das im Backend als GTIN, UPC, EAN oder ISBN erscheint. Das Schema akzeptiert eine GTIN mit genau 8, 12, 13 oder 14 Ziffern und gültiger Prüfziffer und weist Händler an, das Feld lieber wegzulassen, als einen Wert zu erfinden. Eine Herstellerartikelnummer (mpn) zusammen mit der Marke ist die Ausweichlösung.
Zwei Kennzeichen entscheiden, wo ein Produkt erscheinen kann. is_ads_eligible muss für Produkte, die das Anzeigensystem verarbeiten soll, auf true stehen; fehlt das Feld, bleibt die Anzeigenverarbeitung aus, sofern kein Standardwert auf Feed-Ebene existiert. is_eligible_search steuert die organische Auffindbarkeit und ist unabhängig von der Anzeigeneignung.
In der WordPress-Welt wird häufig angenommen, ein vorhandener Google-Shopping-XML-Feed aus einem Plugin lasse sich wiederverwenden. Der Google-kompatible Weg des Schemas akzeptiert tabulator- oder kommagetrennte Textdateien mit Google-Spaltennamen, und das erst, nachdem OpenAI dieses Format für den registrierten Feed bestätigt hat. JSON, Tabellenkalkulationen, XML, RSS und Atom werden auf diesem Weg nicht unterstützt. Die meisten Shops brauchen einen eigenen CSV-Export.
/**
* Schreibt eine Produkt-CSV für ChatGPT Ads mit einfachen Produkten und Varianten.
* Feldnamen nach developers.openai.com/commerce/specs/file-upload/products.
*/
function wppoland_write_chatgpt_feed( string $path ): void {
$fh = fopen( $path, 'w' );
fputcsv( $fh, [ 'item_id', 'group_id', 'listing_has_variations', 'variant_dict',
'title', 'description', 'url', 'brand', 'seller_name', 'image_url',
'price', 'availability', 'gtin', 'is_ads_eligible' ] );
$map = [ 'instock' => 'in_stock', 'outofstock' => 'out_of_stock', 'onbackorder' => 'backorder' ];
$ids = wc_get_products( [ 'status' => 'publish', 'limit' => -1, 'return' => 'ids',
'type' => [ 'simple', 'variation' ] ] );
foreach ( $ids as $id ) {
$p = wc_get_product( $id );
$parent = $p->get_parent_id() ? wc_get_product( $p->get_parent_id() ) : null;
$image = wp_get_attachment_image_url( $p->get_image_id() ?: ( $parent ? $parent->get_image_id() : 0 ), 'full' );
if ( ! $image || '' === $p->get_regular_price() ) {
continue; // Pflichtfelder fehlen: überspringen statt Platzhalter senden.
}
$variant = $parent ? wp_json_encode( array_map( 'strval', $p->get_attributes() ) ) : '';
fputcsv( $fh, [
$p->get_sku() ?: (string) $id,
$parent ? 'group-' . $parent->get_id() : '',
$parent ? 'true' : '',
$variant,
$p->get_name(),
wp_strip_all_tags( $p->get_description() ?: ( $parent ? $parent->get_description() : '' ) ),
$p->get_permalink(),
get_bloginfo( 'name' ), // Durch ein echtes Marken-Attribut ersetzen, wo Produkte eines haben.
get_bloginfo( 'name' ),
$image,
wc_format_decimal( $p->get_regular_price(), 2 ) . ' ' . get_woocommerce_currency(),
$map[ $p->get_stock_status() ] ?? 'unknown',
$p->get_global_unique_id(),
'true',
] );
}
fclose( $fh );
}Der Upload selbst läuft über SFTP, daher genügt ein Cronjob oder ein WP-CLI-Befehl, der die Datei schreibt und mit dem SFTP-Client des Servers überträgt. Nach jedem Upload meldet der Endpunkt für den Upload-Verlauf einen Status (completed, completed_with_errors, failed und weitere) sowie die Zahl angenommener und abgelehnter Zeilen mit Diagnosecodes wie missing_required_column oder invalid_value. OpenAI weist darauf hin, dass ein abgeschlossener Upload nicht bedeutet, dass jedes Produkt ausgeliefert werden kann.
Preise und Bestand mit der Delta API aktuell halten
Der Feed-Leitfaden trennt Aktualisierungen nach Art. Änderungen an Titel, Preis oder Verfügbarkeit eines bestehenden Artikels laufen über die Delta API, eine PATCH-Anfrage, die nur die geänderten Felder überträgt. Neue Produkte und Änderungen an anderen Feldern, etwa Bildern oder Beschreibungen, erfordern einen neuen Katalog-Upload per SFTP.
Die Regel für den Bestand ist eindeutig: Ein als out_of_stock markierter Artikel kommt nicht mehr für die Auslieferung infrage, sobald die Änderung durchgereicht ist, und wird wieder berechtigt, wenn er zurück auf in_stock gesetzt wird. Die Dokumentation warnt außerdem, dass Aktions- und Verfügbarkeitsdaten im Feed nichts zeitlich planen, eine Preisänderung muss also in dem Moment gesendet werden, in dem sie eintritt.
In WooCommerce bieten sich die Lager-Hooks für Produkte und Varianten als Auslöser an. Die Anfrage braucht den Advertiser-API-Schlüssel, der auf dem Server bleiben muss, neben den anderen Geheimnissen, die bei einem WordPress-Sicherheitsaudit geprüft werden. Bei Shops, in denen ein ERP Bestand und Preise verwaltet, gehört derselbe Aufruf in die Schicht der WooCommerce-ERP-Integration und nicht in ein Theme.
/**
* Überträgt eine Bestandsänderung an die Delta API von ChatGPT Ads.
* Endpunkt und Aufbau der Nutzdaten: developers.openai.com/ads/product-feeds
*/
function wppoland_push_chatgpt_stock( WC_Product $product ): void {
if ( ! defined( 'OPENAI_ADS_API_KEY' ) || ! defined( 'OPENAI_ADS_FEED_ID' ) ) {
return;
}
$item_id = $product->get_sku() ?: (string) $product->get_id();
$group_id = $product->get_parent_id() ? 'group-' . $product->get_parent_id() : $item_id;
wp_remote_request( 'https://api.ads.openai.com/v1/feeds/' . OPENAI_ADS_FEED_ID . '/products', [
'method' => 'PATCH',
'timeout' => 10,
'headers' => [
'Authorization' => 'Bearer ' . OPENAI_ADS_API_KEY,
'Content-Type' => 'application/json',
],
'body' => wp_json_encode( [ 'products' => [ [
'id' => $group_id,
'variants' => [ [
'id' => $item_id,
'availability' => [ 'status' => $product->is_in_stock() ? 'in_stock' : 'out_of_stock' ],
] ],
] ] ] ),
] );
}
add_action( 'woocommerce_product_set_stock', 'wppoland_push_chatgpt_stock' );
add_action( 'woocommerce_variation_set_stock', 'wppoland_push_chatgpt_stock' );Die Produkt-ID in der Delta-Anfrage ist die group_id des Katalogs, wenn Varianten gruppiert sind, sonst die item_id. Eine Preisänderung nutzt dieselbe Struktur mit price als Objekt aus ganzzahligen kleinsten Einheiten und Währung, zum Beispiel {"amount": 7999, "currency": "EUR"}. Eine Antwort mit accepted: true bestätigt nur den Eingang; die Änderung wird asynchron übernommen. Halten Sie den CSV-Export mit den Delta-Änderungen synchron, sonst überschreibt der nächste vollständige Upload sie mit veralteten Werten.
das Measurement Pixel von ChatGPT Ads in WordPress installieren
Der Leitfaden zum Measurement Pixel verlangt ein kleines Ladeskript weit oben im <head> jeder Seite, die Conversions erfassen soll, initialisiert mit einer Pixel-ID, die im Conversions-Tab des Ads Managers angelegt wird. Kein API-Schlüssel gelangt in den Browser. In WordPress bedeutet das eine wp_head-Action mit früher Priorität oder den Head-Platz einer vorhandenen Tag-Manager-Einrichtung.
Drei Punkte des Leitfadens verlangen vor dem Einsatz eine Entscheidung:
- Einwilligung. Das Pixel geht standardmäßig von einer erteilten Einwilligung aus, solange es keine andere Anweisung erhält. Für Besucher aus der EU rufen Sie vor der Initialisierung
oaiq("consent", false)auf und schalten auf true um, wenn der Besucher im Consent-Banner der Messung zustimmt. Blockierte Ereignisse werden später nicht nachgeliefert, und das Setzen der Einwilligung auf false entfernt die Cookies des Pixels. - Content Security Policy. Websites mit CSP müssen
https://bzrcdn.openai.cominscript-srcundconnect-srcsowiehttps://bzr.openai.cominconnect-srcundimg-srcerlauben. Laut Leitfaden soll'unsafe-inline'nicht nur wegen des Pixels hinzugefügt werden; nutzen Sie den vorhandenen Nonce- oder Hash-Mechanismus der Website. - Cookies. Mit Einwilligung setzt das Pixel
__oppref, das die Klickkennung 30 Tage lang speichert, und__obref, eine zufällige Browser-Referenz mit 365 Tagen Laufzeit. Beide gehören in die Cookie-Richtlinie.
Für einen Shop zählt vor allem das Ereignis order_created auf der Bestellbestätigungsseite, mit der Bestellsumme in kleinsten Einheiten und der Bestellnummer als event_id.
add_action( 'woocommerce_thankyou', function ( $order_id ) {
$order = wc_get_order( $order_id );
if ( ! $order || $order->get_meta( '_oaiq_sent' ) ) {
return; // Verhindert ein zweites Ereignis, wenn die Seite neu geladen wird.
}
$order->update_meta_data( '_oaiq_sent', 1 );
$order->save();
$payload = [
'type' => 'contents',
'amount' => (int) round( $order->get_total() * 100 ), // Kleinste Einheiten für Währungen mit zwei Dezimalstellen.
'currency' => $order->get_currency(),
];
printf(
'<script>window.oaiq && oaiq("measure","order_created",%s,{event_id:%s});</script>',
wp_json_encode( $payload ),
wp_json_encode( 'order_' . $order->get_order_number() )
);
} );Die Multiplikation mit 100 passt für Währungen mit zwei Dezimalstellen wie EUR, PLN oder NOK. Die Dokumentation nennt JPY als Beispiel, bei dem 8900 für 8.900 steht, daher müssen Shops, die in Währungen ohne Dezimalstellen verkaufen, sie weglassen.
WooCommerce-Bestellungen über die Conversions API senden
Das Pixel hängt vom Browser ab: Werbeblocker, verweigerte Einwilligungen oder ein nach der Zahlung geschlossener Tab können das Ereignis verlieren. Die Conversions API schließt diese Lücke, indem sie bestätigte Bestellungen vom Server an https://bzr.openai.com/v1/events sendet, authentifiziert mit einem separaten Conversions-API-Schlüssel.
Aus den dokumentierten Regeln ergibt sich eine kurze Checkliste für eine WooCommerce-Integration:
- Deduplizierung. Verwenden Sie dieselbe Pixel-ID, denselben Ereignisnamen und dieselbe Ereignis-ID wie das Pixel. OpenAI behält das erste Ereignis, das zu einem passenden Schlüssel eingeht, und ignoriert spätere Duplikate.
- Die Klickkennung. Anders als das Pixel erfasst die API
opprefnicht. Lesen Sie den Wert beim Checkout aus dem Cookie__oppref, speichern Sie ihn an der Bestellung und senden Sie die ursprüngliche Zeichenkette unverändert. - Zeitstempel.
timestamp_msist der Zeitpunkt des Kaufs in Unix-Millisekunden und muss innerhalb der letzten 7 Tage liegen und darf höchstens 10 Minuten in der Zukunft liegen. Eine Warteschlange, die fehlgeschlagene Bestellungen erst Tage später erneut versucht, verliert sie. - Batches. Bis zu 1.000 Ereignisse pro Anfrage, und ein einziges ungültiges Ereignis lässt den ganzen Batch scheitern.
validate_only: trueprüft Nutzdaten, ohne sie zu speichern. - Kundendaten. Optionale gehashte Kennungen verbessern den Abgleich. E-Mail-Adressen werden vor dem SHA-256-Hashing von Leerzeichen befreit und in Kleinbuchstaben umgewandelt; Telefonnummern behalten die Ländervorwahl und verlieren Sonderzeichen und führende Nullen.
- Alle Bestellungen, nicht nur markierte. OpenAI empfiehlt, jede Conversion zu senden, nicht nur solche mit
oppref, damit View-through-Conversions gezählt werden können.
// Klickkennung an der Bestellung speichern, solange das Cookie noch verfügbar ist.
add_action( 'woocommerce_checkout_create_order', function ( $order ) {
if ( ! empty( $_COOKIE['__oppref'] ) ) {
$order->update_meta_data( '_oppref', sanitize_text_field( wp_unslash( $_COOKIE['__oppref'] ) ) );
}
} );
add_action( 'woocommerce_payment_complete', function ( $order_id ) {
$order = wc_get_order( $order_id );
if ( ! $order || ! defined( 'OPENAI_CONVERSIONS_API_KEY' ) || ! defined( 'OPENAI_PIXEL_ID' ) ) {
return;
}
$event = [
'id' => 'order_' . $order->get_order_number(), // Derselbe Wert wie die event_id des Pixels.
'type' => 'order_created',
'timestamp_ms' => $order->get_date_paid()->getTimestamp() * 1000,
'action_source' => 'web',
'source_url' => $order->get_checkout_order_received_url(),
'user' => [ 'emails_sha256' => [ hash( 'sha256', strtolower( trim( $order->get_billing_email() ) ) ) ] ],
'data' => [
'type' => 'contents',
'amount' => (int) round( $order->get_total() * 100 ),
'currency' => $order->get_currency(),
],
];
if ( $order->get_meta( '_oppref' ) ) {
$event['oppref'] = $order->get_meta( '_oppref' );
}
wp_remote_post( 'https://bzr.openai.com/v1/events?pid=' . rawurlencode( OPENAI_PIXEL_ID ), [
'timeout' => 10,
'headers' => [
'Authorization' => 'Bearer ' . OPENAI_CONVERSIONS_API_KEY,
'Content-Type' => 'application/json',
],
'body' => wp_json_encode( [ 'events' => [ $event ] ] ),
] );
} );Das Hashen der E-Mail-Adresse gehört nur in Shops, deren Datenschutzerklärung und Einwilligungsverwaltung die Weitergabe gehashter Kennungen an eine Werbeplattform abdecken. Ohne diese Rechtsgrundlage lassen Sie den user-Block weg; das Ereignis zählt trotzdem, nur mit schwächerem Abgleich.
Bevor Sie das Pixel einbauen, prüfen Sie auch, was es auf Ihrer Seite sendet. Die Analyse von Buchodi vom 20. September 2026 beschreibt das Cookie __obi, das ChatGPT für ein Jahr auf .openai.com setzt und das zusammen mit den Ereignissen aus oaiq.min.js von den Websites der Werbetreibenden zu OpenAI zurückgeht. Das SDK kann selbstständig Daten aus Formularfeldern und aus dem Data Layer des Tag Managers sammeln, und der automatische Abgleich war bei 638 von 881 Pixeln mit bekannter Einstellung aktiv. Jedes entschlüsselte Token trug consent_decision: analytics_allowed, OpenAI behandelt das Cookie also als Analyse-Cookie. Laden Sie das Pixel im WooCommerce-Shop erst nach der Marketing-Einwilligung in Ihrem eigenen Banner und schalten Sie den automatischen Abgleich ab, wenn das Skript keine Checkout-Felder lesen soll.
wie sich die Attribution von ChatGPT Ads vom UTM-Tracking unterscheidet
Analysetools, die sich auf UTM-Parameter stützen, erkennen Klicks auf ChatGPT-Anzeigen nur so gut, wie die Ziel-URLs getaggt sind. Die Attribution von ChatGPT Ads hängt nicht von UTMs ab. Sie nutzt eine eigene Klickreferenz, oppref, die in der URL der Zielseite übergeben und im oben beschriebenen First-Party-Cookie gespeichert wird.
Das dokumentierte Attributionsmodell besteht aus drei Teilen:
- Click-through-Conversions werden innerhalb des Klickfensters angerechnet, das in der Einstellung des Conversion-Ereignisses festgelegt ist. Der Einrichtungsleitfaden verwendet ein Fenster von 30 Tagen.
- View-through-Conversions nutzen, sofern für ein Konto verfügbar, ein festes Fenster von einem Tag nach einer berechtigten Impression. Der Ads Manager weist sie als eigene Kampagnenkennzahl aus; sie fließen nicht in die Summe der Conversions ein, und CPA, Gebote und Abrechnung bleiben klickbasiert.
- Wenn beides zutrifft, hat der Klick Vorrang.
Für Tests liefert der Monitoring-Endpunkt eine Stichprobe der Ereignisse aus ungefähr den letzten 15 Minuten und zeigt, ob jedes über pixel_sdk oder server_to_server eingegangen ist. Ein Testkauf sollte in beiden Kanälen mit derselben Ereignis-ID auftauchen und in den gemeldeten Conversions nur einmal.
Für das Reporting folgt daraus, dass die Zahlen von ChatGPT Ads und GA4 konstruktionsbedingt nicht übereinstimmen. GA4 sieht Sitzungen und die UTMs, die Sie hinzufügen; der Ads Manager sieht oppref-Treffer und View-through-Anrechnungen, die GA4 nicht beobachten kann. Vergleichen Sie Trends, nicht Summen.
Product-Schema auf WooCommerce-Seiten neben dem Anzeigenfeed
OpenAIs Feed-Dokumentation erwähnt keine strukturierten Daten auf der Produktseite, es gibt also keine dokumentierte Regel, nach der Schema-Markup die Auslieferung von ChatGPT-Anzeigen beeinflusst. Für die organische Seite zählt es trotzdem: Google nutzt strukturierte Daten vom Typ Product für Händlereinträge, und eine einzige verbindliche Quelle für Preis, Verfügbarkeit und GTIN sorgt dafür, dass Feed, Seite und Markup sich nicht widersprechen.
WooCommerce gibt bereits Product-Markup aus. Der folgende Filter ergänzt die GTIN aus dem eingebauten Feld und macht die Verfügbarkeit explizit, ohne die von WooCommerce erzeugten Angebotsdaten zu ersetzen:
add_filter( 'woocommerce_structured_data_product', function ( $markup, $product ) {
$gtin = $product->get_global_unique_id();
if ( $gtin && preg_match( '/^\d{8}$|^\d{12,14}$/', $gtin ) ) {
$markup[ 'gtin' . strlen( $gtin ) ] = $gtin;
}
if ( isset( $markup['offers'][0] ) ) {
$markup['offers'][0]['availability'] = $product->is_in_stock()
? 'https://schema.org/InStock'
: 'https://schema.org/OutOfStock';
}
return $markup;
}, 10, 2 );An beiden Stellen gilt dieselbe Prüfregel für die GTIN: 8, 12, 13 oder 14 Ziffern, niemals ein erfundener Wert.
organische Sichtbarkeit in ChatGPT mit ChatGPT Ads kombinieren
Da OpenAI Anzeigen von Antworten trennt, verlangen organische Präsenz und bezahlte Platzierung getrennte Arbeit, und jede deckt eine Lücke ab, die die andere nicht schließen kann.
- Organische Antworten. Ob ein Shop in der Antwort zitiert wird, hängt von Inhalten und Produktdaten ab, die ChatGPT finden und denen es vertrauen kann: klare Leitfäden, Vergleiche, korrekte Produktseiten und bei Produkten
is_eligible_searchim Feed. Bezahlte Anzeigen ändern daran nichts. - Bezahlte Platzierung. Die Anzeige unterhalb der Antwort ist der Ort, an dem ein Shop in kaufnahen Gesprächen auch ohne organische Erwähnung erscheinen kann. Sie stützt sich auf den Feed, die Gebote und die oben beschriebenen Conversion-Daten.
Ein Shop, der nur Anzeigen kauft, ist bei jedem Besuch auf Werbeausgaben angewiesen. Ein Shop, der nur an organischer Sichtbarkeit arbeitet, kann nicht erscheinen, wenn ein Gespräch kurz vor dem Kauf steht und die Antwort einen anderen Anbieter zitiert. Wer beides betreibt, mit einer einzigen Produktdaten-Pipeline für Sucheignung und Anzeigeneignung, muss keine zwei Kataloge pflegen.
Checkliste zur Umsetzung für WordPress und WooCommerce
- Saubere Kennungen. Geben Sie jedem Produkt und jeder Variante eine stabile SKU, füllen Sie das GTIN-Feld, wo es eine GTIN gibt, und niemals mit Platzhaltern.
- Den CSV-Export aufbauen. Bilden Sie die neun Pflichtfelder ab, ergänzen Sie
group_id,listing_has_variationsundvariant_dictfür Varianten und setzen Sieis_ads_eligiblepro Produkt. - Den Upload automatisieren. Schreiben Sie die Datei nach Zeitplan, übertragen Sie sie in das SFTP-Stammverzeichnis und prüfen Sie den Upload-Verlauf auf abgelehnte Zeilen.
- Die Delta API anbinden. Senden Sie Bestands- und Preisänderungen aus WooCommerce oder dem ERP, sobald sie eintreten, in kleinsten Einheiten.
- Das Pixel mit Einwilligung installieren. Laden Sie es früh im Head, koppeln Sie es an das Consent-Banner und aktualisieren Sie CSP und Cookie-Richtlinie.
- Die Conversions API ergänzen. Erfassen Sie
opprefbeim Checkout, senden Sie bestätigte Bestellungen mit derselben Ereignis-ID wie das Pixel und halten Sie beide API-Schlüssel auf dem Server. - Conversion-Einstellungen vor den Kampagnen anlegen. Wählen Sie das Standard-Ereignis, prüfen Sie die Ereignisse im Monitoring-Endpunkt und legen Sie erst dann eine auf Conversions optimierte Kampagne an, da sich das Ziel später nicht mehr ändern lässt.







