จัดการ Comment Spam บน WordPress ให้หมดปัญหา

ป้องกัน Spam Comment ด้วย Akismet, reCAPTCHA, Moderation Queue และการตั้งค่าที่ถูกต้อง

จัดการ Comment Spam บน WordPress ให้หมดปัญหา WordPress

Comment Spam คืออะไร และทำไมต้องจัดการ

Comment Spam คือความคิดเห็นปลอมที่โปรแกรมอัตโนมัติ (Bot) หรือมนุษย์ส่งเข้ามายังเว็บไซต์ WordPress ของคุณ โดยมักประกอบด้วยลิงก์ไปยังเว็บที่ไม่เหมาะสม โฆษณาสินค้า ลิงก์ฟิชชิง หรือเนื้อหาที่ไม่เกี่ยวข้องกับบทความเลย

ปัญหาที่ตามมาจาก Spam Comment มีหลายด้าน ทั้งทำให้เว็บดูไม่น่าเชื่อถือ ผู้อ่านจริงไม่อยากแสดงความคิดเห็น ส่งผลเสียต่อ SEO เพราะ Google มองว่าเว็บมีเนื้อหาคุณภาพต่ำ และอาจทำให้เว็บโหลดช้าลงหากมี Spam สะสมในฐานข้อมูลจำนวนมาก ดังนั้นการจัดการกับ Comment Spam จึงเป็นสิ่งที่เจ้าของเว็บ WordPress ทุกคนควรทำ

วิธีที่ 1: ติดตั้งและตั้งค่า Akismet Anti-Spam

Akismet คือ Plugin ป้องกัน Spam ที่พัฒนาโดยทีม WordPress.com และถือว่าเป็นเครื่องมือมาตรฐานที่นิยมใช้มากที่สุด โดย Akismet จะใช้ฐานข้อมูล Spam ขนาดใหญ่ช่วยกรอง Comment ที่น่าสงสัยออกโดยอัตโนมัติ

  1. ไปที่ Plugins > Add New แล้วค้นหา "Akismet Anti-Spam"
  2. กด Install Now จากนั้นกด Activate
  3. คลิก Set up your Akismet account เพื่อสมัคร API Key ฟรี
  4. สมัครที่ akismet.com ด้วย WordPress.com account หรือ email ทั่วไป
  5. เลือกแผน Personal (ฟรี) สำหรับเว็บที่ไม่ใช่เชิงพาณิชย์
  6. คัดลอก API Key และวางในหน้าตั้งค่า Akismet บน WordPress

หลังจากเปิดใช้งาน Akismet จะเริ่มกรอง Spam อัตโนมัติทันที คุณสามารถดู Comment ที่ถูกกรองได้ที่เมนู Comments > Spam

วิธีที่ 2: เพิ่ม reCAPTCHA ให้ฟอร์ม Comment

Google reCAPTCHA ช่วยป้องกัน Bot ไม่ให้โพสต์ Comment อัตโนมัติ โดยเฉพาะ reCAPTCHA v3 ที่ทำงานเบื้องหลังโดยไม่รบกวนผู้ใช้จริง

  1. ติดตั้ง Plugin เช่น WPForms, Contact Form 7 + reCAPTCHA addon หรือ Invisible reCaptcha for WordPress
  2. ไปที่ google.com/recaptcha/admin สร้าง Site Key และ Secret Key
  3. นำ Key ไปกรอกในหน้าตั้งค่าของ Plugin ที่เลือก
  4. เปิดใช้งาน reCAPTCHA บนหน้า Comment Form

วิธีที่ 3: ตั้งค่า Comment Moderation Queue

การกำหนดให้ Comment ทุกอันต้องรอการอนุมัติก่อนแสดงผลเป็นวิธีที่ปลอดภัยที่สุด โดยไปที่ Settings > Discussion แล้วปรับตั้งค่าดังนี้

วิธีที่ 4: ปิด Comment บนบทความเก่า

บทความเก่าที่โพสต์ไปนานแล้วมักตกเป็นเป้าหมาย Spam Bot เพราะ Bot จะค้นหาหน้าที่มีฟอร์ม Comment เปิดอยู่ การปิด Comment บนบทความที่เก่ากว่า 30-90 วันช่วยลด Spam ได้มาก

ไปที่ Settings > Discussion แล้วเลือก "Automatically close comments on posts older than X days" ปรับเป็น 60 หรือ 90 วันตามความเหมาะสม

หากต้องการปิด Comment บนบทความเก่าทั้งหมดที่มีอยู่แล้วพร้อมกัน ให้ไปที่ Posts > All Posts เลือกบทความทั้งหมด แล้วใช้ Bulk Actions > Edit แล้วเลือก Comments เป็น "Do not allow"

วิธีที่ 5: ล้าง Spam Comment สะสมในฐานข้อมูล

หากเว็บมี Spam Comment สะสมอยู่จำนวนมากก่อนที่จะติดตั้งระบบป้องกัน ควรล้างออกเพื่อลดขนาดฐานข้อมูล สามารถทำได้ผ่าน phpMyAdmin ใน cPanel

  1. เข้าสู่ cPanel แล้วเปิด phpMyAdmin
  2. เลือก Database ของ WordPress
  3. คลิกที่แท็บ SQL แล้วรันคำสั่งต่อไปนี้
-- ลบ Spam Comment ทั้งหมด
DELETE FROM wp_comments WHERE comment_approved = 'spam';

-- ลบ Comment ที่รอการอนุมัติเกินกว่า 30 วัน (ไม่ใช่ Spam ที่มีค่า)
DELETE FROM wp_comments
WHERE comment_approved = '0'
AND comment_date < DATE_SUB(NOW(), INTERVAL 30 DAY);

-- ล้าง Comment Meta ที่ไม่มี Comment หลักแล้ว
DELETE FROM wp_commentmeta
WHERE comment_id NOT IN (SELECT comment_ID FROM wp_comments);

-- Optimize ตารางหลังลบ
OPTIMIZE TABLE wp_comments, wp_commentmeta;
Tip: ก่อนรันคำสั่ง SQL ควร Backup ฐานข้อมูลผ่าน cPanel > Backup ทุกครั้ง เพราะการลบข้อมูลไม่สามารถยกเลิกได้

วิธีที่ 6: ตั้งค่า .htaccess กัน Bot โพสต์ Comment

Bot ที่ส่ง Spam Comment มักจะข้ามขั้นตอนการโหลดหน้าเว็บและส่ง POST Request ตรงไปยัง wp-comments-post.php เราสามารถกำหนดใน .htaccess ไม่ให้รับ Request ที่ไม่มี Referer จากโดเมนของเรา

# กัน Direct POST ไปยัง wp-comments-post.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} /wp-comments-post\.php
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourthaihost\.com [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .* - [F,L]
</IfModule>

แก้ yourthaihost\.com เป็นโดเมนของคุณ และอัปโหลดไฟล์ .htaccess ผ่าน cPanel > File Manager ที่ root ของ WordPress

Tip: ถ้าแก้ไข .htaccess แล้วเว็บเกิด Error 500 ให้ลบบรรทัดที่เพิ่มออกและ refresh ใหม่ เนื่องจาก syntax ผิดพลาดเพียงจุดเดียวอาจทำให้เว็บล่มได้

วิธีที่ 7: ใช้ Plugin เพิ่มเติมเพื่อความปลอดภัย

นอกจาก Akismet แล้ว ยังมี Plugin อื่นที่ช่วยป้องกัน Comment Spam ได้ดี


ตรวจสอบว่าระบบป้องกัน Comment Spam ทำงานถูกต้อง

หลังจากตั้งค่าแล้ว ให้ตรวจสอบว่าระบบทำงานถูกต้องด้วยขั้นตอนเหล่านี้

# 1. ตรวจจำนวน Spam ที่ Akismet จับได้ใน Database
SELECT comment_approved, COUNT(*) as total
FROM wp_comments
GROUP BY comment_approved;

# 2. ดู Comment ล่าสุด 10 รายการ
SELECT comment_author, comment_date, comment_approved, comment_content
FROM wp_comments
ORDER BY comment_date DESC
LIMIT 10;

# 3. ตรวจ IP ที่ส่ง Spam บ่อยที่สุด
SELECT comment_author_IP, COUNT(*) as spam_count
FROM wp_comments
WHERE comment_approved = 'spam'
GROUP BY comment_author_IP
ORDER BY spam_count DESC
LIMIT 10;

# 4. นับ Comment รอ Moderation
SELECT COUNT(*) as pending
FROM wp_comments
WHERE comment_approved = '0';
Tip: รัน Query เหล่านี้ใน phpMyAdmin ผ่าน cPanel ทุก 1-2 สัปดาห์เพื่อติดตามสถานการณ์ Spam และปรับแผนการป้องกันตามความจำเป็น ถ้า IP ใดส่ง Spam บ่อยมากให้บล็อก IP นั้นผ่าน cPanel > IP Blocker ได้เลย

แก้ปัญหาที่พบบ่อย

Error: "Comment ถูกปฏิเสธทั้งที่ไม่ใช่ Spam (False Positive)"

เกิดขึ้นเมื่อ Akismet หรือระบบกรองเข้มงวดเกินไป ทำให้ Comment จริงถูกส่งไป Spam Folder วิธีแก้คือไปที่ Comments > Spam แล้วคลิก "Not Spam" บน Comment นั้น Akismet จะเรียนรู้และปรับการกรองโดยอัตโนมัติ นอกจากนี้ตรวจสอบ Disallowed Comment Keys ใน Settings > Discussion ว่ามีคำที่ทั่วไปเกินไปหรือไม่

Error: "Comment ส่งแล้วหายไป ไม่แสดงและไม่อยู่ใน Pending"

มักเกิดจาก Plugin หรือ .htaccess Rule บล็อก Request ทิ้งก่อนถึง WordPress ให้ตรวจสอบ Error Log ใน cPanel > Logs ก่อน และลองปิด Plugin ทีละตัวเพื่อหาตัวที่ก่อปัญหา ตรวจสอบ .htaccess ที่เพิ่มไว้ว่า Regex ถูกต้องหรือไม่

Error: "Akismet API Key Invalid หรือ Connection Failed"

เกิดขึ้นเมื่อ Hosting ไม่สามารถเชื่อมต่อออกอินเทอร์เน็ตได้ (Outbound Connection Blocked) หรือ API Key หมดอายุ ให้ตรวจสอบที่ Plugins > Akismet Configuration แล้วคลิก "Check API key" ถ้ายังไม่ได้ให้ติดต่อ Hosting Support เพื่อตรวจสอบ Firewall Rule ที่อาจบล็อก Port 80/443 Outbound

Error: "reCAPTCHA ไม่แสดงหรือแสดงผิดตำแหน่ง"

ปัญหานี้มักเกิดจาก Site Key และ Secret Key สลับกัน หรือ Domain ที่ลงทะเบียนกับ Google reCAPTCHA ไม่ตรงกับ Domain จริง ให้ไปที่ recaptcha admin ตรวจสอบว่า Domain ที่ลงทะเบียนถูกต้อง และนำ Key ชุดใหม่ไปแทนที่ใน Plugin Settings

Error: "Comment Spam ยังเข้ามาได้ทั้งที่เปิด Akismet แล้ว"

Akismet ไม่ได้บล็อก 100% แต่จะส่ง Spam ไปยัง Spam Queue เพื่อรอการลบ ตรวจสอบว่า Akismet ทำงานอยู่จริงโดยไปที่ Comments > Spam ถ้ามี Comment อยู่แสดงว่าทำงานปกติ ถ้า Spam ยังแสดงผลบนหน้าเว็บให้เปลี่ยนไปใช้โหมด "Comment must be manually approved" ชั่วคราว


คำถามที่พบบ่อย

Q: Akismet ฟรีหรือเสียเงิน?

A: Akismet มีแผนฟรีสำหรับเว็บที่ไม่ใช่เชิงพาณิชย์ (Personal/Non-commercial) สามารถสมัครใช้งานได้ที่ akismet.com โดยตั้งค่า Subscription เป็น $0/เดือน สำหรับเว็บธุรกิจหรือ e-commerce จะต้องสมัครแผนเสียเงิน (Plus หรือ Enterprise) เพื่อให้ถูกต้องตามเงื่อนไขการใช้งาน

Q: ควรปิด Comment ทั้งเว็บดีไหม?

A: ขึ้นอยู่กับประเภทเว็บ ถ้าเว็บเน้นเนื้อหาให้ความรู้และไม่ต้องการ Engagement จาก Comment การปิดทั้งเว็บเป็นทางเลือกที่ดีที่สุดเพราะลด Attack Surface ได้สมบูรณ์ แต่ถ้าต้องการความคิดเห็นจากผู้อ่าน แนะนำให้ใช้ Moderation Queue + Akismet แทนการปิดทั้งหมด

Q: Comment Spam ส่งผลต่อ SEO ของเว็บไหม?

A: ถ้า Spam Comment แสดงผลบนหน้าเว็บสาธารณะจริง มีโอกาสที่ Google จะมองว่าเว็บมีเนื้อหา Spammy และอาจลดอันดับได้ อย่างไรก็ตาม Comment ที่อยู่ใน Pending หรือ Spam Queue จะไม่ถูก Index และไม่ส่งผลต่อ SEO ดังนั้นการตั้ง Comment ให้รอ Moderation ก่อนแสดงผลจึงช่วยปกป้อง SEO ได้ด้วย