Wer im Alltag mit einem gewachsenen Shopware-6-Katalog arbeitet, kommt früher oder später an den Punkt, an dem er Shopware 6 Artikel löschen muss – sei es, weil ein Import fehlgeschlagen ist, ein Sortiment ausgemistet wird oder ein Testkatalog wieder verschwinden soll. Im Admin geht das für einzelne Produkte in Sekunden, bei mehreren tausend Artikeln wird es schnell unübersichtlich. Dieser Artikel zeigt den offiziellen Weg über das Admin-Backend, den dokumentierten SQL-Weg direkt in der Datenbank, was beim Löschen tatsächlich mitgelöscht wird (und was nicht), welche Store-Plugins wirklich eine Löschfunktion mitbringen, und welche Fehlerbilder aus der Community bekannt sind.
- Shopware 6 Artikel löschen im Admin – Einzeln und in Mengen (Lösung A)
- Shopware 6 Artikel löschen per SQL direkt in der Datenbank
- Shopware 6 Artikel löschen: Was wird automatisch mitgelöscht?
- Shopware 6 Artikel löschen: Nacharbeiten – Index und Medien aufräumen
- Shopware 6 Artikel löschen über die Sync-API
- Shopware 6 Artikel löschen mit Store-Plugins (Lösung B)
- Shopware 6 Artikel löschen: Bekannte Fehlerbilder aus der Community
1. Shopware 6 Artikel löschen im Admin – Einzeln und in Mengen (Lösung A)
Der naheliegendste und für die meisten Fälle auch der richtige Weg ist das Admin-Backend selbst. Ein einzelnes Produkt wird unter Katalog → Produkte über das Kontextmenü (die drei Punkte am Zeilenende) und dann Löschen entfernt. Shopware weist in der eigenen Dokumentation ausdrücklich darauf hin, dass bereits bestellte Produkte besser deaktiviert statt gelöscht werden sollten, damit die Bestellhistorie nachvollziehbar bleibt.


Für die Massenlöschung markiert man mehrere Produkte per Checkbox in der Listenansicht. Laut aktueller Shopware-Dokumentation lassen sich dabei bis zu 1000 Produkte gleichzeitig auswählen, auch seitenübergreifend – man muss also nicht mehr Seite für Seite einzeln vorgehen. Technisch löst der Bulk-Löschvorgang im Admin-Grid einen Batch-Sync-Delete über die Admin-API aus (repository.syncDeleted()), was deutlich stabiler läuft als viele Einzel-Löschanfragen nacheinander.
Zwei Dinge sollte man dabei im Hinterkopf behalten:
- Die Grid-Pagination selbst bietet als größte Seitengröße weiterhin 100 Einträge (Auswahl 10/25/50/75/100) – die 1000er-Grenze bezieht sich auf die maximale Gesamtauswahl über mehrere Seiten hinweg, nicht auf eine „alle Seiten auswählen“-Schaltfläche.
- Der früher verbreitete Trick, Produkte in 100er-Häppchen seitenweise zu markieren und zu löschen, weil angeblich nur 100 auf einmal gingen, ist überholt. Er schadet nicht, ist aber schlicht nicht mehr nötig – als historische Randnotiz bleibt er höchstens für ältere Shopware-Versionen relevant.

Ein natives CLI-Kommando zum Löschen von Produkten gibt es dagegen nicht. Ein Live-Check auf der Referenzinstanz (bin/console list product, Shopware 6.7.9.0) zeigt im product-Namespace ausschließlich product-export:generate – kein product:delete oder Ähnliches. Wer Löschvorgänge automatisieren will, muss also entweder auf die Admin-API, die weiter unten beschriebene Sync-API oder direkt auf SQL ausweichen.
2. Shopware 6 Artikel löschen per SQL direkt in der Datenbank
Für sehr große Mengen oder wiederkehrende Bereinigungen greifen viele Shopbetreiber direkt in die Datenbank ein. Das ist kein inoffizieller Hack: Shopware dokumentiert in der eigenen „SQL Tips & Tricks“-Seite explizit Befehle wie DELETE FROM product;, versieht sie aber mit einer klaren Warnung – dieser Weg ist „not officially supported“ und sollte nur mit vorherigem Backup ausgeführt werden.
Der Zugriff erfolgt in der Regel über ein Tool wie phpMyAdmin oder Adminer, mit den Zugangsdaten des jeweiligen Hosting- oder Dev-Setups (Host, Port, Benutzername, Passwort, Datenbankname).


Praktisches Vorgehen für eine SQL-Löschung:
- Vollständiges Datenbank-Backup erstellen, bevor irgendein
DELETE-Statement ausgeführt wird. - Bei Bedarf zunächst mit einem
SELECT COUNT(*) FROM product WHERE ...prüfen, wie viele Datensätze von der Bedingung betroffen wären. - Erst danach das eigentliche
DELETE FROM product WHERE ...;ausführen – ein ungefiltertesDELETE FROM product;löscht wirklich den kompletten Katalog. - Im Anschluss die in Abschnitt 4 beschriebenen Nacharbeiten (Index-Refresh, Medien-Bereinigung) nicht vergessen.
Eine gezielte Einschränkung wie „alle Produkte löschen, außer bestimmte Artikelnummern per NOT IN ausschließen“ ist dabei keine offizielle Shopware-Funktion, sondern schlicht Standard-SQL – funktioniert technisch problemlos, ist aber eine reine Eigenkonstruktion und sollte entsprechend vorsichtig mit genau geprüften Bedingungen eingesetzt werden.
3. Shopware 6 Artikel löschen: Was wird automatisch mitgelöscht?
Bevor man ein Produkt per SQL oder Admin löscht, lohnt sich ein Blick auf das Cascade-Verhalten der Data Abstraction Layer (DAL). Ein Blick in die ProductDefinition.php des Shopware-Core-Trunks zeigt, welche verknüpften Daten beim Löschen eines Produkts automatisch mit entfernt werden.

Als kaskadierend (also automatisch mitgelöscht) sind unter anderem markiert:
- Downloads, Preise (
prices) und Medienzuordnungen (media) - Cross-Sellings und die zugehörigen Cross-Selling-Produktzuordnungen
- Konfigurator-Einstellungen (
configuratorSettings) und Sichtbarkeiten (visibilities) - Hauptkategorien (
mainCategories) und Wunschlisten-Einträge (wishlists) - Die M:N-Zuordnungen zu Optionen, Eigenschaften, Kategorien, Streams, Tags und Custom-Field-Sets
Explizit nicht kaskadiert sind laut Definition searchKeywords und productReviews (CascadeDelete(false)) – diese Datensätze können nach dem Löschen als Datenmüll zurückbleiben, wenn sie nicht separat behandelt werden.
Wichtig für die Praxis ist außerdem eine Präzisierung, die in älteren Anleitungen oft fehlt oder falsch dargestellt wird: Bestellpositionen werden beim Löschen eines Produkts nicht mitgelöscht. Die Spalte order_line_item.product_id ist per ON DELETE SET NULL an product gebunden, nicht per CASCADE. Das bedeutet: Die Bestellhistorie bleibt vollständig erhalten, die betroffenen Positionen verlieren aber ihren Bezug zum ursprünglichen Produktdatensatz und sind danach vom Produkt „losgelöst“. Genau das ist auch der Kern der wiederkehrenden Community-Warnung, bereits bestellte Produkte grundsätzlich nicht zu löschen, sondern zu deaktivieren.
Eine vollständige, gegen das aktuelle DB-Schema geprüfte Liste sämtlicher per Fremdschlüssel kaskadierter Zusatztabellen bei einem direkten DELETE FROM product ist nicht Teil der offiziellen Dokumentation und wurde für diesen Artikel nicht abschließend verifiziert – die oben genannten Punkte stammen aus der Produktdefinition im Core-Trunk und sollten als Orientierung, nicht als vollständige Garantie verstanden werden.
4. Shopware 6 Artikel löschen: Nacharbeiten – Index und Medien aufräumen
Egal ob über den Admin oder per SQL gelöscht wurde: Zwei Konsolenbefehle sollten danach auf dem Zettel stehen, existieren unverändert im Core und sind weiterhin der richtige Weg, um den Shop in einen sauberen Zustand zu bringen.
bin/console dal:refresh:index– baut die Suchindizes und Denormalisierungen neu auf, damit gelöschte Produkte nicht als Karteileichen in Suche, Filtern oder Kategorieseiten auftauchen.bin/console media:delete-unused– entfernt Mediendateien, auf die keine Entität mehr verweist, also insbesondere Produktbilder, deren Produkt gerade gelöscht wurde.
Dass ein SQL-Delete diese Befehle zwingend erfordert, ist dabei keine im Code erzwungene Abhängigkeit, sondern eine bewährte Praxis-Empfehlung – ohne sie funktioniert der Shop technisch weiter, nur eben mit veralteten Indizes und verwaisten Dateien.
Wie relevant das in der Praxis werden kann, zeigt ein Bericht aus dem offiziellen Shopware-Forum: Ein Nutzer wollte nach dem Löschen aller Artikel inklusive Produktbilder aufräumen und stieß mit media:delete-unused bei rund 14.949 verwaisten Dateien zunächst an ein memory_limit-Limit von 256 MB. Erst nach Anheben auf 2048 MB lief der Befehl bei dieser Datenmenge durch. Wer also einen sehr großen Katalog komplett räumt, sollte das PHP-Memory-Limit für den CLI-Lauf im Blick behalten.
5. Shopware 6 Artikel löschen über die Sync-API
Neben Admin-UI und direktem SQL-Zugriff gibt es noch einen dritten, programmatischen Weg: die Sync-API. Über POST /api/_action/sync lässt sich mit der Aktion delete eine Liste von Produkt-IDs am Stück löschen – praktisch für Integrationen, Migrations-Skripte oder wiederkehrende Bereinigungsjobs, ohne SQL direkt anfassen zu müssen.
Ein Hinweis zur Vorsicht ist hier aber angebracht: Dieser Weg ist für diesen Artikel nur über Sekundärquellen (Community-Beiträge, Blogposts) bestätigt worden, nicht gegen die offizielle Sync-API-Referenzdokumentation von Shopware verifiziert. Wer die Sync-API für Löschvorgänge produktiv einsetzen will, sollte das Verhalten vorher gegen die aktuelle Shopware-Version und die offizielle API-Dokumentation testen, insbesondere im Hinblick auf das oben beschriebene Cascade-Verhalten.
6. Shopware 6 Artikel löschen mit Store-Plugins (Lösung B)
Wer die Löschlogik nicht selbst über SQL oder API bauen möchte, kann im Shopware Store nach fertigen Lösungen suchen. Die folgende Übersicht zeigt drei Plugins, die im Umfeld „Massendaten löschen“ auftauchen – geprüft am 03.08.2026 direkt auf den jeweiligen Store-Seiten:
| Plugin | Hersteller | Funktion | Preis | Kompatibilität |
|---|---|---|---|---|
| Daten löschen | BartCompany | Löscht dauerhaft Bestellungen, Kunden, Eigenschaften und Produkte aus der Datenbank | 19,00 €/Monat (mtl. kündbar) bzw. 199,00 €/Jahr; kostenloser Probemonat | 6.4.0.0–6.7.12.2 |
| Bulk Delete Orders Plugin | iCreative Technologies Inc. | Löscht ausschließlich Bestellungen in großen Mengen – keine Produkte | 1,00 €/Monat, kostenloser Probemonat | 6.4.0.0–6.7.12.2 |
| Multi Edit for Shopware 6 | Nimbits | Batch-Bearbeitung von Produktfeldern – ausdrücklich keine Löschfunktion | 30,00 €/Monat bzw. 299,00 €/Jahr | 6.3.0.0–6.7.12.2 |
Unter diesen drei ist „Daten löschen“ von BartCompany die einzige Lösung im Store, die tatsächlich eine Löschfunktion für Produkte anbietet. Der Hersteller warnt selbst deutlich, dass der Löschvorgang permanent ist und ein Backup vor dem Einsatz dringend empfohlen wird. Die anderen beiden Plugins tauchen im Umfeld „Massenbearbeitung“ häufig auf, bieten aber laut eigener Beschreibung keine Löschfunktion für Produkte – sie sind hier nur zur Abgrenzung aufgeführt, damit man sie nicht versehentlich für den falschen Zweck kauft.
Was in der Store-Beschreibung von „Daten löschen“ nicht ersichtlich ist: ob das Plugin beim Produktlöschen tatsächlich alle Zusatztabellen (Medien, Preise, Eigenschaften) sauber mit bereinigt oder nur die product-Tabelle selbst anfasst. Auch zu Sternebewertungen im Store liegt für diesen Artikel keine verifizierte Angabe vor. Wer das Plugin produktiv einsetzen will, sollte beides vor dem Kauf direkt auf der Store-Seite gegenchecken.
7. Shopware 6 Artikel löschen: Bekannte Fehlerbilder aus der Community
Neben dem offiziell dokumentierten Verhalten gibt es eine Reihe an Community-Berichten, die zeigen, wo Löschvorgänge in der Praxis überraschen können. Diese Punkte sind ausdrücklich als Community-Berichte gekennzeichnet, nicht als offiziell bestätigtes Shopware-Verhalten, und wurden nicht separat gegen 6.7.9.0 nachgetestet:
- Verwaiste Medien nach Produktlöschung: Mehrere Forumsnutzer berichten, dass Produktbilder nach dem Löschen der zugehörigen Artikel in der Mediathek liegen bleiben.
media:delete-unusedbehebt das grundsätzlich, kann bei sehr großen Mengen aber am PHP-memory_limitscheitern (siehe Abschnitt 4). - Unzuverlässige Zählung bei Varianten-Massenlöschung: Bei einem Versuch, 463 Varianten eines Produkts per Mehrfachauswahl zu löschen, sprang der Fortschrittszähler unerwartet zwischen Werten hin und her, teils tauchten scheinbar bereits gelöschte Varianten wieder auf. Als Workaround wurde empfohlen, immer nur die ersten 100 Einträge auf Seite 1 zu löschen und die Aktion abzuwarten, statt zwischen mehreren Seiten zu wechseln.
- Foreign-Key-Fehler beim Checkout durch gelöschte Cover-Mediendatei: Ein bestätigter GitHub-Issue im Shopware-Core beschreibt, dass ein Checkout mit einem Foreign-Key-Constraint-Fehler fehlschlägt, wenn eine Mediendatei gelöscht wird, die noch als Cover-Bild in einer bereits im Warenkorb liegenden Bestellung referenziert ist.
Ob der Varianten-Zählfehler und der Media-Cover-FK-Bug in der aktuellen Referenzversion 6.7.9.0 noch reproduzierbar sind oder inzwischen behoben wurden, wurde für diesen Artikel nicht separat verifiziert. Für Skripte gegen „Datenmüll“ nach fehlgeschlagenen Importen wird in der Community teils ein kleines eigenes PHP-Skript empfohlen, das die Tabelle product_media abfragt und verwaiste Dateien direkt von der Festplatte entfernt – alternativ bleibt immer der Weg über Backup plus API-Löschung.
Die wiederkehrende Grundhaltung aus dem Forum lässt sich so zusammenfassen: Produkte sollte man grundsätzlich eher deaktivieren als löschen, insbesondere wenn sie bereits einmal bestellt wurden – denn Bestellpositionen bleiben zwar erhalten, verlieren aber den echten Bezug zum Produktdatensatz (siehe Abschnitt 3).
Häufige Fragen zum Löschen von Artikeln in Shopware 6
Wie viele Produkte kann ich im Shopware-6-Admin gleichzeitig löschen?
Laut aktueller Shopware-Dokumentation lassen sich bis zu 1000 Produkte gleichzeitig auswählen und löschen, auch seitenübergreifend. Die Grid-Ansicht zeigt dabei weiterhin maximal 100 Einträge pro Seite an.
Werden Bestellungen gelöscht, wenn ich ein bestelltes Produkt lösche?
Nein. Die Spalte order_line_item.product_id ist per ON DELETE SET NULL an die Produkttabelle gebunden, nicht per Cascade. Die Bestellhistorie bleibt erhalten, verliert aber den direkten Bezug zum gelöschten Produkt. Shopware empfiehlt deshalb, bereits bestellte Produkte zu deaktivieren statt zu löschen.
Gibt es einen CLI-Befehl zum Löschen von Produkten in Shopware 6?
Nein, ein natives product:delete-Kommando existiert nicht. Im product-Namespace steht laut Live-Check auf einer 6.7.9.0-Referenzinstanz nur product-export:generate zur Verfügung. Für automatisierte Löschvorgänge bleiben Admin-API, Sync-API oder direktes SQL.
Ist das Löschen von Produkten per SQL offiziell von Shopware unterstützt?
Der Befehl DELETE FROM product; ist zwar in der offiziellen „SQL Tips & Tricks“-Dokumentation von Shopware aufgeführt, wird dort aber ausdrücklich als „not officially supported“ gekennzeichnet, verbunden mit der dringenden Empfehlung, vorher ein Backup anzulegen.
Was muss ich nach dem Löschen von Produkten per SQL noch erledigen?
Empfohlen werden bin/console dal:refresh:index zur Aktualisierung der Suchindizes und bin/console media:delete-unused zum Entfernen verwaister Mediendateien. Bei sehr großen Datenmengen kann Letzteres ein höheres PHP-memory_limit erfordern.
Quellen und weiterführende Links
- Shopware-Dokumentation: Product Overview
- Shopware-Dokumentation: SQL Tips & Tricks
- Shopware Developer Docs: Commands Reference
- Shopware Core: RefreshIndexCommand.php
- Shopware Core: DeleteNotUsedMediaCommand.php
- Shopware Core: ProductDefinition.php
- Shopware Core: Migration AddOrderLineItemProductId
- Shopware Core: Migration1536233120Product.php
- Shopware Administration: sw-entity-listing/index.js
- Shopware Store: Daten löschen (BartCompany)
- Shopware Store: Bulk Delete Orders Plugin
- Shopware Store: Multi Edit for Shopware 6
- Shopware-Forum: Produkte und Kategorien komplett entfernen
- Shopware-Forum: Alle Varianten eines Produktes löschen mit Mehrfachänderung
- Shopware-Forum: Alle Produkte inkl. Produktbilder löschen
- GitHub: Shopware Core Issue #5384
- Shopware-Forum: Löschen von Produkten











