Egy régóta futó webhelyen a spam hozzászólások tízezres nagyságrendben is felgyűlhetnek. A WordPress admin felülete néhány ezer sorig kényelmes, efölött viszont elakad. Az alábbi lépésekkel a cPanel tárhelyen futó webhelyek hozzászólás-tábláit biztonságosan kitakaríthatja, és beállíthatja, hogy a spam ne gyűljön újra.
A parancsokat 2026 októberében egy aWh cPanel tesztfiókon, WordPress 7.1-gyel próbáltuk ki.
1. Mennyi a spam?
Az admin felületen a Hozzászólások oldal fülei (Függőben, Jóváhagyott, Szemét, Lomtár) mutatják a darabszámot. Ugyanezt phpMyAdminban (cPanel Adatbázisok csoport) az SQL fülön is lekérdezheti:
SELECT comment_approved, COUNT(*) AS db
FROM 1vL7334_comments
GROUP BY comment_approved;
A táblaelőtag (a példában 1vL7334_) a WP Toolkittel telepített webhelyeken véletlenszerű. A sajátját a wp db prefix parancs írja ki, vagy a phpMyAdmin bal oldali listájában látja. A comment_approved oszlop értékei:
| Érték | Jelentése | Törölhető tömegesen? |
|---|---|---|
spam |
Spamként megjelölt (a Szemét fül) | Igen |
trash |
Lomtárba helyezett | Igen |
0 |
Moderálásra vár (Függőben) | Nem, valódi hozzászólások is lehetnek köztük |
1 |
Jóváhagyott, megjelenik az oldalon | Nem |
post-trashed |
A bejegyzésével együtt került a lomtárba | Csak a bejegyzéssel együtt |
2. Mentés
SQL-lel törölt sort nem lehet visszavonni, ezért előbb mentse el az adatbázist, a phpMyAdmin Exportálás fülén vagy mysqldump paranccsal. A parancs jelszó nélküli használatát a WP-CLI használatáról szóló cikk írja le.
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
Az utolsó sor legyen -- Dump completed on ….
3. Válassza ki a törlés módját
Kevés spam: az admin felület
A Hozzászólások › Szemét fülön a Spam-tároló ürítése gomb néhány ezer sorig elég. Teszteink szerint 1000 sort 8 másodperc alatt törölt, 20 000 sornál viszont négy perc után sem végzett, és addig csak nagyjából a harmadukat törölte. Ha a gomb időtúllépéssel leáll, ne kattintgasson rá újra, hanem használja a lenti módszerek egyikét.
Sok spam, SSH-val: WP-CLI
Az SSH-hozzáféréssel rendelkező csomagokon (cP Premium, cP Pro, cP Pro 100) a WP-CLI a legkényelmesebb, mert a hozzászólásokkal együtt a hozzájuk tartozó metaadatokat is törli. Kis adagokban, szünetekkel dolgozzon:
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
A --force kihagyja a lomtárat. A lomtárban lévő hozzászólásokhoz ugyanezt a ciklust futtassa --status=trash kapcsolóval.
Nagyon sok spam: SQL adagokban
Több tízezer sornál az SQL a leggyorsabb: teszteinken 13 000 sor három másodperc alatt törlődött.
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
SSH nélkül a phpMyAdmin SQL fülén futtassa ezt, a saját táblaelőtagjával, és ismételje, amíg az érintett sorok száma nullára nem csökken:
DELETE FROM 1vL7334_comments WHERE comment_approved = 'spam' LIMIT 5000;
Az SQL-es törlés a commentmeta táblát nem érinti, ezért utána jöhet a következő lépés.
4. Az árva metaadatok törlése
A spamszűrő bővítmények minden hozzászóláshoz adatokat írnak a commentmeta táblába. Ha a hozzászólásokat SQL-lel törölte, ezek a sorok ott maradnak. Tesztünkben 13 000 törölt hozzászólás után 13 000 árva sor maradt. A számuk:
SELECT COUNT(*)
FROM 1vL7334_commentmeta cm
LEFT JOIN 1vL7334_comments c ON c.comment_ID = cm.comment_id
WHERE c.comment_ID IS NULL;
A törlésük:
DELETE cm FROM 1vL7334_commentmeta cm
LEFT JOIN 1vL7334_comments c ON c.comment_ID = cm.comment_id
WHERE c.comment_ID IS NULL;
Ha WP-CLI-vel törölt, ez a lépés kimaradhat, de az ellenőrző lekérdezést érdemes lefuttatni.
5. A szűrőn átjutott spam
Azok a spamek, amelyeket a szűrő nem ismert fel, jóváhagyott hozzászólásként látszanak az oldalon. A hivatkozott webcím vagy a feladó szerint találhatja meg őket. Először mindig SELECT-tel nézze meg, mit találna a lekérdezés:
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%';
Az ismétlődő feladókat így keresheti meg:
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;
Ha a találatok valóban spamek, az admin felületen jelölje meg őket, vagy futtassa a lekérdezést DELETE FROM 1vL7334_comments WHERE … formában. Az utóbbi után végezze el a 4. és a 6. lépést.
6. A hozzászólásszámok javítása
A WordPress a bejegyzésenkénti hozzászólásszámot külön tárolja. A spam és a lomtár törlése nem változtatja meg, csak a jóváhagyott hozzászólások SQL-es törlése. Ha az oldalon rossz szám látszik:
wp comment recount $(wp post list --post_type=any --format=ids)
A wp comment recount parancsnak meg kell adni a bejegyzések azonosítóit, azok nélkül csak a használatát írja ki. SSH nélkül a phpMyAdminban:
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. A táblák tömörítése
A törölt sorok helye a táblákon belül felszabadul, de a fájlok a lemezen nem lesznek kisebbek, amíg a táblákat újra nem építi:
OPTIMIZE TABLE 1vL7334_comments, 1vL7334_commentmeta;
A Table does not support optimize, doing recreate + analyze instead megjegyzés normális, a lényeg az utolsó sor OK állapota. A művelet egy időre zárolja a táblákat, ezért kis forgalmú időszakban futtassa. Ha a webhely objektum-gyorsítótárat (például Redist) használ, ürítse is ki.
Hogyan előzze meg?
A Beállítások › Beszélgetés oldalon:
- Mielőtt egy hozzászólás megjelenik: kapcsolja be A hozzászólást kézzel kell engedélyezni vagy legalább a hozzászólás írójának kell lennie korábban elfogadott hozzászólásának beállítást. Így a robotok hozzászólásai nem jelennek meg az oldalon.
- Hozzászólások további beállításai: a Hozzászólási lehetőség automatikus lezárása régi bejegyzéseknél megszünteti a spamcélpontok nagy részét. A Hozzászólás írásához regisztráció és bejelentkezés szükséges még szigorúbb.
- Hozzászólás moderálása: a visszatérő kifejezéseket és címeket a Nem engedélyezett hozzászólás kulcsok mezőbe veheti fel.
- Ha nincs szüksége hozzászólásokra: kapcsolja ki az Engedélyezzük az embereknek, hogy hozzászóljanak az új bejegyzésekhez. beállítást. Ez csak az új bejegyzésekre vonatkozik, a régiekét külön kell lezárni.
A kézi moderálás a spamet nem állítja meg, csak elrejti, ezért érdemes spamszűrő bővítményt is használni. A WordPresszel érkező Akismet API-kulcsot kér, és a hozzászólások adatait külső szolgáltatásnak küldi elemzésre, ezt az adatkezelési tájékoztatóban fel kell tüntetni. A robotok kérései akkor is terhelik a tárhelyet, ha a hozzászólásuk nem jelenik meg: ha egy címről tömegesen érkeznek, tiltsa ki az IP-címet.
Az adatbázis további takarításáról a felduzzadt wp_postmeta tábláról és a wp_options automatikusan betöltött adatairól szóló cikkek, valamint a WordPress adatbázis-optimalizálásról szóló blogcikkünk szól.