เปิด Maintenance Mode บน WordPress ทำยังไง

วิธีเปิด Maintenance Mode WordPress ทั้งแบบง่ายด้วย plugin และแบบ manual ที่ควบคุมได้ทุกรายละเอียด

เปิด Maintenance Mode บน WordPress

Maintenance Mode คืออะไร ใช้เมื่อไหร่

Maintenance Mode คือสถานะที่เว็บแสดงหน้าแจ้งว่ากำลังปรับปรุง แทนที่จะให้ผู้เข้าชมเห็นเว็บที่ยังไม่เสร็จหรืออยู่ระหว่างซ่อมแซม เหมาะสำหรับสถานการณ์เหล่านี้

SEO Note: Maintenance Mode ควรส่ง HTTP status code 503 (Service Unavailable) พร้อม Retry-After header เพื่อบอก Google ว่าเป็นการปิดชั่วคราว ไม่ใช่เว็บเสีย

วิธีที่ 1 — ใช้ Plugin SeedProd (ง่ายที่สุด)

SeedProd เป็น plugin ยอดนิยมสำหรับทำ Maintenance Mode และ Coming Soon page มี drag-and-drop builder ออกแบบหน้าได้สวยงามโดยไม่ต้องเขียน code

  1. ติดตั้ง SeedProd จาก WordPress Plugin Directory
  2. ไปที่ SeedProd > Pages
  3. คลิก "Set Up a Maintenance Mode Page"
  4. เลือก template หรือเริ่มจากหน้าว่าง
  5. แก้ไขข้อความ, ใส่โลโก้ และเพิ่ม countdown timer (ถ้าต้องการ)
  6. Toggle สถานะเป็น "Active" แล้ว Publish

SeedProd จะอนุญาต admin ที่ login แล้วเข้าถึงเว็บได้ตามปกติ ส่วน visitor ทั่วไปจะเห็นหน้า maintenance

วิธีที่ 2 — ใช้ Plugin WP Maintenance Mode

WP Maintenance Mode เป็น plugin ฟรีที่เบาและตั้งค่าง่าย ไปที่ Settings > WP Maintenance Mode จะมีตัวเลือก

วิธีที่ 3 — สร้างไฟล์ .maintenance แบบ Manual

WordPress มี built-in maintenance mode ที่ activate โดยการสร้างไฟล์ .maintenance ใน root directory

# สร้างไฟล์ .maintenance ใน WordPress root
# ผ่าน cPanel File Manager หรือ FTP

# เนื้อหาในไฟล์ .maintenance (PHP timestamp)
<?php $upgrading = time(); ?>

เมื่อไฟล์นี้มีอยู่ WordPress จะแสดงหน้า maintenance อัตโนมัติ ลบไฟล์ออกเมื่อต้องการปิด maintenance mode

หมายเหตุ: หน้า maintenance ที่ WordPress built-in แสดงจะเป็นหน้าเรียบง่ายมาก ถ้าต้องการ customize ต้องใช้วิธีที่ 4

วิธีที่ 4 — Custom Maintenance Page ด้วย .htaccess

วิธีนี้ให้การควบคุมมากที่สุด สามารถ serve static HTML ได้โดยไม่ต้องพึ่ง WordPress และส่ง 503 header ที่ถูกต้อง

สร้างไฟล์ maintenance.html

<!DOCTYPE html>
<html lang="th">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>เว็บอยู่ระหว่างปรับปรุง</title>
<style>
body{font-family:sans-serif;background:#0c4a6e;color:#fff;
  display:flex;align-items:center;justify-content:center;
  min-height:100vh;text-align:center;margin:0}
h1{font-size:2rem;margin-bottom:1rem}
p{color:#bae6fd;font-size:1.1rem}
</style>
</head>
<body>
  <div>
    <h1>กำลังปรับปรุงเว็บไซต์</h1>
    <p>เราจะกลับมาเร็วๆ นี้ ขออภัยในความไม่สะดวก</p>
  </div>
</body>
</html>

ตั้งค่า .htaccess

# Maintenance Mode - เปิดโดยลบ # ออก
# อนุญาต IP ของคุณ (แทนที่ด้วย IP จริง)
# ErrorDocument 503 /maintenance.html
# <IfModule mod_rewrite.c>
#   RewriteEngine On
#   RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000
#   RewriteCond %{REQUEST_URI} !^/maintenance\.html$
#   RewriteCond %{REQUEST_URI} !^/wp-content/.*
#   RewriteRule ^(.*)$ /maintenance.html [R=503,L]
#   RewriteRule ^maintenance\.html$ - [L]
# </IfModule>
# Header always add Retry-After "3600"

อนุญาต Admin Bypass Maintenance Mode

สำหรับ maintenance mode ที่ทำผ่าน code เองโดยไม่ใช้ plugin สามารถ bypass ด้วย IP whitelist หรือ cookie ได้

// เพิ่มใน functions.php ของ theme
function custom_maintenance_mode() {
    // ถ้า admin ที่ login แล้ว ให้ผ่านได้
    if (is_user_logged_in() && current_user_can('administrator')) {
        return;
    }

    // ถ้าไม่ใช่ frontend เช่น wp-login.php ให้ผ่านได้
    if (is_admin()) {
        return;
    }

    // เปิด maintenance mode
    $maintenance_enabled = true; // เปลี่ยนเป็น false เพื่อปิด

    if ($maintenance_enabled) {
        header('HTTP/1.1 503 Service Unavailable');
        header('Retry-After: 3600');
        include ABSPATH . 'maintenance.html';
        exit;
    }
}
add_action('wp', 'custom_maintenance_mode');

ตรวจสอบว่า Maintenance Mode ทำงานถูกต้อง

# ตรวจสอบ HTTP status code
curl -o /dev/null -w "%{http_code}" https://yoursite.com
# ต้องได้ 503 เมื่อ maintenance mode เปิดอยู่

# ตรวจสอบ Retry-After header
curl -I https://yoursite.com | grep -i retry-after

# ทดสอบว่า admin ยังเข้า wp-admin ได้
curl -o /dev/null -w "%{http_code}" https://yoursite.com/wp-admin/

# ทดสอบ anonymous visitor
curl -A "Mozilla/5.0" -o /dev/null -w "%{http_code}" https://yoursite.com
Tip: ทดสอบ maintenance page ใน incognito browser เพื่อให้แน่ใจว่าผู้เข้าชมทั่วไปเห็นหน้าถูกต้อง เพราะ admin ที่ login แล้วจะเห็นเว็บปกติเสมอ

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

Maintenance Mode เปิดอยู่แล้วแต่ไม่หาย

ตรวจสอบว่าไม่มีไฟล์ .maintenance ค้างอยู่ใน root directory ผ่าน cPanel File Manager (เปิดดู hidden file ด้วย) และ clear cache ใน caching plugin ด้วย

เปิด Maintenance Mode แล้วตัวเองเข้าไม่ได้

ถ้าใช้ IP whitelist ตรวจสอบว่า IP ของคุณถูกต้อง (ดูได้ที่ whatismyip.com) ถ้าใช้ plugin ให้ login ผ่าน yoursite.com/wp-login.php โดยตรง เพราะ plugin ส่วนใหญ่อนุญาต wp-login.php ผ่านได้

Googlebot ไม่สามารถ Crawl เว็บระหว่าง Maintenance

ถ้า maintenance mode ส่ง 503 อย่างถูกต้อง Googlebot จะรอแล้วกลับมา crawl ใหม่ตาม Retry-After header ห้ามปิด maintenance นานเกิน 1–2 วัน เพราะ Google อาจ deindex บางหน้า

Maintenance Page แสดงผิดบน Mobile

ตรวจสอบว่าไฟล์ maintenance.html มี meta viewport tag และ CSS ที่ responsive ถ้าใช้ plugin ให้ตรวจสอบ preview บน mobile ด้วย browser developer tools


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

ต้องเปิด Maintenance Mode ทุกครั้งที่อัปเดต Plugin ไหม

ไม่จำเป็น การอัปเดต plugin ส่วนใหญ่ใช้เวลาไม่กี่วินาทีถึงไม่กี่นาที WordPress จัดการ transition ได้ดี แต่ถ้าเป็นการ major update ที่มีการ migrate database หรือ file structure ใหม่ ควรเปิด maintenance mode

Coming Soon Mode กับ Maintenance Mode ต่างกันอย่างไร

Coming Soon Mode ใช้ตอนเว็บยังไม่ launch ยังไม่มีเนื้อหา มักส่ง HTTP 200 พร้อมหน้า teaser สวยงาม ส่วน Maintenance Mode ใช้ตอนเว็บ launch แล้วแต่ปิดชั่วคราวเพื่อซ่อมบำรุง ควรส่ง HTTP 503

การเปิด Maintenance Mode นานๆ กระทบ SEO ไหม

ถ้าส่ง 503 + Retry-After อย่างถูกต้อง Google จะรอ แต่ถ้าปิดนานเกิน 2–3 วันโดยไม่มี Retry-After อาจส่งผลต่อ index ได้ สำหรับ maintenance นาน ให้พิจารณาทำในช่วงที่ traffic น้อย เช่น ตี 2–4 และแจ้งผู้ใช้ล่วงหน้าผ่าน social media