ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home เปลี่ยน URL เว็บไซต์ WordPress

เปลี่ยน 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ความหมาย
siteurlWordPress Address (URL)ที่อยู่ของไฟล์ WordPress (wp-admin, wp-includes)
homeSite Address (URL)ที่อยู่ที่ผู้เข้าชมพิมพ์เข้าเว็บ

เว็บส่วนใหญ่ทั้งสองค่าเหมือนกัน ยกเว้นติดตั้ง WordPress ไว้ในโฟลเดอร์ย่อยแต่ให้หน้าแรกอยู่ที่โดเมนหลัก ห้ามใส่ / ปิดท้าย เช่น ให้ใช้ https://example.com ไม่ใช่ https://example.com/

ขั้นตอนที่ 1: เปลี่ยนค่าหลัก (เลือกวิธีใดวิธีหนึ่ง)

วิธี A: ผ่านหน้าหลังบ้าน

  1. ไปที่ Settings > General
  2. แก้ WordPress Address (URL) และ Site Address (URL) เป็นค่าใหม่
  3. คลิก 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/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security