MAISON CODE .
/ XML · Feeds · Google Shopping · Automation · Data Engineering

Der Feed: Entwicklung von Datenpipelines für Google Shopping

Warum Standard-Shopify-Feeds in großem Umfang scheitern. Ein technischer Leitfaden zum Aufbau leistungsstarker XML-Pipelines, zur Verwendung der Content-API und zur Optimierung benutzerdefinierter Labels für ROAS.

AB
Alex B.
Der Feed: Entwicklung von Datenpipelines für Google Shopping

Wenn Sie eine Modemarke sind, ist Ihre Website Ihr Flagship-Store. Aber Ihr Produkt-Feed ist Ihre Werbetafel, Ihr Katalog und Ihr Verkäufer, verteilt über das gesamte Internet. Für die meisten Händler ist der Produkt-Feed ein nachträglicher Einfall. Sie installieren ein „Google Shopping“-Plugin, klicken auf „Synchronisieren“ und vergessen es.

Deshalb verlieren sie.

Bei Maison Code Paris behandeln wir den Produkt-Feed als Datenprodukt. Es handelt sich um ein technisches Artefakt, das direkt mit dem Return on Ad Spend (ROAS) korreliert. Wenn Ihr Feed langsam, ungenau oder allgemein ist, zahlen Sie eine „Lazy Tax“ an Google.

In diesem Leitfaden erfahren Sie, wie Sie den Feed von einer passiven XML-Datei in eine dynamische, umsatzgenerierende Pipeline umwandeln.

Warum Maison Code darüber spricht

Bei Maison Code Paris fungieren wir als das architektonische Gewissen unserer Kunden. Wir übernehmen oft „moderne“ Stacks, die ohne grundlegendes Verständnis für Skalierung gebaut wurden.

Wir diskutieren dieses Thema, weil es einen kritischen Wendepunkt in der technischen Reife darstellt. Die korrekte Implementierung unterscheidet ein fragiles MVP von einer widerstandsfähigen Plattform auf Unternehmensniveau.

Das Problem mit „Standard“-Synchronisierungen

Standardplattformen (Shopify, Magento, Salesforce) bieten native Integrationen. Diese scheitern im großen Maßstab (GMV > 10 Millionen US-Dollar) aus drei Gründen:

  1. Latenz: Sie werden normalerweise alle 24 Stunden synchronisiert. Wenn eine SKU um 10:00 Uhr ausverkauft ist, zahlen Sie bis zur nächsten Synchronisierung um 2:00 Uhr weiterhin für Klicks. Das sind verschwendete Ausgaben.
  2. Generische Titel: Sie ordnen Ihren internen CMS-Titel („Crop Top“`) direkt Google zu. Google sucht nach „Baumwoll-Crop-Top für Damen – Schwarz – Größe M“.
  3. Null-Strategie: Sie füllen erforderliche Felder aus, ignorieren jedoch „custom_labels“. Sie können für Artikel mit „hoher Marge“ und „Ausverkauf“ keine unterschiedlichen Gebote abgeben, da die Daten nicht vorhanden sind.

Architektur: Die Hybrid-Pipeline

Wir verlassen uns nicht auf Apps. Wir erstellen eine benutzerdefinierte Pipeline auf AWS/Vercel. Wir verwenden einen Hybrid-Ansatz:

  1. Bulk Sync (XML): Eine tägliche Neugenerierung des gesamten Katalogs für Strukturdaten.
  2. Inkrementelle Synchronisierung (API): Echtzeit-Updates für Preis und Verfügbarkeit.

„Meerjungfrau Diagramm TD CMS[Headless CMS / Shopify] —>|Nightly Cron| Generator[Node.js XML-Generator] Generator ->|Stream| S3[S3-Bucket: feed.xml] S3 —>|Abrufen| GMC[Google Merchant Center]

CMS -->|Webhook: PRICE_UPDATE| API[Serverlose Funktion]
API -->|Push| ContentAPI[Google Content API]

ContentAPI -->|Sofortiges Update| GMC

Phase 1: Hochleistungs-XML-Generierung

Das Generieren einer XML-Datei für 50.000 SKUs ist aufwändig. Wenn Sie alle Produkte in den Speicher laden, stürzt Ihr Node.js-Prozess ab (Heap Out of Memory). Wir verwenden Streams.

Der Streaming-Generator

Wir rufen Produkte mithilfe der Cursor-basierten Paginierung (GraphQL) ab, transformieren sie und leiten das Ergebnis direkt an den S3-Upload-Stream weiter.

„Typoskript import { Transform } from ‘stream’; import { createGzip } aus ‘zlib’; import { S3 } from ‘@aws-sdk/client-s3’;

// 1. Stream transformieren: JSON-Produkt -> XML-String const xmlTransform = new Transform({ beschreibbarer Objektmodus: wahr, transform(Produkt, Codierung, Rückruf) { const xmlNode = <Artikel> <g:id>€{product.sku}</g:id> <g:title><![CDATA[€{optimizeTitle(product)}]]></g:title> <g:price>€{product.price.amount} €{product.price.currency}</g:price> <g:link>€{product.onlineStoreUrl}</g:link> <g:cogs>€{product.cost}</g:cogs> <!-- Benutzerdefinierte Margendaten --> </item> ; Rückruf(null, xmlNode); } });

// 2. Die Pipeline asynchrone Funktion genericFeed() { const s3Stream = new PassThrough(); const upload = neuer Upload({ Client: neues S3({}), params: { Bucket: ‘feeds’, Key: ‘google.xml.gz’, Body: s3Stream } });

const productStream = getShopifyProductStream(); // Benutzerdefinierter Generator

ProduktStream .pipe(xmlTransform) .pipe(createGzip()) // Immer komprimieren .pipe(s3Stream);

warte auf upload.done(); } „

Diese Pipeline ermöglicht es uns, parallel unterschiedliche Feeds für unterschiedliche Regionen (USA, EU, Großbritannien) mit minimalem Speicherbedarf zu generieren.

Phase 2: Die Logikschicht (Datenanreicherung)

Hier trifft Technik auf Marketing. Wir geben nicht nur Daten weiter; wir verbessern es.

Titeloptimierung (SEO für Anzeigen)

Der Algorithmus ordnet Abfragen Ihrem Titel zu.

  • Schlecht: „Air Max 90“ (interner CMS-Name).
  • Gut: „Nike Air Max 90 Herren-Laufschuh – Weiß/Rot – Größe 10“.

Wir nutzen eine Template-Engine: „Titel = [Marke] + [Geschlecht] + [Kollektion] + [Produkttyp] + [Farbe] + [Material]“.

Benutzerdefinierte Labels für Gebote

Google erlaubt 5 benutzerdefinierte Labels („custom_label_0“ bis „4“). Das ist Ihre Geheimwaffe. Wir füllen diese programmgesteuert basierend auf der Geschäftslogik auf:

  • Label 0 (Margin): Wenn „(Preis – Kosten) > 50 €“, legen Sie „High_Margin“ fest. Hohes Gebot.
  • Label 1 (Saison): Wenn „Tags“ „Summer25“ enthält, legen Sie „New_Arrival“ fest.
  • Label 2 (Leistung): Synchronisierung mit Google Analytics. Wenn „ConversionRate > 3 %“ ist, legen Sie „Best_Seller“ fest.
  • Label 3 (Lagerbestand): Wenn „Bestand < 5“, legen Sie „Low_Stock“ fest. Stoppen Sie generische Werbung und fördern Sie die Dringlichkeit.

Phase 3: Die Content API (Echtzeit)

Für Preis und Lagerbestand ist XML zu langsam. Wir verwenden die Google Content API für Shopping.

Wenn im Shop ein Kauf getätigt wird, wird ein Webhook ausgelöst. „Bestellung erstellt“ -> „Bestandsebene: 0“.

Unsere serverlose Funktion schlägt sofort bei Google ein:

„Typoskript importiere { content_v2_1 } aus „@googleapis/content“;

asynchrone Funktion updateGoogleStock(sku: string, amount: number) { const auth = Warten auf getGoogleAuth(); const content = new content_v2_1.Content({ auth });

Warten Sie auf content.inventory.set({ Händler-ID: ‘12345678’, storeCode: ‘online’, // oder lokaler Geschäftscode Produkt-ID: „online:en:US:€{sku}“, requestBody: { Verfügbarkeit: Menge > 0 ? ‘auf Lager’: ‘nicht auf Lager’, // Wir können hier auch den Verkaufspreis sofort aktualisieren salePrice: {Wert: ‘99,00’, Währung: ‘USD’} } }); } „

Latenz: < 2 Minuten. Ergebnis: Sie zahlen nie für einen Klick auf einen Artikel, der nicht vorrätig ist.

Kanäle erweitern: Meta, Pinterest, TikTok

Sobald Sie über diese Rohdatenpipeline verfügen, sind Sie nicht mehr auf Google beschränkt.

  • Meta (Facebook/Instagram): Akzeptiert ein ähnliches CSV-Format. Wir forken den Stream, ordnen „g:id“ „fb:id“ zu und laden ihn in den Katalogmanager hoch.
  • TikTok: Erfordert Video-Assets. Wir können „custom_label_4“ einer URL eines generierten Video-Assets zuordnen (siehe AI Agents).
  • Lokale Inventaranzeigen (LIA): Wenn Sie physische Geschäfte haben, generieren wir einen sekundären Feed, der „store_code“ (Paris Champs-Elysées) mit „quantity“ verknüpft. Wenn sich ein Nutzer in der Nähe von Paris befindet, wird in der Anzeige „Heute abholen“ angezeigt.

Häufige Fallstricke (Der Albtraum der „Missbilligung“)

  1. GTIN-Konflikt: Google prüft UPC/EAN-Barcodes streng. Wenn Sie eine gefälschte GTIN senden, wird das Produkt gesperrt. Wenn Sie noch keines haben, senden Sie „identifier_exists: no“.
  2. Bildüberlagerungen: Google verlangt weiße Hintergründe. Wenn Ihr Hauptbild das Wasserzeichen „Verkauf“ aufweist, wird es abgelehnt. Unsere Pipeline prüft Bildmetadaten oder verwendet Cloudinary-transformierte URLs, um Überlagerungen zu entfernen.
  3. Preiskonflikt: Wenn im XML-Code 100 € und auf der Landingpage 101 € angezeigt werden (aufgrund von Währungsumrechnungen oder Aktualisierungen), sperrt Google das Konto. Aus diesem Grund ist die Content API für die Echtzeitkonsistenz zwingend erforderlich.

10. Feed-Regeln vs. Quellenbearbeitung

Das Google Merchant Center ermöglicht „Feed-Regeln“. „Wenn der Titel „Nike“ enthält, fügen Sie „Sneakers“ hinzu.“ Verwenden Sie dies nicht. Die in GMC verborgene Logik ist für Ihre Entwickler unsichtbar. Wenn Sie den Titel im Code ändern und GMC ihn wieder ändert, werden Sie Wochen mit dem Debuggen verbringen. Regel: Logik gehört in die Code-Pipeline (Quelle), nicht in die Zielschnittstelle.

11. Bestandspuffer (Das Sicherheitsnetz)

Die Synchronisierung Ihres Lagers erfolgt nicht sofort. Es dauert 10 Minuten. In diesen 10 Minuten verkaufen Sie möglicherweise Ihr letztes Gerät bei Amazon. Der Google-Nutzer klickt auf „Nicht vorrätig“. Sie haben für diesen Klick bezahlt. Die Lösung: Wenn „Menge < 3“, legen Sie „Verfügbarkeit: nicht vorrätig“ fest. Wir „verstecken“ die letzten paar Einheiten absichtlich vor Werbenetzwerken, um Spitzen bei der „Absprungrate“ und ein schlechtes Kundenerlebnis zu verhindern.

12. Feeding the Beast: Performance Max (PMax)

Googles neuer Kampagnentyp „Black Box“ (PMax) liebt Assets. Es braucht nicht nur einen Titel. Es will:

  • „lifestyle_images“: Array von URLs, die das verwendete Produkt zeigen.
  • „short_description“: 150 Zeichen.
  • „product_highlight“: Aufzählungspunkte. Die meisten Anschlüsse lassen diese weg. Wir ordnen unsere Sanity CMS-Felder diesen erweiterten Attributen zu. Je mehr Kontext PMax hat, desto günstiger wird Ihr CPC.

13. A/B-Test-Feed-Titel

Klickt „Nike Air Max“ besser als „Herren-Laufschuh“? Du weißt es nicht. Wir teilen die Produkt-ID auf.

  • „ID-123-A“ -> Titel A.
  • „ID-123-B“ -> Titel B. Wir senden beide Varianten an Google (als separate Produkte, teilen den Lagerbestand jedoch über die Artikelgruppen-ID). Wir analysieren die CTR. Der Gewinner nimmt alles. Dies ist ein Feed-Experiment.

14. Fazit

Der Product Feed ist das Herz-Kreislauf-System des E-Commerce. Es pumpt Produkte in das Ökosystem des Internets. Wenn die Daten umfangreich, sauber und schnell sind, erzielen die Anzeigen eine gute Leistung. Wenn die Daten schlecht sind, verhungert der Algorithmus.

Wir „synchronisieren“ nicht nur Produkte. Wir gestalten Sichtbarkeit.


Blutet Ihr Feed Geld?

Wenn Sie Fehlermeldungen vom Typ „Preiskonflikt“ oder einen niedrigen ROAS sehen. Beauftragen Sie unsere Architekten.