Auf einer seit Langem betriebenen Website können sich Spam-Kommentare in einer Größenordnung von Zehntausenden ansammeln. Die WordPress-Admin-Oberfläche ist bis zu einigen Tausend Zeilen übersichtlich, darüber hinaus kommt es jedoch zu Verzögerungen. Mit den folgenden Schritten können Sie die Kommentartabellen von Websites, die auf cPanel-Hosting laufen, sicher bereinigen und so einstellen, dass sich kein Spam mehr ansammelt.
Wir haben die Befehle im Oktober 2026 auf einem aWh-cPanel-Testkonto mit WordPress 7.1 getestet.
1. Wie hoch ist das Spam-Aufkommen?
Im Admin-Bereich zeigen die Registerkarten der Seite „Beiträge“ (Ausstehend, Genehmigt, Spam, Papierkorb) die jeweilige Anzahl an Einträgen an. Dasselbe können Sie auch in phpMyAdmin (Gruppe „Datenbanken“ in cPanel) auf der Registerkarte „SQL“ abfragen:
SELECT comment_approved, COUNT(*) AS db
FROM 1vL7334_comments
GROUP BY comment_approved;
Das Tabellenpräfix (im Beispiel „1vL7334_“) ist bei mit WP Toolkit installierten Websites zufällig. Ihr eigenes Präfix können Sie mit dem Befehl „wp db prefix“ ausgeben lassen oder in der Liste auf der linken Seite von phpMyAdmin einsehen. Die Werte der Spalten „comment_approved“ lauten:
| Wert | Bedeutung | Ist eine Massenlöschung möglich? |
|---|---|---|
spam |
Als Spam markiert (Registerkarte „Spam“) | Ja |
trash |
In den Papierkorb verschoben | Ja |
0 |
Wartet auf Freigabe (In Bearbeitung) | Nein, darunter können sich auch echte Beiträge befinden |
1 |
Genehmigt, wird auf der Seite angezeigt | Nein |
post-trashed |
Zusammen mit diesem Eintrag wurde er in den Papierkorb verschoben | Nur zusammen mit dem Beitrag |
2. Speichern
Eine mit SQL gelöschte Zeile kann nicht rückgängig gemacht werden. Speichern Sie daher zunächst die Datenbank über die Registerkarte „Exportieren“ in phpMyAdmin oder mit dem Befehl „mysqldump“. Die Verwendung des Befehls ohne Passwort wird im Artikel zur Nutzung von WP-CLI beschrieben.
cd ~/public_html
P=$(wp db prefix); DB=$(wp config get DB_NAME)
mysqldump --single-transaction --no-tablespaces "$DB" > ~/hozzaszolasok-elott-$(date +%F).sql
tail -1 ~/hozzaszolasok-elott-$(date +%F).sql
Die letzte Zeile sollte lauten: „-- Dump completed on …“.
3. Wählen Sie die Art der Löschung aus
Weniger Spam: das Admin-Portal
Auf der Registerkarte „Kommentare“ › „Spam“ reicht die Schaltfläche „Spam-Speicher leeren“ für einige Tausend Zeilen aus. Unseren Tests zufolge wurden 1.000 Zeilen in 8 Sekunden gelöscht, bei 20.000 Zeilen war der Vorgang jedoch auch nach vier Minuten noch nicht abgeschlossen, und bis dahin war lediglich etwa ein Drittel davon gelöscht worden. Sollte die Schaltfläche aufgrund einer Zeitüberschreitung nicht mehr reagieren, klicken Sie nicht erneut darauf, sondern wenden Sie eine der unten beschriebenen Methoden an.
Viel Spam über SSH: WP-CLI
Bei Paketen mit SSH-Zugriff (cP Premium, cP Pro, cP Pro 100) ist WP-CLI am bequemsten, da es neben den Beiträgen auch die dazugehörigen Metadaten löscht. Arbeiten Sie in kleinen Schritten und legen Sie zwischendurch Pausen ein:
cd ~/public_html
while IDS=$(wp comment list --status=spam --number=500 --format=ids) && [ -n "$IDS" ]; do
wp comment delete $IDS --force | tail -1
sleep 1
done
Mit der Option „--force“ wird der Papierkorb übersprungen. Für Beiträge im Papierkorb führen Sie denselben Vorgang mit der Option „--status=trash“ durch.
Sehr viel Spam: SQL-Anfragen in großen Mengen
Bei mehreren Zehntausend Zeilen ist SQL am schnellsten: In unseren Tests wurden 13.000 Zeilen in drei Sekunden gelöscht.
while :; do
N=$(mysql "$DB" -N -e "DELETE FROM ${P}comments WHERE comment_approved = 'spam' LIMIT 5000; SELECT ROW_COUNT();")
echo "törölve: $N"
[ "$N" -eq 0 ] && break
sleep 1
done
Führen Sie diesen Befehl ohne SSH auf der Registerkarte „SQL“ von phpMyAdmin mit Ihrem eigenen Tabellennamen aus und wiederholen Sie den Vorgang, bis die Anzahl der betroffenen Zeilen auf null sinkt:
DELETE FROM 1vL7334_comments WHERE comment_approved = 'spam' LIMIT 5000;
Das Löschen per SQL hat keine Auswirkungen auf die Tabelle „commentmeta“, daher kann anschließend der nächste Schritt erfolgen.
4. Löschen von verwaisten Metadaten
Die Spamfilter-Plugins schreiben zu jedem Kommentar Daten in die Tabelle „commentmeta“. Wenn Sie die Kommentare per SQL gelöscht haben, bleiben diese Zeilen dort erhalten. In unserem Test blieben nach 13.000 gelöschten Kommentaren 13.000 überflüssige Zeilen zurück. Ihre Anzahl:
SELECT COUNT(*)
FROM 1vL7334_commentmeta cm
LEFT JOIN 1vL7334_comments c ON c.comment_ID = cm.comment_id
WHERE c.comment_ID IS NULL;
So löschen Sie diese:
DELETE cm FROM 1vL7334_commentmeta cm
LEFT JOIN 1vL7334_comments c ON c.comment_ID = cm.comment_id
WHERE c.comment_ID IS NULL;
Wenn Sie die Löschung über WP-CLI vorgenommen haben, kann dieser Schritt entfallen, dennoch empfiehlt es sich, die Überprüfungsabfrage auszuführen.
5. Spam, der den Filter umgangen hat
Spam-Beiträge, die vom Filter nicht erkannt wurden, werden auf der Seite als freigegebene Beiträge angezeigt. Sie können diese anhand der angegebenen Webadresse oder des Absenders finden. Überprüfen Sie zunächst stets mit einem SELECT-Befehl, welche Ergebnisse die Abfrage liefern würde:
SELECT comment_ID, comment_author, comment_author_url, comment_content
FROM 1vL7334_comments
WHERE comment_approved = '1'
AND comment_author_url LIKE '%gyanus-oldal.hu%';
So können Sie wiederkehrende Absender suchen:
SELECT comment_author_email, comment_author_IP, COUNT(*) AS db
FROM 1vL7334_comments
GROUP BY comment_author_email, comment_author_IP
HAVING db > 5
ORDER BY db DESC;
Sollten die Treffer tatsächlich Spam sein, markieren Sie diese bitte im Admin-Bereich oder führen Sie die Abfrage in der Form „DELETE FROM 1vL7334_comments WHERE …“ aus. Führen Sie anschließend die Schritte 4 und 6 durch.
6. Korrektur der Anzahl der Beiträge
WordPress speichert die Anzahl der Kommentare pro Beitrag separat. Das Löschen von Spam und den Papierkorb hat keinen Einfluss darauf; nur das Löschen der freigegebenen Kommentare per SQL wirkt sich aus. Falls auf der Seite eine falsche Zahl angezeigt wird:
wp comment recount $(wp post list --post_type=any --format=ids)
Für den Befehl „wp comment recount“ müssen die IDs der Beiträge angegeben werden; ohne diese wird lediglich die Verwendung des Befehls ausgegeben. Ohne SSH in phpMyAdmin:
UPDATE 1vL7334_posts p
SET p.comment_count = (
SELECT COUNT(*) FROM 1vL7334_comments c
WHERE c.comment_post_ID = p.ID AND c.comment_approved = '1'
)
WHERE p.post_type IN ('post', 'page');
7. Komprimierung der Tabellen
Der Speicherplatz der gelöschten Zeilen in den Tabellen wird freigegeben, doch die Dateien auf der Festplatte werden nicht kleiner, solange die Tabellen nicht neu aufgebaut werden:
OPTIMIZE TABLE 1vL7334_comments, 1vL7334_commentmeta;
Der Hinweis „Table does not support optimize, doing recreate + analyze instead“ ist normal; entscheidend ist der Status „OK“ in der letzten Zeile. Der Vorgang sperrt die Tabellen vorübergehend; führen Sie ihn daher in Zeiten mit geringem Datenverkehr durch. Falls die Website einen Objekt-Cache (z. B. Redist) verwendet, leeren Sie diesen ebenfalls.
Wie können Sie dies verhindern?
Auf der Seite „Einstellungen“ › „Chat“:
- Bevor ein Kommentar veröffentlicht wird: Aktivieren Sie die** Einstellung „Kommentare müssen manuell freigegeben werden“ oder stellen Sie** zumindest ein, dass der Verfasser des Kommentars bereits einen zuvor akzeptierten Kommentar verfasst haben muss. Auf diese Weise werden keine Kommentare von Bots auf der Seite angezeigt.
- Weitere Einstellungen für Kommentare: Die automatische Schließung der Kommentarfunktion bei älteren Beiträgen beseitigt einen Großteil der Spam-Ziele. Für das Verfassen eines Kommentars sind eine Registrierung und eine Anmeldung erforderlich, was die Sicherheitsvorkehrungen noch weiter verschärft.
- Moderation von Beiträgen: Wiederkehrende Ausdrücke und Titel können Sie in das Feld „Unzulässige Schlüsselwörter für Beiträge“ eintragen.
- Wenn Sie keine Kommentare benötigen, deaktivieren Sie die Einstellung „Benutzern erlauben, Kommentare zu neuen Beiträgen zu verfassen“. Dies gilt nur für neue Beiträge; ältere Beiträge müssen separat geschlossen werden.
Die manuelle Moderation stoppt Spam nicht, sondern blendet ihn lediglich aus; daher empfiehlt es sich, zusätzlich ein Spamfilter-Plugin zu verwenden. Akismet, das mit WordPress geliefert wird, fordert einen API-Schlüssel an und sendet die Daten der Kommentare zur Analyse an einen externen Dienst; dies muss in der Datenschutzerklärung angegeben werden. Anfragen von Bots belasten den Speicherplatz auch dann, wenn ihre Kommentare nicht angezeigt werden: Sollten massenhaft Anfragen von einer Adresse eingehen, sperren Sie die IP-Adresse.
Weitere Informationen zur Datenbankbereinigung finden Sie in den Artikeln über die aufgeblähte Tabelle „wp_postmeta“ und die automatisch geladenen Daten in der Tabelle „wp_options“ sowie in unserem Blogbeitrag zur WordPress-Datenbankoptimierung.