เปลี่ยน URL เว็บไซต์ WordPress
การเปลี่ยน URL ของเว็บไซต์ WordPress เกิดขึ้นได้หลายกรณี เช่น เปลี่ยนชื่อโดเมนใหม่ ย้ายจาก http:// เป็น https:// เปลี่ยนจากมี www เป็นไม่มี หรือย้ายเว็บจากโดเมนทดสอบ (Staging) ขึ้นโดเมนจริง WordPress เก็บ URL ไว้ในฐานข้อมูลหลายตำแหน่ง ทั้งค่าตั้งค่าหลัก ลิงก์ในบทความ และข้อมูลของปลั๊กอิน การแก้แค่ที่เดียวจึงมักทำให้เว็บพัง หรือรูปภาพยังโหลดจากโดเมนเก่า
บทความนี้อธิบายการเปลี่ยน URL เป็น 2 ส่วน คือเปลี่ยนค่าหลัก (home และ siteurl) และแทนที่ URL เก่าที่ฝังอยู่ในเนื้อหา โดยถือว่าไฟล์และฐานข้อมูลอยู่บนเซิร์ฟเวอร์เดิม หากต้องย้ายไปเซิร์ฟเวอร์ใหม่ด้วย ให้ดู ย้ายเว็บไซต์ WordPress ไปโฮสต์ใหม่ ก่อน
สิ่งที่ต้องเตรียม
- ไฟล์สำรองฐานข้อมูลล่าสุด (บังคับ) เพราะการค้นหาแทนที่ย้อนกลับไม่ได้
- โดเมนใหม่ชี้มายังเซิร์ฟเวอร์แล้ว ดู ชี้โดเมนไปยังเซิร์ฟเวอร์ด้วย A Record หรือเปลี่ยน Name Server
- เว็บเซิร์ฟเวอร์รับโดเมนใหม่แล้ว (เพิ่มใน Server Block, Virtual Host หรือเพิ่มโดเมนใน Plesk/DirectAdmin) และมี SSL สำหรับโดเมนใหม่
- สิทธิ์ SSH พร้อม WP-CLI (แนะนำ) หรือสิทธิ์เข้า phpMyAdmin
สำรองฐานข้อมูลด้วย WP-CLI ก่อนเริ่ม
cd /var/www/example.com
wp db export ~/before-url-change.sql
ทำความเข้าใจค่า home และ siteurl
| ค่าในฐานข้อมูล | ชื่อในหน้า Settings > General | ความหมาย |
|---|---|---|
siteurl | WordPress Address (URL) | ที่อยู่ของไฟล์ WordPress (wp-admin, wp-includes) |
home | Site Address (URL) | ที่อยู่ที่ผู้เข้าชมพิมพ์เข้าเว็บ |
เว็บส่วนใหญ่ทั้งสองค่าเหมือนกัน ยกเว้นติดตั้ง WordPress ไว้ในโฟลเดอร์ย่อยแต่ให้หน้าแรกอยู่ที่โดเมนหลัก ห้ามใส่ / ปิดท้าย เช่น ให้ใช้ https://example.com ไม่ใช่ https://example.com/
ขั้นตอนที่ 1: เปลี่ยนค่าหลัก (เลือกวิธีใดวิธีหนึ่ง)
วิธี A: ผ่านหน้าหลังบ้าน
- ไปที่ Settings > General
- แก้ WordPress Address (URL) และ Site Address (URL) เป็นค่าใหม่
- คลิก Save Changes ระบบจะออกจากระบบ ให้เข้าสู่ระบบใหม่ผ่านโดเมนใหม่
ใช้วิธีนี้เมื่อโดเมนใหม่พร้อมใช้งานแล้วเท่านั้น หากโดเมนใหม่ยังเข้าไม่ได้ จะเข้าหลังบ้านไม่ได้ทั้งสองโดเมน หากช่องทั้งสองเป็นสีเทาแก้ไม่ได้ แปลว่ามีการกำหนดค่าไว้ใน wp-config.php แล้ว (วิธี C)
วิธี B: ผ่าน WP-CLI
wp option update home 'https://new-example.com'
wp option update siteurl 'https://new-example.com'
ผลที่ได้คือ Success: Updated 'home' option. และ Success: Updated 'siteurl' option.
วิธี C: กำหนดใน wp-config.php
เพิ่มก่อนบรรทัด /* That's all, stop editing! */
define( 'WP_HOME', 'https://new-example.com' );
define( 'WP_SITEURL', 'https://new-example.com' );
ค่านี้จะมีผลเหนือค่าในฐานข้อมูล เหมาะใช้เมื่อเข้าหลังบ้านไม่ได้ แต่ทำให้ช่องใน Settings > General แก้ไม่ได้ หลังแก้ฐานข้อมูลให้ถูกต้องแล้วจะลบออกหรือเก็บไว้ก็ได้
วิธี D: ผ่าน SQL (phpMyAdmin)
ใช้เมื่อไม่มี SSH ตรวจชื่อตารางก่อน เพราะ Prefix อาจไม่ใช่ wp_ (ดูค่า $table_prefix ใน wp-config.php)
UPDATE wp_options SET option_value = 'https://new-example.com'
WHERE option_name IN ('home', 'siteurl');
ใช้ SQL ได้เฉพาะสองค่านี้ ห้ามใช้ REPLACE() แก้เนื้อหาทั้งตาราง ดูเหตุผลในขั้นตอนถัดไป
ขั้นตอนที่ 2: แทนที่ URL เก่าในเนื้อหา
บทความ รูปภาพ เมนู วิดเจ็ต และข้อมูลของ Page Builder ยังมี URL เก่าฝังอยู่ ข้อมูลบางส่วนเก็บแบบ PHP Serialized ซึ่งระบุความยาวตัวอักษรไว้ด้วย เช่น s:22:"http://old-example.com" หากใช้ SQL REPLACE() เปลี่ยนเป็นโดเมนที่ยาวไม่เท่ากัน ตัวเลขความยาวจะผิด และ WordPress จะอ่านค่านั้นไม่ได้ ทำให้วิดเจ็ตหรือการตั้งค่าธีมหายไป wp search-replace แก้ปัญหานี้ให้อัตโนมัติ
ทดลองดูก่อนด้วย --dry-run
wp search-replace 'https://old-example.com' 'https://new-example.com' \
--skip-columns=guid --dry-run
ผลลัพธ์เป็นตารางแสดงจำนวนรายการที่จะถูกแทนที่ในแต่ละตาราง บรรทัดสุดท้ายเป็น Success: 1284 replacements to be made. (ตัวเลขขึ้นกับเว็บ) หากตัวเลขสมเหตุสมผล ให้รันจริงโดยตัด --dry-run ออก
wp search-replace 'https://old-example.com' 'https://new-example.com' --skip-columns=guid
ข้อควรรู้
--skip-columns=guidข้ามคอลัมน์ GUID ตามคำแนะนำของ WordPress เพราะ GUID เป็นรหัสประจำบทความที่ RSS Reader ใช้ ไม่ใช่ลิงก์- หากเดิมมีทั้ง
http://และwwwปนกัน ให้รันเพิ่มสำหรับแต่ละรูปแบบ เช่น'http://old-example.com'และ'https://www.old-example.com' - ปลั๊กอินบางตัวเก็บข้อมูลในตารางที่ไม่ได้ลงทะเบียนกับ WordPress ให้เพิ่ม
--all-tables-with-prefixเพื่อรวมตารางเหล่านั้น - หากไม่มี SSH ให้ใช้ปลั๊กอิน Better Search Replace ซึ่งจัดการ Serialized Data ได้เช่นกัน
หลังแทนที่เสร็จ ล้าง Cache ทุกชั้น
wp cache flush
wp rewrite flush
และล้าง Cache ของปลั๊กอิน Cache หรือ CDN ที่ใช้อยู่ด้วย
ขั้นตอนที่ 3: Redirect โดเมนเก่าและแจ้ง Google
เพื่อไม่ให้เสียอันดับการค้นหา ให้ Redirect ทุก URL ของโดเมนเก่าไปยัง Path เดียวกันบนโดเมนใหม่ด้วย 301 ดู ทำ 301 Redirect ด้วยไฟล์ .htaccess หรือ ทำ 301 Redirect บน Nginx จากนั้นยืนยันโดเมนใหม่ใน Google Search Console ตาม ยืนยันความเป็นเจ้าของเว็บไซต์บน Google Search Console และใช้เครื่องมือ Change of Address ใน Search Console ของโดเมนเก่า
ตรวจสอบผลลัพธ์
wp option get home
wp db search 'old-example.com' --all-tables-with-prefix --stats
คำสั่งแรกต้องแสดงโดเมนใหม่ คำสั่งที่สองควรพบ URL เก่าเหลือน้อยมากหรือไม่พบเลย (อาจพบในคอลัมน์ GUID ซึ่งปกติ) จากนั้นเปิดเว็บด้วยเบราว์เซอร์แบบ Incognito ตรวจหน้าแรก บทความ รูปภาพ และเมนู และทดสอบ Redirect
curl -I https://old-example.com/about/
ผลที่ถูกต้องคือ HTTP/2 301 และบรรทัด location: https://new-example.com/about/
ปัญหาที่พบบ่อย
Redirect วนซ้ำ (ERR_TOO_MANY_REDIRECTS)
มักเกิดเมื่อตั้ง URL เป็น https:// แต่เว็บอยู่หลัง Cloudflare หรือ Reverse Proxy ที่ส่งมาเป็น HTTP ดูวิธีแก้ที่ เลือก SSL/TLS Mode บน Cloudflare ให้ถูกต้อง และ แก้ปัญหา Mixed Content หลังเปลี่ยนเว็บ WordPress เป็น HTTPS
เข้าหลังบ้านไม่ได้หลังเปลี่ยน URL
โดเมนใหม่ยังไม่ชี้มาหรือเว็บเซิร์ฟเวอร์ยังไม่รับโดเมนนั้น ใช้วิธี B หรือ C เปลี่ยนกลับเป็นโดเมนเดิมชั่วคราว แล้วแก้ DNS และเว็บเซิร์ฟเวอร์ให้เรียบร้อยก่อน
วิดเจ็ตหรือการตั้งค่าธีมหายไป
เกิดจากการใช้ SQL REPLACE() แก้ Serialized Data ให้กู้คืนฐานข้อมูลจากไฟล์ที่สำรองไว้ด้วย wp db import ~/before-url-change.sql แล้วทำขั้นตอนที่ 2 ใหม่ด้วย wp search-replace
รูปบางรูปยังโหลดจากโดเมนเก่า
URL อาจอยู่ในไฟล์ CSS ของธีม หรือเก็บแบบ Escape ใน JSON ของ Page Builder เช่น https:\/\/old-example.com ให้รัน wp search-replace กับรูปแบบนั้นเพิ่ม และค้นหาในไฟล์ธีมด้วย grep -rn 'old-example.com' wp-content/themes/
หากทำตามขั้นตอนแล้วยังติดปัญหา สามารถติดต่อทีมสนับสนุนของ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี


