[{"data":1,"prerenderedAt":799},["ShallowReactive",2],{"blog-pimcore-erp-delta-sync-de":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":13,"about":24,"sources":33,"cover":67,"og":68,"expertise":69,"locales":70,"lang":72,"title":74,"description":75,"coverAlt":76,"metaTitle":77,"takeaways":78,"faq":84,"toc":103,"blocks":137,"others":520},"pimcore-erp-delta-sync","2026-10-02",12,"web",[9,10,11,12],"Pimcore","SAP integration","PIM ERP sync","Symfony Messenger",[14,15,16,17,18,19,20,21,22,23],"Pimcore ERP delta sync","Pimcore developer","Pimcore SAP integration","PIM ERP Schnittstelle","Pimcore SAP Schnittstelle","PIM ERP sync best practices","Pimcore Symfony Messenger","delta sync vs full sync","idempotent import Pimcore","Pimcore Infor integration",[25,27,30],{"name":9,"url":26},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPimcore",{"name":28,"url":29},"SAP ERP","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSAP_ERP",{"name":31,"url":32},"Product information management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_information_management",[34,37,40,43,46,49,52,55,58,61,64],{"title":35,"url":36},"Pimcore docs: Symfony Messenger","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FGetting_Started\u002FInstallation\u002FAdvanced_Installation_Topics\u002FSymfony_Messenger\u002F",{"title":38,"url":39},"Pimcore docs: Platform Versions","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FPimcore_Platform\u002FPlatform_Versions\u002F",{"title":41,"url":42},"Pimcore docs: Pimcore Editions","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FPimcore_Platform\u002FPimcore_Editions\u002F",{"title":44,"url":45},"Pimcore docs: Data Importer","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FData_Importer\u002F",{"title":47,"url":48},"Pimcore on GitHub: Release 2026.3.0","https:\u002F\u002Fgithub.com\u002Fpimcore\u002Fpimcore\u002Freleases\u002Ftag\u002Fv2026.3.0",{"title":50,"url":51},"Symfony docs: Messenger, Sync & Queued Message Handling","https:\u002F\u002Fsymfony.com\u002Fdoc\u002Fcurrent\u002Fmessenger.html",{"title":53,"url":54},"SAP Library: Change Pointer (Master Data Distribution)","https:\u002F\u002Fhelp.sap.com\u002Fdoc\u002Fsaphelp_nw73ehp1\u002F7.31.19\u002Fen-us\u002F4a\u002Fbb1e253536478be10000000a421937\u002Fcontent.htm?no_cache=true",{"title":56,"url":57},"SAP Library: Change Pointer (IDoc Interface\u002FALE)","https:\u002F\u002Fhelp.sap.com\u002Fdoc\u002Fsaphelp_em700_ehp01\u002F7.0.1\u002Fen-US\u002F12\u002F83e03c19758e71e10000000a114084\u002Fcontent.htm?no_cache=true",{"title":59,"url":60},"Infor docs: Infor ION and M3 BODs","https:\u002F\u002Fdocs.infor.com\u002Fm3cs\u002F10.2.3\u002Fen-us\u002Fm3csbom\u002Ffabsog\u002Fgoi1495809108914.html",{"title":62,"url":63},"Infor Developer Portal: Integration with ION","https:\u002F\u002Fdeveloper.infor.com\u002Ftutorials\u002Fintegration-with-ion",{"title":65,"url":66},"Debezium: open source distributed platform for change data capture","https:\u002F\u002Fdebezium.io\u002F","\u002Fimages\u002Fblog\u002Fpimcore-erp-delta-sync\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fpimcore-erp-delta-sync\u002Fog.jpg","b2b-ecommerce-developer",[71,72,73],"en","de","hu","Pimcore ERP Delta-Sync: Produktdaten zwischen SAP oder Infor, PIM und Shop","Produktdaten zwischen SAP oder Infor, Pimcore und Shop synchronisieren: Delta vs. Full Sync, Änderungserkennung, idempotente Importe, Messenger, Ownership, Replays.","Diagramm: Produktdaten fließen von einem SAP- oder Infor-ERP über einen Delta-Extrakt und eine Message Queue in Pimcore, wo Qualitätsprüfungen laufen, und weiter in den Shop.","Pimcore ERP Delta-Sync: Design, das hält · Balázs Csorba",[79,80,81,82,83],"Lege die Ownership pro Attribut fest, bevor du einen Import schreibst: Das ERP besitzt kaufmännische und logistische Daten, das PIM Inhalte und Klassifikation, und kein Feld wird von zwei Systemen geschrieben.","Nutze einen Delta-Sync für den Alltag und einen Full Sync als geplanten Abgleich, nicht als Normalfall. Erkenne Änderungen an der Quelle (SAP Change Pointer, Infor Sync BODs, CDC) und bestätige sie mit einem Content-Hash.","Nachrichten werden mindestens einmal zugestellt, also muss jeder Handler idempotent sein: ein stabiler Schlüssel pro Geschäftsereignis, Upsert statt Insert und ein Hash-Vergleich vor dem Schreiben.","Setze eine Queue zwischen ERP und PIM. In Pimcore ist das Symfony Messenger mit der Queue pimcore_core und einem Failure Transport, im Produktivbetrieb idealerweise auf RabbitMQ.","Qualitätsprüfungen, eine Failure Queue, die wirklich jemand beobachtet, und ein Replay-Befehl machen aus einem fragilen Import eine betreibbare Pipeline. Prüfe vorab aktuelle Pimcore-Version, Edition und Supportzeitraum.",[85,88,91,94,97,100],{"q":86,"a":87},"Wie synchronisiere ich Produktdaten von SAP nach Pimcore?","Hole Änderungen aus SAP als Ereignisse, statt jedes Mal den gesamten Materialstamm zu lesen, zum Beispiel mit Change Pointern (aktiviert in Transaktion BD61, verarbeitet vom Report RBDMIDOC), die IDocs erzeugen. Lege die Nachrichten auf eine Queue, importiere sie mit einem idempotenten Handler, der per Artikelnummer upsertet und Datensätze mit unverändertem Content-Hash überspringt, und behalte einen geplanten Full-Abgleich als Sicherheitsnetz.",{"q":89,"a":90},"Was ist der Unterschied zwischen Full Sync und Delta Sync?","Ein Full Sync liest und vergleicht bei jedem Lauf alle Datensätze. Er ist einfach und selbstheilend, aber langsam und belastet das ERP. Ein Delta Sync überträgt nur, was sich seit dem letzten Lauf geändert hat: schnell und günstig, kann aber unbemerkt driften, wenn eine Änderung verpasst wird. Ich fahre Delta im Alltag und wöchentlich oder nächtlich einen Full-Abgleich, um Drift zu finden.",{"q":92,"a":93},"Wie erkenne ich geänderte Datensätze zwischen ERP und PIM?","Es gibt vier Möglichkeiten: einen Änderungszeitstempel, Ereignisse an der Quelle wie SAP Change Pointer oder Infor Sync BODs, Change Data Capture auf der Datenbank und einen selbst berechneten Content-Hash. Zeitstempel und Ereignisse sagen dir, wo du hinschauen sollst; der Hash sagt, ob sich wirklich etwas Relevantes geändert hat. Ereignis oder Zeitstempel plus Hash liefert die besten Ergebnisse.",{"q":95,"a":96},"Kann Pimcore eine Message Queue für Importe nutzen?","Ja. Pimcore nutzt Symfony Messenger und definiert die Queue pimcore_core für Hintergrundaufgaben sowie einen optionalen Transport pimcore_failed_jobs für Fehler. Standard-Backend ist Doctrine, unterstützt werden außerdem AMQP (RabbitMQ) und Redis. Die Dokumentation empfiehlt RabbitMQ für den Produktivbetrieb, Worker starten mit bin\u002Fconsole messenger:consume pimcore_core.",{"q":98,"a":99},"Was bietet der Pimcore Data Importer für Delta-Importe?","Der Data Importer liest CSV-, JSON-, XML-, XLSX- und SQL-Quellen, läuft zeitgesteuert, per Kommandozeile oder per Push über eine Queue und enthält eine Delta-Prüfung, die unveränderte Datensätze überspringt, sowie ein Cleanup, das Objekte entfernt, die die Quelle verlassen haben. Er passt gut zu dateibasierten Feeds. Für ereignisgetriebene ERP-Flüsse mit Regeln pro Attribut ergänze ich meist eigene Messenger-Handler.",{"q":101,"a":102},"Wie finde ich einen Pimcore-Entwickler für eine SAP- oder ERP-Integration?","Suche jemanden, der einen produktiven Sync ausgeliefert hat und nicht nur eine Demo: Frag nach Ownership pro Attribut, Idempotenz, fehlgeschlagenen Nachrichten und Replays. Erfahrung mit Symfony Messenger, der ERP-Seite (IDocs, BODs, OData oder REST) und dem Shop am anderen Ende zählt mehr als ein einzelnes Tool.",[104,107,110,113,116,119,122,125,128,131,134],{"id":105,"title":106},"why-it-is-hard","Warum dieser Sync schwieriger ist, als er aussieht",{"id":108,"title":109},"ownership","Lege zuerst fest, wem welches Attribut gehört",{"id":111,"title":112},"data-flow","Der Datenfluss",{"id":114,"title":115},"delta-vs-full","Full vs. Delta Sync und wie du eine Änderung erkennst",{"id":117,"title":118},"idempotent-imports","Idempotente Importe",{"id":120,"title":121},"queues","Queues: Symfony Messenger in Pimcore",{"id":123,"title":124},"quality-gates","Datenqualitäts-Gates",{"id":126,"title":127},"monitoring-replays","Monitoring und Replays",{"id":129,"title":130},"verify-2026","Was du 2026 zu Pimcore prüfen solltest",{"id":132,"title":133},"my-approach","Wie ich es in Projekten angehe",{"id":135,"title":136},"sources","Quellen",[138,142,145,159,162,165,168,169,172,226,229,230,233,242,245,246,249,252,299,302,310,311,314,348,351,352,355,358,365,368,369,372,394,402,403,406,429,432,433,436,463,466,467,480,483,484],{"type":139,"content":140},"paragraph",[141],"Fast jedes B2B-Commerce-Projekt, an dem ich arbeite, hat dasselbe Rückgrat: Ein ERP wie SAP oder Infor kennt die Wahrheit über Artikel, Preise und Bestand, ein PIM wie Pimcore macht daraus etwas, das Kunden verstehen, und ein Shop verkauft es. Am Montag sind sich die drei Systeme einig, am Freitag nicht mehr. Wenn der Vertrieb fragt, warum der Shop einen alten Preis zeigt, lautet die Antwort fast nie „der Sync ist kaputt“. Sondern: Niemand hat entschieden, wem das Feld gehört, was als Änderung gilt oder was passiert, wenn eine Nachricht fehlschlägt.",{"type":139,"content":143},[144],"Dieser Artikel beschreibt das Design, das ich heute für den Sync zwischen ERP, Pimcore und Shop verwenden würde: zuerst die Ownership, dann ein Delta-Fluss mit einem Full-Abgleich daneben, Änderungserkennung, die sich nicht auf ein einzelnes Signal verlässt, idempotente Handler hinter einer Queue, Qualitätsprüfungen sowie Monitoring und Replays, die den Betrieb ermöglichen. Am Ende steht eine kurze Liste, was du zu Pimcore-Versionen und -Editionen prüfen solltest, bevor du dich festlegst, denn dieses Feld hat sich 2026 bewegt.",{"type":139,"content":146},[147,148,153,154,158],"Wenn du eine KI-Schicht auf sauberen Produktdaten planst, gilt dasselbe Fundament: Strukturierte, verlässliche Katalogdaten sind die Basis für ",{"tag":149,"to":150,"children":151},"link","\u002Fblog\u002Fagentic-commerce-protocols-ucp-acp-guide",[152],"Agentic-Commerce-Protokolle"," und ",{"tag":149,"to":155,"children":156},"\u002Fblog\u002Fgenerative-engine-optimization-audit",[157],"Generative Engine Optimization",".",{"type":160,"level":161,"id":105,"text":106},"heading",2,{"type":139,"content":163},[164],"Auf dem Papier ist es eine Leitung: aus dem ERP lesen, ins PIM schreiben, in den Shop veröffentlichen. In der Praxis stecken vier Probleme darin. Erstens Volumen und Takt: Ein Materialstamm mit Hunderttausenden Datensätzen lässt sich nicht alle paar Minuten komplett lesen, aber Preise und Bestände ändern sich ständig. Zweitens ist „geändert“ mehrdeutig: Ein ERP-Datensatz kann angefasst werden, ohne dass sich ein für den Shop relevantes Attribut ändert. Drittens scheitern Systeme auf halbem Weg: Ein Netzwerk-Timeout, ein gesperrtes Objekt oder ein Validierungsfehler hinterlässt teils aktualisierte, teils nicht aktualisierte Datensätze. Viertens schreiben oft zwei Systeme dasselbe Feld, und der letzte Schreibzugriff gewinnt zufällig.",{"type":139,"content":166},[167],"Jedes dieser Probleme hat eine langweilige, gut verstandene Antwort. Der Sinn des folgenden Designs ist, sie konsequent anzuwenden, damit sich der Sync auf einer Seite erklären und in zehn Minuten debuggen lässt.",{"type":160,"level":161,"id":108,"text":109},{"type":139,"content":170},[171],"Bevor ich Importcode schreibe, halte ich eine Ownership-Tabelle fest: jede Attributgruppe, welches System der einzige Schreiber ist und in welche Richtung die Daten fließen. Ein Feld hat genau einen Owner. Die anderen Systeme dürfen es lesen, anzeigen oder cachen, aber nie zurückschreiben. Diese eine Regel beseitigt die meisten „Ping-Pong“-Fehler, bei denen ein Import eine manuelle Änderung überschreibt oder ein Redakteur einen Wert korrigiert, der in der nächsten Nacht wieder überschrieben wird.",{"type":173,"head":174,"rows":183},"table",[175,177,179,181],[176],"Attributgruppe",[178],"Owner",[180],"Richtung",[182],"Regel",[184,193,201,210,217],[185,187,189,191],[186],"Artikelnummer, Basiseinheit, Status, Gewichte, GTIN",[188],"ERP",[190],"ERP → PIM",[192],"Im PIM-Editor schreibgeschützt",[194,196,197,199],[195],"Preise, Bestand, Verfügbarkeit, kundenspezifische Konditionen",[188],[198],"ERP → Shop",[200],"Umgeht oft das PIM oder wird live abgefragt",[202,204,206,208],[203],"Titel, Beschreibungen, Bilder, Dokumente, Übersetzungen",[205],"PIM",[207],"PIM → Shop",[209],"Nach der Pflege nie mehr aus dem ERP importiert",[211,213,214,215],[212],"Klassifikation, filterbare Attribute, Varianten, Cross-Selling",[205],[207],[216],"Einmal aus dem ERP befüllt, danach im PIM geführt",[218,220,222,224],[219],"Sortierung, SEO-URL, Merchandising-Flags",[221],"Shop",[223],"Bleibt im Shop",[225],"Nicht zurückgespielt",{"type":139,"content":227},[228],"Diese Aufteilung ist typisch, nicht universell. Manche Firmen halten lange Texte im ERP, andere Abmessungen im PIM. Entscheidend ist, dass deine Tabelle existiert, dass sie im Code durchgesetzt wird (der Import hat schlicht kein Mapping für Felder, die ihm nicht gehören) und dass die PIM-Oberfläche ERP-Felder als schreibgeschützt markiert, damit Redakteure nicht versuchen, sie zu ändern. Für die Grauzone, etwa einen Namen, der im ERP beginnt und im PIM veredelt wird, mach die Übergabe explizit: Der ERP-Wert befüllt das Feld einmal, und ein Flag hält fest, dass das PIM es ab dann besitzt.",{"type":160,"level":161,"id":111,"text":112},{"type":139,"content":231},[232],"Die Form, die ich nutze, ist eine kurze Kette mit einer Queue in der Mitte und einem Fehlerpfad daneben. Die ERP-Seite erzeugt Änderungsereignisse; ein dünner Extraktionsschritt normalisiert sie; eine Queue entkoppelt das Tempo des ERP vom Tempo von Pimcore; Pimcore prüft, reichert an und speichert; der Publish-Schritt versorgt den Shop.",{"type":234,"attrs":235,"inner":239,"caption":240},"diagram",{"viewBox":236,"role":237,"aria-labelledby":238},"0 0 740 290","img","d1-pimerp-t d1-pimerp-d","\u003Ctitle id=\"d1-pimerp-t\">Produktdatenfluss vom ERP zum Shop\u003C\u002Ftitle>\u003Cdesc id=\"d1-pimerp-d\">Fünf Kästen in einer Reihe: ERP, Extrakt, Queue, Pimcore PIM und Shop, mit Pfeilen dazwischen, und darunter ein gestrichelter Kasten für Failure Queue, Replay und Abgleich.\u003C\u002Fdesc>\u003Ctext x=\"20\" y=\"28\" class=\"d-title\">Produktdatenfluss vom ERP zum Shop\u003C\u002Ftext>\u003Ctext x=\"700\" y=\"28\" text-anchor=\"end\" class=\"d-label\">ERP → PIM → Shop\u003C\u002Ftext>\u003Crect x=\"20\" y=\"80\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"79\" y=\"114\" text-anchor=\"middle\" class=\"d-text\">ERP\u003C\u002Ftext>\u003Ctext x=\"79\" y=\"135\" text-anchor=\"middle\" class=\"d-small\">SAP oder Infor\u003C\u002Ftext>\u003Cpath d=\"M138 118 H155.5\" class=\"d-line\" \u002F>\u003Cpath d=\"M163.5 118 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"163.5\" y=\"80\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"222.5\" y=\"114\" text-anchor=\"middle\" class=\"d-text\">Extrakt\u003C\u002Ftext>\u003Ctext x=\"222.5\" y=\"135\" text-anchor=\"middle\" class=\"d-small\">Delta + Hash\u003C\u002Ftext>\u003Cpath d=\"M281.5 118 H299\" class=\"d-line\" \u002F>\u003Cpath d=\"M307 118 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"307\" y=\"80\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"366\" y=\"114\" text-anchor=\"middle\" class=\"d-text\">Queue\u003C\u002Ftext>\u003Ctext x=\"366\" y=\"135\" text-anchor=\"middle\" class=\"d-small\">Messenger\u003C\u002Ftext>\u003Cpath d=\"M425 118 H442.5\" class=\"d-line\" \u002F>\u003Cpath d=\"M450.5 118 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"450.5\" y=\"80\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"509.5\" y=\"114\" text-anchor=\"middle\" class=\"d-text\">Pimcore PIM\u003C\u002Ftext>\u003Ctext x=\"509.5\" y=\"135\" text-anchor=\"middle\" class=\"d-small\">Prüfen, anreichern\u003C\u002Ftext>\u003Cpath d=\"M568.5 118 H586\" class=\"d-line\" \u002F>\u003Cpath d=\"M594 118 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"594\" y=\"80\" width=\"118\" height=\"76\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"653\" y=\"114\" text-anchor=\"middle\" class=\"d-text\">Shop\u003C\u002Ftext>\u003Ctext x=\"653\" y=\"135\" text-anchor=\"middle\" class=\"d-small\">Publish\u003C\u002Ftext>\u003Cpath d=\"M509.5 156 V196\" class=\"d-line d-dash\" \u002F>\u003Cpath d=\"M366 156 V196\" class=\"d-line d-dash\" \u002F>\u003Crect x=\"20\" y=\"196\" width=\"700\" height=\"46\" rx=\"10\" class=\"d-box d-dash\" \u002F>\u003Ctext x=\"370\" y=\"224\" text-anchor=\"middle\" class=\"d-small\">Failure Queue · Replay · nächtlicher Full-Abgleich · Dashboards\u003C\u002Ftext>\u003Ctext x=\"370\" y=\"272\" text-anchor=\"middle\" class=\"d-label\">Das ERP besitzt kaufmännische Daten, das PIM die Inhalte\u003C\u002Ftext>",[241],"Der Sync als Kette mit einer Queue in der Mitte. Fehlerpfad, Replay-Werkzeuge und Abgleich laufen daneben und sind Teil des Designs, kein Nachgedanke.",{"type":139,"content":243},[244],"Drei Details machen diese Form tragfähig. Erstens ist der Extraktionsschritt die einzige Stelle, die SAP oder Infor kennt: Er spricht IDoc, BOD, OData oder REST und gibt ein einheitliches internes Nachrichtenformat aus. Ein Tausch des ERP oder ein zweites ERP betrifft dann eine Komponente. Zweitens ist die Queue eine echte Queue und keine Tabelle, die du pollst, sodass Back-Pressure und Retries von Infrastruktur gehandhabt werden, die du nicht selbst geschrieben hast. Drittens veröffentlicht das PIM nicht blind: Es hält einen Datensatz zurück, wenn er eine Prüfung nicht besteht, und der Shop sieht nur, was durchgekommen ist.",{"type":160,"level":161,"id":114,"text":115},{"type":139,"content":247},[248],"Ein Full Sync liest bei jedem Lauf jeden Datensatz und vergleicht ihn mit dem Bestand. Er ist einfach, heilt sich selbst und ist das richtige Werkzeug für die Erstbefüllung und den regelmäßigen Abgleich. Er ist aber auch langsam und belastet das ERP. Ein Delta Sync überträgt nur, was sich seit dem letzten erfolgreichen Lauf geändert hat. Er ist schnell, hat aber einen Fehlermodus, den ein Full Sync nicht hat: Eine verpasste Änderung bleibt verpasst. Deshalb nutze ich beides: Delta für den Alltag, einen geplanten Full-Abgleich, um Drift zu finden.",{"type":139,"content":250},[251],"Die schwierigere Frage ist, woher du weißt, dass sich etwas geändert hat. Es gibt vier gängige Signale, und keines reicht allein.",{"type":173,"head":253,"rows":262},[254,256,258,260],[255],"Signal",[257],"Funktionsweise",[259],"Stärke",[261],"Schwäche",[263,272,281,290],[264,266,268,270],[265],"Änderungszeitstempel",[267],"Abfrage der seit der letzten Wasserlinie geänderten Datensätze",[269],"Einfach zu bauen",[271],"Zeitversatz, rückdatierte Änderungen, keine Information über Löschungen",[273,275,277,279],[274],"Ereignisse an der Quelle",[276],"SAP Change Pointer erzeugen IDocs; Infor ION veröffentlicht Sync BODs vom Datenbesitzer",[278],"Meldet die Änderung selbst, inklusive Löschungen",[280],"Setup und Aufräumarbeit im ERP nötig",[282,284,286,288],[283],"Change Data Capture",[285],"Ein Tool wie Debezium streamt zeilenweise Änderungen in Commit-Reihenfolge",[287],"Vollständig und geordnet",[289],"Arbeitet auf Tabellen-, nicht auf Geschäftsebene",[291,293,295,297],[292],"Content-Hash",[294],"Du hashst die normalisierten, relevanten Attribute und vergleichst",[296],"Ignoriert irrelevante Zugriffe, wiederholbar",[298],"Berechnung und Speicherung liegen bei dir",{"type":139,"content":300},[301],"Auf der SAP-Seite sind Change Pointer der klassische Mechanismus für Stammdaten. Sie werden generell in Transaktion BD61 und pro Nachrichtentyp aktiviert, zum Beispiel MATMAS für Materialien. Der Report RBDMIDOC (Transaktion BD21) liest unverarbeitete Pointer, erzeugt IDocs und markiert die Pointer als verarbeitet, und RBDCPCLR (BD22) entfernt verarbeitete, damit die Tabellen BDCP und BDCPS klein bleiben. Plane beide Jobs ein; ein Delta-Feed, der nie aufgeräumt wird, wird zum eigenen Performanceproblem. Auf der Infor-Seite routet ION Business Object Documents, und ein Sync BOD wird vom Besitzer der Daten an jede Anwendung gesendet, die die Änderung braucht.",{"type":139,"content":303},[304,305,309],"Mein Standard ist deshalb eine ",{"tag":306,"children":307},"strong",[308],"zweistufige Prüfung",": Ein Ereignis oder eine Wasserlinie sagt mir, welche Datensätze ich ansehe, und ein Hash der normalisierten, eigenen Attribute sagt mir, ob ich schreibe. Normalisiere vor dem Hashen: Leerzeichen entfernen, Zahlenformate und Nachkommastellen vereinheitlichen, Listen sortieren und Felder weglassen, die das ERP ohne fachliche Bedeutung anfasst. Sonst löst ein Zeitstempel-Update im ERP tausende sinnlose Schreibvorgänge und Neuindizierungen in Pimcore aus.",{"type":160,"level":161,"id":117,"text":118},{"type":139,"content":312},[313],"Messaging-Systeme liefern mindestens einmal zu. Symfony dokumentiert das klar: Eine Nachricht kann mehr als einmal zugestellt werden, deshalb müssen Handler wiederholt sicher laufen. Mit Retries, einem Worker-Neustart und einem Replay wird irgendwann jeder Datensatz zweimal verarbeitet. Idempotenz ist keine Optimierung, sondern eine Anforderung.",{"type":315,"ordered":316,"items":317},"list",false,[318,323,328,333,338,343],[319,322],{"tag":306,"children":320},[321],"Stabiler Schlüssel pro Geschäftsereignis."," Leite den Schlüssel aus der fachlichen Bedeutung ab (Artikelnummer plus ERP-Änderungsnummer oder Content-Hash), nie aus einer beim Senden erzeugten Zufalls-ID.",[324,327],{"tag":306,"children":325},[326],"Upsert per natürlichem Schlüssel."," Suche das Pimcore-Objekt per Artikelnummer und aktualisiere oder erzeuge es in einem Handler. Nie blind anlegen.",[329,332],{"tag":306,"children":330},[331],"Hash vor dem Schreiben."," Entspricht der Hash der eingehenden eigenen Attribute dem gespeicherten, tue nichts. Das verhindert auch Neuindizierungen und Cache-Invalidierungs-Stürme.",[334,337],{"tag":306,"children":335},[336],"Reihenfolge-Toleranz."," Führe eine Version oder einen Zeitstempel der Quelle mit und ignoriere Nachrichten, die älter sind als der gespeicherte Stand. Queues garantieren keine globale Reihenfolge.",[339,342],{"tag":306,"children":340},[341],"Löschungen als Zustand."," Bilde Deaktivierung und Löschung als Statuswechsel mit Quellversion ab, nicht als fehlenden Datensatz, damit sie Replays überstehen.",[344,347],{"tag":306,"children":345},[346],"Datenbank-Constraints als letzte Verteidigung."," Ein Unique-Key auf der Artikelnummer macht aus einem Rennen zwischen zwei Workern einen sichtbaren Fehler.",{"type":139,"content":349},[350],"Der Pimcore Data Importer folgt bei dateibasierten Feeds derselben Idee: Sein Resolver entscheidet, ob ein Datensatz ein bestehendes Objekt aktualisiert oder ein neues anlegt, und eine Delta-Prüfung überspringt unveränderte Datensätze. Ist dein Feed eine CSV- oder JSON-Datei aus dem ERP, reicht das vielleicht schon. Zu eigenen Handlern greife ich, wenn der Fluss ereignisgetrieben ist, wenn die Ownership pro Attribut Logik braucht oder wenn eine ERP-Nachricht auf mehrere Pimcore-Objekte auffächert.",{"type":160,"level":161,"id":120,"text":121},{"type":139,"content":353},[354],"Pimcore nutzt Symfony Messenger für Hintergrundarbeit. Die Dokumentation definiert die Queue pimcore_core für Hintergrundaufgaben und einen optionalen Transport pimcore_failed_jobs für fehlgeschlagene Nachrichten. Das Backend wählt die Umgebungsvariable PIMCORE_MESSENGER_TRANSPORT_DSN_PREFIX: Doctrine ist der Standard, unterstützt werden AMQP (RabbitMQ) und Redis. Laut Dokumentation ist RabbitMQ die empfohlene Message Queue für den Produktivbetrieb, und Worker laufen als `bin\u002Fconsole messenger:consume pimcore_core`, überwacht von supervisor oder systemd.",{"type":139,"content":356},[357],"Für einen ERP-Sync würde ich neben pimcore_core einen eigenen Transport anlegen, damit ein Schwall von Preisupdates die Hintergrundjobs der Redakteure nicht aushungert, und Worker pro Queue dimensionieren. Auf Symfony-Seite wird das Retry-Verhalten pro Transport konfiguriert (max_retries, delay, multiplier, max_delay, jitter); standardmäßig wird eine Nachricht dreimal mit exponentiellem Backoff wiederholt, bevor sie im Failure Transport landet. Überlege, welche Fehler einen Retry verdienen: Ein gesperrtes Objekt oder ein Timeout ja, ein Validierungsfehler nein, denn ein Retry verzögert dann nur den Alarm.",{"type":359,"variant":360,"title":361,"body":362},"callout","tip","Packe nicht den ganzen ERP-Datensatz in die Nachricht",[363],[364],"Sende eine kleine Nachricht mit Schlüssel, Quellversion und Hash und lass den Handler bei Bedarf den vollständigen Datensatz holen. Große Payloads blähen die Queue auf, und beim Retry kann die Payload schon veraltet sein. Eine schlanke Nachricht plus frisches Lesen lässt sich leichter wiederholen und leichter nachvollziehen.",{"type":139,"content":366},[367],"Halte die Queue ehrlich. messenger:stats zeigt, wie viele Nachrichten pro Transport warten, und der Failure Transport nützt nur, wenn jemand hinschaut, womit wir beim Monitoring sind.",{"type":160,"level":161,"id":123,"text":124},{"type":139,"content":370},[371],"Ein Sync, der schlechte Daten treu kopiert, ist schlimmer als einer, der stoppt. Ich setze Gates zwischen „empfangen“ und „veröffentlicht“, und ein Datensatz, der ein Gate nicht besteht, wird zurückgehalten und gemeldet, weder verworfen noch veröffentlicht.",{"type":315,"ordered":316,"items":373},[374,379,384,389],[375,378],{"tag":306,"children":376},[377],"Struktur-Gate:"," Pflichtfelder vorhanden, Typen und Einheiten gültig, referenzierte Objekte (Marke, Kategorie, Einheit) existieren.",[380,383],{"tag":306,"children":381},[382],"Fach-Gate:"," sinnvolle Wertebereiche (Preis über null, Gewicht nicht das Zehntausendfache des Medians), plausible Statusübergänge, keine plötzliche Massendeaktivierung.",[385,388],{"tag":306,"children":386},[387],"Vollständigkeits-Gate:"," Ein Produkt wird nur in den Shop veröffentlicht, wenn Pflichtinhalte (Titel, Bild, Übersetzung) in jeder erforderlichen Sprache vorliegen.",[390,393],{"tag":306,"children":391},[392],"Mengen-Gate:"," Würde ein Lauf weit mehr Datensätze ändern oder löschen als üblich, pausiere und frage nach Bestätigung, statt ihn anzuwenden. So fängst du eine ERP-Fehlkonfiguration ab, bevor sie deinen Shop leert.",{"type":139,"content":395},[396,397,401],"Gates liefern dir ein klares Statusmodell: empfangen, gültig, angereichert, veröffentlicht, zurückgehalten. Wenn du ein LLM zur Anreicherung einsetzt, etwa für Beschreibungsentwürfe oder Klassifikation, behandle seine Ausgabe als weiteren Gate-Input und teste es wie jedes Modell-Feature, wie in ",{"tag":149,"to":398,"children":399},"\u002Fblog\u002Fllm-evals-for-product-features",[400],"LLM-Evals für Produkt-Features"," beschrieben.",{"type":160,"level":161,"id":126,"text":127},{"type":139,"content":404},[405],"Der Maßstab für einen Sync ist nicht, wie er an guten Tagen läuft, sondern wie schnell du dich an schlechten erholst. Vor dem Go-live will ich vier Dinge haben.",{"type":315,"ordered":407,"items":408},true,[409,414,419,424],[410,413],{"tag":306,"children":411},[412],"Eine Failure Queue mit Verantwortlichem."," Fehlgeschlagene Nachrichten landen in einem eigenen Transport (in Pimcore pimcore_failed_jobs). Prüfen mit messenger:failed:show, erneut ausführen mit messenger:failed:retry, verwerfen mit messenger:failed:remove. Alarmiere, wenn die Anzahl länger als eine festgelegte Zeit über null liegt.",[415,418],{"tag":306,"children":416},[417],"Lag und Durchsatz."," Queue-Tiefe pro Transport, Alter der ältesten Nachricht und Datensätze pro Minute. Eine flache Linie ist so verdächtig wie eine Spitze.",[420,423],{"tag":306,"children":421},[422],"Ein Replay-Befehl."," Zu einer Artikelnummer, einem Zeitfenster oder einer ERP-Änderungsnummer neu extrahieren und neu senden. Weil Handler idempotent sind, lassen sich Replays gefahrlos in Produktion ausführen.",[425,428],{"tag":306,"children":426},[427],"Ein Abgleichsbericht."," Der volle Vergleich zwischen ERP und PIM, der Unterschiede auflistet, nicht nur bestanden oder nicht. Nächtlich oder wöchentlich laufen lassen und den Trend prüfen: Eine wachsende Zahl an Unterschieden heißt, dass ein Delta-Signal verpasst wird.",{"type":139,"content":430},[431],"Logge pro Nachricht eine strukturierte Zeile: Schlüssel, Quellversion, Hash, Ergebnis (geschrieben, unverändert übersprungen, von Gate gehalten, fehlgeschlagen) und Dauer. Die meisten Supportfragen werden dann zu einer Suche statt einer Untersuchung.",{"type":160,"level":161,"id":129,"text":130},{"type":139,"content":434},[435],"Pimcore hat sein Releasemodell kürzlich geändert, und einiges davon betrifft die Planung. Diese Punkte würde ich vor Projektstart gegen die aktuelle Dokumentation prüfen, statt sie aus dem Gedächtnis anzunehmen.",{"type":315,"ordered":407,"items":437},[438,443,448,453,458],[439,442],{"tag":306,"children":440},[441],"Plattformversion und Supportzeitraum."," Pimcore-Versionen folgen Major.Minor, Minor-Versionen erscheinen etwa quartalsweise, und seit 2026.1 tragen alle Module die Versionsnummer der Plattform. Das Release 2026.3 erschien am 29. September 2026 und ist kein LTS. Der Community-Support für eine Plattformversion endet mit dem Release der nächsten.",[444,447],{"tag":306,"children":445},[446],"LTS-Ziel."," Die Dokumentation nennt 2025.4 als LTS bis Dezember 2028 und 2024.4 bis Dezember 2026. Für einen langlebigen B2B-Shop würde ich auf eine LTS-Linie setzen oder regelmäßige Minor-Upgrades einplanen.",[449,452],{"tag":306,"children":450},[451],"Edition und Module."," Data Hub und Data Importer sind in der Community Edition aufgeführt; Professional ergänzt den TinyMCE-Editor; Enterprise enthält alle Module, zum Beispiel Workflow Designer und E-Commerce Framework. Prüfe, auf welche Module sich dein Design tatsächlich stützt und welche Edition und Lizenz sie brauchen.",[454,457],{"tag":306,"children":455},[456],"Release Notes, nicht nur Versionsnummern."," Die Notes zu 2026.3 erwähnen Sicherheitsfixes und die Entfernung alter Admin-Controller zugunsten der Studio API. Wenn du eigenen Admin-Code oder Integrationen hast, lies zuerst die Upgrade Notes.",[459,462],{"tag":306,"children":460},[461],"Messenger-Setup."," Prüfe den Transport-DSN-Prefix, die Failure-Transport-Konfiguration und wie Worker in deinem Hosting überwacht werden, denn hier entscheidet sich die Zuverlässigkeit des Syncs.",{"type":139,"content":464},[465],"Preise und Details von Supportverträgen nenne ich hier bewusst nicht: Sie hängen von deiner Vereinbarung mit Pimcore oder deinem Partner ab und ändern sich.",{"type":160,"level":161,"id":132,"text":133},{"type":139,"content":468},[469,470,474,475,479],"Dieses Design ist meine Denkweise für einen Pimcore-SAP-Delta-Sync, und ich habe ein Referenzprojekt mit Pimcore und SAP Delta-Sync, das du auf der ",{"tag":149,"to":471,"children":472},"\u002Freferences",[473],"Referenzseite"," findest. Wenn du einen Pimcore-Entwickler für eine SAP- oder Infor-Integration, eine PIM-ERP-Schnittstelle oder ein Review eines driftenden Syncs suchst, schau dir mein ",{"tag":149,"to":476,"children":477},"\u002Fexpertise\u002Fb2b-ecommerce-developer",[478],"Profil als B2B-E-Commerce-Entwickler"," an.",{"type":139,"content":481},[482],"Mein Rat in Kurzform: Schreib zuerst die Ownership-Tabelle, mach jeden Handler idempotent, hashe, was dir gehört, setze eine Queue und einen Fehlerpfad in die Mitte und übe den Replay, bevor du ihn brauchst.",{"type":160,"level":161,"id":135,"text":136},{"type":315,"ordered":407,"items":485},[486,490,493,496,499,502,505,508,511,514,517],[487],{"tag":488,"href":36,"children":489},"a",[35],[491],{"tag":488,"href":39,"children":492},[38],[494],{"tag":488,"href":42,"children":495},[41],[497],{"tag":488,"href":45,"children":498},[44],[500],{"tag":488,"href":48,"children":501},[47],[503],{"tag":488,"href":51,"children":504},[50],[506],{"tag":488,"href":54,"children":507},[53],[509],{"tag":488,"href":57,"children":510},[56],[512],{"tag":488,"href":60,"children":513},[59],[515],{"tag":488,"href":63,"children":516},[62],[518],{"tag":488,"href":66,"children":519},[65],[521,607,664,752],{"slug":522,"published":5,"minutes":523,"category":7,"tags":524,"keywords":529,"about":540,"sources":549,"cover":601,"og":602,"expertise":69,"locales":603,"lang":72,"title":604,"description":605,"coverAlt":606},"european-accessibility-act-b2b-shop",13,[525,526,527,528],"European Accessibility Act","BFSG","WCAG 2.2","B2B e-commerce",[530,531,532,533,534,535,536,537,538,539],"European Accessibility Act B2B shop","BFSG B2B Onlineshop","Barrierefreiheit Onlineshop","Spryker barrierefrei","barrierefrei Webshop","BaFG Österreich Webshop","EN 301 549 WCAG 2.2","BFSG Kleinstunternehmen Ausnahme","Pimcore TYPO3 Barrierefreiheit","EAA e-commerce checklist",[541,543,546],{"name":525,"url":542},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEuropean_Accessibility_Act",{"name":544,"url":545},"Web Content Accessibility Guidelines","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWeb_Content_Accessibility_Guidelines",{"name":547,"url":548},"E-commerce","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FE-commerce",[550,553,556,559,562,565,568,571,574,577,580,583,586,589,592,595,598],{"title":551,"url":552},"BFSG section 1: purpose and scope (gesetze-im-internet.de)","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__1.html",{"title":554,"url":555},"BFSG section 2: definitions, consumer, microenterprise, e-commerce services","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__2.html",{"title":557,"url":558},"BFSG section 3: accessibility and the microenterprise exemption","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__3.html",{"title":560,"url":561},"BFSG section 14: duties of the service provider","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__14.html",{"title":563,"url":564},"BFSG section 32: rights of consumers and associations in the administrative procedure","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__32.html",{"title":566,"url":567},"BFSG section 37: fines","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__37.html",{"title":569,"url":570},"BFSG section 38: transitional provisions","https:\u002F\u002Fwww.gesetze-im-internet.de\u002Fbfsg\u002F__38.html",{"title":572,"url":573},"Bundesfachstelle Barrierefreiheit: FAQ on the BFSG (B2B, microenterprises, EN 301 549)","https:\u002F\u002Fwww.bundesfachstelle-barrierefreiheit.de\u002FDE\u002FFachwissen\u002FProdukte-und-Dienstleistungen\u002FBarrierefreiheitsstaerkungsgesetz\u002FFAQ\u002Ffaq_node.html",{"title":575,"url":576},"AccessibleEU: The European accessibility standard EN 301 549 has been updated (7 September 2026)","https:\u002F\u002Faccessible-eu-centre.ec.europa.eu\u002Fcontent-corner\u002Fnews\u002Feuropean-accessibility-standard-en-301-549-has-been-updated-2026-09-07_en",{"title":578,"url":579},"W3C: Web Content Accessibility Guidelines (WCAG) 2.2","https:\u002F\u002Fwww.w3.org\u002FTR\u002FWCAG22\u002F",{"title":581,"url":582},"Deque: Automated testing identifies 57 percent of digital accessibility issues","https:\u002F\u002Fwww.deque.com\u002Fblog\u002Fautomated-testing-study-identifies-57-percent-of-digital-accessibility-issues\u002F",{"title":584,"url":585},"sitebrunch: What is the market surveillance authority for accessibility (MLBF)?","https:\u002F\u002Fwww.sitebrunch.com\u002Fnews\u002Fmlbf-marktueberwachungsstelle-barrierefreiheit",{"title":587,"url":588},"Marcus Herrmann: June 2026, how the MLBF intends to check","https:\u002F\u002Fmarcus-herrmann.com\u002Fblog\u002Fmlbf-verraet-wie-sie-pruefen-will",{"title":590,"url":591},"axes4: BFSG in practice, what has happened since the deadline (2026)","https:\u002F\u002Fwww.axes4.com\u002Fde\u002Fblog\u002Fpost\u002F2026\u002Fbfsg-in-der-praxis-was-sich-seit-dem-stichtag-getan-hat",{"title":593,"url":594},"ODC Legal: BFSG for websites, what companies must check in 2026","https:\u002F\u002Fwww.odclegal.de\u002Fblog\u002Fbfsg-website-pflicht",{"title":596,"url":597},"WKO: Information on the Austrian Barrierefreiheitsgesetz","https:\u002F\u002Fwww.wko.at\u002Fce-kennzeichnung-normen\u002Finformationen-zum-barrierefreiheitsgesetz",{"title":599,"url":600},"Web Crossing: One year of the Barrierefreiheitsgesetz, where online shops must improve","https:\u002F\u002Fwww.web-crossing.com\u002Fnews\u002Fdetail\u002Fein-jahr-barrierefreiheitsgesetz-wo-onlineshops-und-websites-jetzt-nachbessern-muessen\u002F","\u002Fimages\u002Fblog\u002Feuropean-accessibility-act-b2b-shop\u002Fcover.webp","\u002Fimages\u002Fblog\u002Feuropean-accessibility-act-b2b-shop\u002Fog.jpg",[71,72,73],"European Accessibility Act im B2B-Shop: was Spryker-, Pimcore- und TYPO3-Teams beheben müssen","Gilt der European Accessibility Act für B2B-Shops? Anwendungsbereich von BFSG und BaFG, Kleinstunternehmen-Ausnahme, Durchsetzung 2026, WCAG 2.2 und Fahrplan.","Diagramm: Ein B2B-Shop verzweigt in die Verbraucher-Frage nach BFSG und BaFG, die WCAG-2.2-AA-Konformität, die Barrierefreiheitserklärung und die Marktüberwachung.",{"slug":608,"published":5,"minutes":6,"category":7,"tags":609,"keywords":613,"about":624,"sources":631,"cover":658,"og":659,"expertise":69,"locales":660,"lang":72,"title":661,"description":662,"coverAlt":663},"headless-product-configurator-b2b",[610,528,611,612],"Product configurator","Nuxt","Headless commerce",[614,615,616,617,618,619,620,621,622,623],"B2B product configurator","Produktkonfigurator","Produktkonfigurator TYPO3","B2B Konfigurator","headless product configurator","CPQ configure price quote","rule engine vs constraint solver","Nuxt Spryker Glue API","product configurator 100000 variants","accessible product configurator",[625,627,629],{"name":610,"url":626},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_configurator",{"name":612,"url":628},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHeadless_commerce",{"name":611,"url":630},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FNuxt",[632,634,637,640,643,646,649,652,655],{"title":633,"url":626},"Wikipedia: Knowledge-based configuration (product configurator)",{"title":635,"url":636},"Google OR-Tools: The CP-SAT solver","https:\u002F\u002Fdevelopers.google.com\u002Foptimization\u002Fcp\u002Fcp_solver",{"title":638,"url":639},"Spryker documentation: Glue API, Product Configuration feature integration","https:\u002F\u002Fdocs.spryker.com\u002Fdocs\u002Fscos\u002Fdev\u002Ffeature-integration-guides\u002F202108.0\u002Fglue-api\u002Fglue-api-product-configuration-feature-integration.html",{"title":641,"url":642},"OWASP: Input Validation Cheat Sheet","https:\u002F\u002Fcheatsheetseries.owasp.org\u002Fcheatsheets\u002FInput_Validation_Cheat_Sheet.html",{"title":644,"url":645},"web.dev: Virtualize large lists","https:\u002F\u002Fweb.dev\u002Farticles\u002Fvirtualize-long-lists-react-window",{"title":647,"url":648},"W3C: Understanding SC 3.3.1 Error Identification (WCAG 2.2)","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FWCAG22\u002FUnderstanding\u002Ferror-identification.html",{"title":650,"url":651},"W3C: Understanding SC 4.1.3 Status Messages (WCAG 2.2)","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FWCAG22\u002FUnderstanding\u002Fstatus-messages.html",{"title":653,"url":654},"W3C: Understanding SC 2.5.8 Target Size (Minimum) (WCAG 2.2)","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FWCAG22\u002FUnderstanding\u002Ftarget-size-minimum.html",{"title":656,"url":657},"W3C WAI-ARIA Authoring Practices: Combobox pattern","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FARIA\u002Fapg\u002Fpatterns\u002Fcombobox\u002F","\u002Fimages\u002Fblog\u002Fheadless-product-configurator-b2b\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fheadless-product-configurator-b2b\u002Fog.jpg",[71,72,73],"Headless B2B-Produktkonfigurator: Regeln, Preise und Nuxt auf einer Commerce-API","So baust du einen B2B-Produktkonfigurator headless: Regelwerk oder Solver, wo Regeln liegen, Preise auf dem Server, Nuxt auf Commerce-API, TYPO3, 100k+ Varianten.","Diagramm: Ein Nuxt-Frontend spricht mit einem Konfigurationsdienst, der Regeln aus dem PIM und Preise aus dem ERP liest und eine validierte Konfiguration an die Commerce-API übergibt.",{"slug":665,"published":5,"minutes":523,"category":7,"tags":666,"keywords":669,"about":680,"sources":687,"cover":745,"og":746,"expertise":747,"locales":748,"lang":72,"title":749,"description":750,"coverAlt":751},"nuxt-core-web-vitals-performance",[667,611,668,547],"Core Web Vitals","Performance",[670,671,672,673,674,675,676,677,678,679],"Core Web Vitals Nuxt","Nuxt performance optimization","improve LCP Nuxt","INP Nuxt hydration","fix CLS Vue","Nuxt lazy hydration","Nuxt Image LCP","Nuxt Scripts third-party scripts","Nuxt prerender vs SSR vs ISR","Core Web Vitals e-commerce",[681,683,684],{"name":667,"url":682},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCore_Web_Vitals",{"name":611,"url":630},{"name":685,"url":686},"Vue.js","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FVue.js",[688,691,694,697,700,703,706,709,712,715,718,721,724,727,730,733,736,739,742],{"title":689,"url":690},"web.dev: Web Vitals","https:\u002F\u002Fweb.dev\u002Farticles\u002Fvitals",{"title":692,"url":693},"web.dev: Largest Contentful Paint (LCP)","https:\u002F\u002Fweb.dev\u002Farticles\u002Flcp",{"title":695,"url":696},"web.dev: Optimize Largest Contentful Paint","https:\u002F\u002Fweb.dev\u002Farticles\u002Foptimize-lcp",{"title":698,"url":699},"web.dev: Interaction to Next Paint (INP)","https:\u002F\u002Fweb.dev\u002Farticles\u002Finp",{"title":701,"url":702},"web.dev: Optimize Cumulative Layout Shift","https:\u002F\u002Fweb.dev\u002Farticles\u002Foptimize-cls",{"title":704,"url":705},"web.dev: Optimize long tasks","https:\u002F\u002Fweb.dev\u002Farticles\u002Foptimize-long-tasks",{"title":707,"url":708},"Chrome for Developers: Chrome UX Report (CrUX)","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fcrux",{"title":710,"url":711},"Chrome for Developers: CrUX methodology","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fcrux\u002Fmethodology",{"title":713,"url":714},"GitHub: GoogleChrome\u002Fweb-vitals","https:\u002F\u002Fgithub.com\u002FGoogleChrome\u002Fweb-vitals",{"title":716,"url":717},"Nuxt docs: Rendering modes","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Frendering",{"title":719,"url":720},"Nuxt docs: Components (Lazy prefix, delayed hydration, client components)","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Fdirectory-structure\u002Fapp\u002Fcomponents",{"title":722,"url":723},"Nuxt docs: Experimental features (lazyHydration, payloadExtraction)","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fexperimental-features",{"title":725,"url":726},"Nuxt docs: Data fetching (pick, transform, lazy)","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fdata-fetching",{"title":728,"url":729},"Nuxt blog: Nuxt 4.5","https:\u002F\u002Fnuxt.com\u002Fblog\u002Fv4-5",{"title":731,"url":732},"GitHub: Nuxt releases","https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Freleases",{"title":734,"url":735},"Nuxt Image: NuxtImg","https:\u002F\u002Fimage.nuxt.com\u002Fusage\u002Fnuxt-img",{"title":737,"url":738},"Nuxt Fonts module","https:\u002F\u002Fnuxt.com\u002Fmodules\u002Ffonts",{"title":740,"url":741},"Nuxt Scripts: Getting started","https:\u002F\u002Fscripts.nuxt.com\u002Fdocs\u002Fgetting-started",{"title":743,"url":744},"Nuxt Scripts: Script triggers","https:\u002F\u002Fscripts.nuxt.com\u002Fdocs\u002Fguides\u002Fscript-triggers","\u002Fimages\u002Fblog\u002Fnuxt-core-web-vitals-performance\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fnuxt-core-web-vitals-performance\u002Fog.jpg","vue-nuxt-developer",[71,72,73],"Core Web Vitals für Nuxt-Sites und Shops: LCP, INP und CLS beheben","So behebst du LCP, INP und CLS in Nuxt-4-Sites und Shops: Bilder, Hydration, Fonts, Drittanbieter-Skripte, Prerender vs. SSR vs. ISR und Messung mit echten Nutzern.","Diagramm: ein Nuxt-Seitenaufruf vom Server-HTML über Hero-Bild, Hydration und Interaktion, mit den Schwellenwerten für LCP, INP und CLS an den Stufen.",{"slug":753,"published":754,"minutes":755,"category":7,"tags":756,"keywords":762,"about":771,"sources":780,"cover":793,"og":794,"expertise":747,"locales":795,"lang":72,"title":796,"description":797,"coverAlt":798},"home-assistant-ev-charging-energy-manager","2026-09-29",9,[757,758,759,760,761],"Home Assistant","EPEX Spot","Energy prices","Tesla","Energy management",[763,764,765,766,767,768,769,770],"EPEX Austria prices","spot tariff Austria EV charging","Home Assistant EV charging","cheapest hours charging","day-ahead price Austria","negative electricity prices Austria","Tesla charging spot prices","load management 3 phase",[772,775,777],{"name":773,"url":774},"EPEX SPOT","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEPEX_SPOT",{"name":757,"url":776},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHome_Assistant",{"name":778,"url":779},"Load management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLoad_management",[781,784,787,790],{"title":782,"url":783},"aWATTar Austria: market data API","https:\u002F\u002Fwww.awattar.at\u002Fservices\u002Fapi",{"title":785,"url":786},"EPEX SPOT: market results","https:\u002F\u002Fwww.epexspot.com\u002Fen\u002Fmarket-results",{"title":788,"url":789},"Home Assistant developer docs: apps","https:\u002F\u002Fdevelopers.home-assistant.io\u002Fdocs\u002Fapps\u002F",{"title":791,"url":792},"Home Assistant: Tesla Fleet integration","https:\u002F\u002Fwww.home-assistant.io\u002Fintegrations\u002Ftesla_fleet\u002F","\u002Fimages\u002Fblog\u002Fhome-assistant-ev-charging-energy-manager\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fhome-assistant-ev-charging-energy-manager\u002Fog.jpg",[71,72,73],"Laden nach EPEX-Preisen in Österreich: was meine Home-Assistant-App spart","Ein Jahr stündlicher EPEX-Preise für Österreich, nachgespielt für einen Tesla und einen Boiler: Laden in den günstigsten Stunden kostet 6,5 statt 18,9 ct\u002FkWh, knapp 590 € im Jahr, ohne 20-A-Sicherung zu sprengen.","Titelbild: drei Balken vergleichen 18,9, 13,1 und 6,5 ct\u002FkWh für Laden um 18:00, über Nacht und in den günstigsten Stunden.",1791009037487]