🌐 สร้าง Pretty URL สำหรับเว็บไซต์ WordPress บน Nginx โดยไม่ใช้ {2}ใน Regexบทนำ: ทำไม Pretty URL จึงสำคัญต่อ SEO?
ในการสร้างเว็บไซต์ที่เน้น SEO หนึ่งในปัจจัยสำคัญคือการทำให้ URL ของหน้าเว็บมีความ “อ่านง่าย” และ “เป็นมิตรกับผู้ใช้” มากที่สุด หรือที่เรียกว่า “Pretty URL” เช่น:
• ❌ https://example.com/index.php?page=hotel&id=8
• ✅ https://example.com/booking/th/loftatsima
Pretty URL ไม่เพียงช่วยให้ผู้ใช้งานเข้าใจหน้าเว็บได้ง่ายขึ้น แต่ยังช่วยให้ Search Engine เช่น Google วิเคราะห์โครงสร้างเว็บไซต์ได้ชัดเจน จึงมีผลต่ออันดับ SEO โดยตรง
ความท้าทายเมื่อใช้ Nginx กับ Regular Expression
{2}
โดยทั่วไปแล้ว นักพัฒนาจะใช้ {2} ใน regex เช่น:
rewrite ^/booking/([a-z]{2})/([a-z0-9\-]+)$ /booking.php?lang=$1&hotel_slug=$2 last;
เพื่อจับค่าภาษาแบบ 2 ตัวอักษร เช่น th, en, jp แต่ในบางเวอร์ชันของ Nginx (โดยเฉพาะบน Debian/Ubuntu ที่ใช้ legacy package) การใช้ {2} อาจเกิด syntax error และทำให้ Nginx ไม่สามารถ reload ได้
เช่น:
[emerg] directive "rewrite" is not terminated by ";" in /etc/nginx/sites-enabled/default:161
วิธีแก้ปัญหา: ใช้
[a-z][a-z]
แทน
{2}
เพื่อหลีกเลี่ยงปัญหานี้ เราสามารถเปลี่ยน {2} เป็น [a-z][a-z] ซึ่งมีความหมายเหมือนกัน คือจับตัวอักษรภาษาอังกฤษตัวเล็ก 2 ตัวต่อกัน
rewrite ^/booking/([a-z][a-z])/([a-z0-9\-]+)$ /booking.php?lang=$1&hotel_slug=$2 last;
การทดสอบ Rewrite ทำงานหรือไม่
คำสั่ง curl:
curl -i http://yourdomain.com/booking/th/loftatsima
ผลลัพธ์ควรมีสถานะ HTTP/1.1 200 OK และแสดงเนื้อหาจาก booking.php โดยค่าของ $_GET[‘lang’] และ $_GET[‘hotel_slug’] ถูกดึงมาถูกต้อง
การใช้ PHP debug:
ใน booking.php ใส่โค้ดเพื่อ debug:
<pre><?php print_r($_GET); ?></pre>
จะเห็น:
Array
(
[lang] => th
[hotel_slug] => loftatsima
)
ทำไม
[a-z][a-z]
ถึงเหมาะกับ SEO และ Nginx
- ✅ ปลอดภัยจาก syntax error บน Nginx ที่ไม่รองรับ {} syntax
- ✅ คงฟังก์ชันการจับภาษา เช่น th, en, jp, zh
- ✅ ทำงานร่วมกับ WordPress หรือ PHP ได้ทันที
- ✅ ช่วยให้ URL สะอาด รองรับการแชร์ได้ง่าย
ข้อควรระวัง
- หลีกเลี่ยงการซ้อน location / หลาย block ใน virtual host เดียว
- อย่าลืม ; ท้าย rewrite ทุกบรรทัด
- อย่าใช้ if directive กับ regex ที่ซับซ้อนใน nginx.conf โดยตรง — แนะนำใช้ rewrite ภายใต้ location
สรุป
การใช้งาน Pretty URL ที่รองรับหลายภาษาเป็นหัวใจหลักของเว็บไซต์ที่มีผู้ใช้งานหลากหลายชาติ หากคุณใช้ Nginx และต้องการความเสถียรโดยไม่เจอปัญหา syntax error จาก {2} ควร:
- เปลี่ยนเป็น [a-z][a-z]
- จัดการ URL rewrite ใน block เดียว
- ทดสอบด้วย curl, phpinfo(), หรือ print_r($_GET)
ตัวอย่างบทความ SEO ที่ควรทำ
- โครง URL: /booking/en/luxury-resort
- รองรับหลายภาษา
- Meta title และ description ต้องตรงกับ slug
- Internal link ควรใช้ Pretty URL
- Sitemap ควรใช้ URL ที่ rewrite แล้วเสมอ