WordPress
Polylang vs WPML เลือกตัวไหนดี?
หากต้องการทำเว็บ WordPress รองรับหลายภาษา ตัวเลือกยอดนิยมมีอยู่สองตัวหลักคือ Polylang และ WPML ทั้งสองแตกต่างกันในเรื่องราคา ความซับซ้อน และความสามารถ การเลือกให้เหมาะสมกับโปรเจกต์จะช่วยให้ประหยัดค่าใช้จ่ายและลดความยุ่งยากได้มาก
Polylang เป็น Plugin ฟรีที่มีฟีเจอร์ครบพอสำหรับเว็บไซต์ทั่วไป ตั้งแต่การแปลหน้า โพสต์ หมวดหมู่ ไปจนถึงการตั้งค่า hreflang เพื่อ SEO หลายภาษา ส่วน WPML เป็น Plugin แบบเสียเงิน ราคาเริ่มต้นประมาณ 39–99 USD ต่อปี มีฟีเจอร์ขั้นสูงเพิ่มเติม เช่น การแปลสตริง (String Translation) และการรองรับ WooCommerce อย่างสมบูรณ์ในแพ็กเกจระดับสูง
| คุณสมบัติ | Polylang (ฟรี) | Polylang Pro | WPML |
|---|---|---|---|
| ราคา | ฟรี | ~99 USD/ปี | 39–99 USD/ปี |
| แปลโพสต์/หน้า | ✓ | ✓ | ✓ |
| แปล Custom Post Type | บางส่วน | ✓ | ✓ |
| hreflang อัตโนมัติ | ✓ | ✓ | ✓ |
| URL Structure ยืดหยุ่น | ✓ | ✓ | ✓ |
| String Translation | ✗ | ✓ | ✓ |
| WooCommerce รองรับ | Plugin เสริม | ✓ | ✓ (Multilingual) |
| ความง่ายในการใช้งาน | ง่าย | ง่าย | ปานกลาง |
สรุปแนะนำ: หากเป็นเว็บบล็อก เว็บบริษัท หรือเว็บแนะนำสินค้าทั่วไปที่ต้องการรองรับสองถึงสามภาษา Polylang ฟรีเพียงพอสมบูรณ์ ไม่ต้องจ่ายเงิน ควรพิจารณา WPML หรือ Polylang Pro เมื่อต้องการแปลสตริงในธีม Plugin ต่างๆ หรือต้องการรองรับ WooCommerce แบบสมบูรณ์
- เว็บบล็อก/พอร์ตโฟลิโอ: ใช้ Polylang ฟรีได้ทันที
- เว็บธุรกิจ SME: Polylang ฟรีหรือ Pro ขึ้นอยู่กับจำนวนภาษา
- ร้านค้าออนไลน์ WooCommerce: ควรพิจารณา Polylang Pro หรือ WPML Multilingual CMS
- เว็บขนาดใหญ่หลายภาษา: WPML มีระบบจัดการที่ครบกว่า
ติดตั้ง Polylang และตั้งค่าภาษาแรก
การติดตั้ง Polylang ทำได้ผ่าน WordPress Admin Panel โดยตรง ไม่ต้องอัพโหลดไฟล์เองหรือแก้ไขอะไรเพิ่มเติม เพียงเข้า Plugins → Add New แล้วค้นหาคำว่า "Polylang" จากนั้นคลิก Install Now แล้ว Activate ได้เลย
หลัง Activate จะมีหน้า Setup Wizard ปรากฏขึ้นมาทันที Polylang จะถามให้เพิ่มภาษาแรก ซึ่งโดยปกติควรเป็นภาษาหลักของเว็บไซต์ หากเว็บเดิมเป็นภาษาไทย ให้เลือก Thai (ไทย) เป็นภาษาแรก ระบบจะตั้งให้ภาษานี้เป็น Default Language โดยอัตโนมัติ
- เข้า WordPress Admin → Plugins → Add New Plugin
- ค้นหา "Polylang" ในช่อง Search
- คลิก Install Now ที่ Plugin ของ WP SYNTEX แล้วคลิก Activate
- หน้า Setup Wizard จะเปิดขึ้น คลิก Let's Start!
- ในหัวข้อ Add Languages ให้เลือก Thai จาก Dropdown แล้วคลิก Add Language
- ตรวจสอบว่าภาษาไทยขึ้นในรายการ Installed Languages แล้วคลิก Continue
- ในหัวข้อ Media ให้เลือกว่าจะแชร์รูปภาพระหว่างภาษาหรือแยก ส่วนใหญ่เลือก Synchronize all media ดีกว่า
- คลิก Finish เพื่อเสร็จสิ้น Setup
หลังติดตั้งสำเร็จ จะมีเมนูใหม่ชื่อ Languages ปรากฏในแถบด้านซ้ายของ Admin ซึ่งเป็นศูนย์กลางการจัดการภาษาทั้งหมดของ Polylang นอกจากนี้ในหน้า Posts และ Pages จะมีคอลัมน์ภาษาเพิ่มมาให้เห็นว่าแต่ละโพสต์ถูกตั้งเป็นภาษาอะไร
เพิ่มภาษาที่สอง (EN) และตั้งค่า URL Structure
หลังจากตั้งภาษาแรก (ไทย) เรียบร้อยแล้ว ขั้นตอนต่อไปคือเพิ่มภาษาที่สอง ในที่นี้คือ English โดยไปที่ Languages → Languages แล้วใช้ช่อง Add New Language ทางด้านซ้าย เลือก English จาก Dropdown ของ Choose a language แล้วคลิก Add Language ระบบจะเพิ่ม English เข้าในรายการทันที
หลังจากเพิ่มภาษาแล้ว ให้ตั้งค่า URL Structure ซึ่งเป็นส่วนสำคัญมากสำหรับ SEO โดยไปที่แท็บ URL Modifications หรือผ่าน Settings → Languages → URL Modifications Polylang มีตัวเลือก URL ดังนี้
- The language is set from content: ไม่มีการเปลี่ยน URL (ไม่แนะนำ เพราะ Google ไม่สามารถแยกภาษาได้ชัด)
- The language is set from a different domain: ใช้โดเมนแยกกัน เช่น th.example.com และ en.example.com
- The language is set from the subdirectory: เพิ่ม /th/ หรือ /en/ ใน URL — แนะนำสำหรับเว็บส่วนใหญ่
ตัวเลือกที่แนะนำที่สุดคือ Subdirectory เพราะ Google เข้าใจได้ชัดเจน SEO แยกกันได้ดี และตั้งค่าง่ายที่สุด ตัวอย่างเช่น เว็บภาษาไทยจะอยู่ที่ yoursite.com/th/ และเว็บภาษาอังกฤษอยู่ที่ yoursite.com/en/ หรือจะตั้งให้ภาษาหลัก (ไทย) ไม่มี prefix ก็ได้ โดยเลือก Hide URL language information for default language
- ไปที่ Languages → Languages แล้วคลิกแท็บ Settings
- ในส่วน URL Modifications เลือก The language is set from the subdirectory
- ติ๊ก Remove /language/ in pretty permalinks ถ้าต้องการให้ URL สั้น
- เลือก Force language in URL เพื่อให้ URL ภาษา Default มี prefix ด้วย
- คลิก Save Changes
- ไปที่ Settings → Permalinks แล้วกด Save Changes อีกครั้งเพื่อให้ WordPress รีเฟรช .htaccess
แปลหน้า/โพสต์แต่ละบทความ
เมื่อตั้งค่าภาษาครบแล้ว ขั้นตอนสำคัญคือการสร้างเวอร์ชันแปลของแต่ละโพสต์หรือหน้า ใน Polylang การแปลไม่ได้ทำอัตโนมัติ (Polylang ฟรีไม่รวม Machine Translation) แต่ทำให้คุณสร้างโพสต์คู่ขนานได้อย่างง่ายดาย
ในหน้า Posts List จะมีไอคอนธงชาติแสดงในแต่ละแถว ถ้าโพสต์ยังไม่มีเวอร์ชันภาษาอังกฤษ ไอคอน EN จะเป็นสีเทา ให้คลิกที่ไอคอน EN เพื่อสร้างโพสต์ใหม่ที่ผูกเป็นคู่แปลกัน ระบบจะเปิด Editor ใหม่ให้คุณพิมพ์เนื้อหาภาษาอังกฤษได้เลย
- ไปที่ Posts → All Posts
- ดูคอลัมน์ภาษาทางด้านขวา หากมีธงชาติหลายธงแสดงว่ารองรับหลายภาษาแล้ว
- คลิกไอคอนธง EN (สีเทา) ในแถวของโพสต์ที่ต้องการแปล
- WordPress Editor จะเปิดหน้าใหม่ พร้อมข้อความว่าเป็น "Translation of: [ชื่อโพสต์เดิม]"
- ใส่ชื่อเรื่อง (Title) และเนื้อหาภาษาอังกฤษ
- ตรวจสอบใน Language Box ทางขวาว่าถูกตั้งเป็น English
- คลิก Publish
สำหรับ Pages เช่น หน้า About, Contact, หรือหน้า Services ให้ทำแบบเดียวกันใน Pages → All Pages Polylang จะผูกความสัมพันธ์ระหว่างหน้าไทยและหน้าอังกฤษให้อัตโนมัติ ซึ่งระบบจะใช้ความสัมพันธ์นี้ในการสร้าง hreflang tag สำหรับ SEO
ตั้งค่า Language Switcher ใน Menu
Language Switcher คือปุ่มหรือลิ้งค์ที่ให้ผู้เยี่ยมชมเว็บสามารถสลับภาษาได้ด้วยตัวเอง Polylang มีตัวเลือก Language Switcher ให้หลายรูปแบบ ทั้งแบบ Widget ในแถบด้านข้าง และแบบ Menu Item ในเมนูนำทาง
วิธีเพิ่ม Language Switcher ใน Navigation Menu ทำได้ผ่าน Appearance → Menus โดย Polylang จะเพิ่มส่วนชื่อ Language Switcher ไว้ด้านซ้ายให้สามารถลากไปใส่ในเมนูได้เลย นอกจากนี้ยังมีตัวเลือกใน Widget Area เช่น Sidebar หรือ Footer
- ไปที่ Appearance → Menus
- เลือกเมนูที่ต้องการเพิ่ม Language Switcher (เช่น Primary Menu)
- ทางด้านซ้ายจะมีหัวข้อ Language Switcher ในรายการ Add Menu Items
- คลิก Add to Menu เพื่อใส่ Language Switcher เข้าในเมนู
- คลิก Save Menu
นอกจาก Menu แล้ว สามารถเพิ่ม Language Switcher เป็น Widget ได้โดยไปที่ Appearance → Widgets (หรือผ่าน Gutenberg Site Editor) แล้วค้นหา Widget ชื่อ Polylang Language Switcher ลากไปวางในตำแหน่งที่ต้องการ เช่น Sidebar หรือ Footer Widget Area
- แสดงชื่อภาษา: Thai, English (อ่านง่ายสำหรับผู้ใช้ใหม่)
- แสดง Flag ธงชาติ: สวยงาม รู้ทันทีว่าเปลี่ยนภาษาได้
- แสดงชื่อย่อ (Slug): TH, EN — ประหยัดพื้นที่บน Mobile
- ซ่อนภาษาปัจจุบัน: ป้องกันความสับสน
- Force Link ไปหน้า Home: เปิดเมื่อยังไม่มีเนื้อหาภาษานั้น
SEO Multilingual: hreflang และ Canonical
หนึ่งในสาเหตุหลักที่นักพัฒนาเลือก Polylang คือความสามารถในการจัดการ SEO หลายภาษาโดยอัตโนมัติ Polylang จะสร้าง hreflang tag ใน <head> ของทุกหน้าให้ Google และ Search Engine อื่นๆ ทราบว่าหน้าใดเป็นภาษาอะไร และหน้าใดเป็น Alternative กันบ้าง
ตัวอย่าง hreflang ที่ Polylang สร้างให้อัตโนมัติจะมีหน้าตาแบบนี้ ซึ่ง Google ใช้ข้อมูลนี้เพื่อแสดงผลการค้นหาที่ตรงกับภาษาของผู้ใช้
<link rel="alternate" hreflang="th" href="https://yoursite.com/th/blog-post/" />
<link rel="alternate" hreflang="en" href="https://yoursite.com/en/blog-post/" />
<link rel="alternate" hreflang="x-default" href="https://yoursite.com/th/blog-post/" />
สำหรับ Canonical URL นั้น แต่ละหน้าแต่ละภาษาจะมี Canonical ชี้ไปที่ตัวเองเสมอ ไม่ข้ามภาษา ซึ่ง Polylang จัดการให้อัตโนมัติ ทำให้ไม่เกิดปัญหา Duplicate Content ระหว่างหน้าภาษาไทยและภาษาอังกฤษ
- Polylang สร้าง hreflang อัตโนมัติเมื่อโพสต์ผูกกันเป็นคู่แปล
- ต้องแน่ใจว่าโพสต์แต่ละคู่ผูกกัน (เห็นธงสีในหน้า Posts List)
- หาก Yoast SEO หรือ Rank Math เปิดใช้งานด้วย ต้องตรวจสอบว่า Plugin ไหน Generate hreflang กันแน่ ป้องกัน Conflict
- แนะนำให้ปิด hreflang ใน Yoast/Rank Math แล้วให้ Polylang เป็นผู้ดูแลฝ่ายเดียว
- ใช้ Google Search Console ตรวจสอบ hreflang Errors ใต้ International Targeting
ตรวจสอบว่า Polylang ทำงานถูกต้อง
หลังตั้งค่าทุกอย่างเรียบร้อยแล้ว ควรตรวจสอบความถูกต้องของ Polylang ก่อน Publish หน้าสาธารณะจริง เพื่อให้มั่นใจว่า hreflang ถูกสร้างครบ Language Switcher ทำงาน และ URL Structure ตรงตามที่ตั้งไว้
สามารถตรวจสอบได้หลายวิธี ทั้งจาก Browser Source Code, Developer Tools ใน Chrome/Firefox รวมถึงการใช้เครื่องมือ Online ตรวจ hreflang และการดู Sitemap.xml ที่ Polylang จะสร้างแยกตามภาษา
# 1. ตรวจสอบ hreflang ใน source code ด้วย curl
curl -s "https://yoursite.com/th/about/" | grep -i hreflang
# ผลลัพธ์ที่ถูกต้องควรเห็น:
# <link rel="alternate" hreflang="th" href="https://yoursite.com/th/about/" />
# <link rel="alternate" hreflang="en" href="https://yoursite.com/en/about/" />
# <link rel="alternate" hreflang="x-default" href="https://yoursite.com/th/about/" />
# 2. ตรวจสอบ URL ภาษาอังกฤษว่า redirect ถูกต้อง
curl -I "https://yoursite.com/en/about/"
# HTTP/2 200 แสดงว่าหน้านี้มีอยู่จริง
# 3. ตรวจ Sitemap ที่ Polylang สร้าง
curl -s "https://yoursite.com/sitemap.xml" | grep sitemap
# ควรเห็น sitemap แยกภาษา เช่น sitemap-th.xml และ sitemap-en.xml
# 4. ตรวจว่า Language Switcher URL ถูกต้อง
# เปิดหน้าภาษาไทย แล้วดูว่า Link ของ EN ชี้ไปที่ /en/ หรือไม่
curl -s "https://yoursite.com/th/about/" | grep "/en/"
แก้ปัญหาที่พบบ่อย
แม้ Polylang จะติดตั้งง่าย แต่ก็มีปัญหาที่พบบ่อยหลายอย่างซึ่งมือใหม่มักเจอ โดยเฉพาะเมื่อใช้ร่วมกับ Plugin SEO อื่นๆ หรือธีมที่มี Custom Menu System เฉพาะ ดังนี้
hreflang ไม่ปรากฏใน Source Code — Yoast/Rank Math Override
ปัญหานี้เกิดขึ้นบ่อยมากเมื่อใช้ Yoast SEO หรือ Rank Math ร่วมกับ Polylang เพราะ Plugin SEO เหล่านั้นก็มีระบบสร้าง hreflang ของตัวเองเช่นกัน เมื่อสองระบบทำงานพร้อมกัน อาจทำให้ hreflang หายไปหรือมีค่าผิดพลาด
วิธีแก้: เข้า Yoast SEO → SEO → Search Appearance → แท็บ General แล้วหาตัวเลือก hreflang หรือ "Internationalization" แล้วปิดออก จากนั้นรีเฟรชหน้าเว็บแล้วตรวจ Source Code ใหม่อีกครั้ง ใน Rank Math ให้ไปที่ Rank Math → General Settings → Links แล้วหา Disable hreflang
Language Switcher ไม่แสดงใน Menu — ต้องเพิ่ม Widget ใน Appearance
หากเพิ่ม Language Switcher เข้าเมนูแล้วแต่ยังไม่เห็นในหน้าเว็บ อาจเป็นเพราะธีมที่ใช้ไม่แสดง Menu Item บางประเภท หรืออาจเป็นเพราะเลือกเมนูผิด Location
วิธีแก้: ให้ลองเพิ่มผ่าน Appearance → Widgets แทน โดยค้นหา Widget "Polylang Language Switcher" แล้วลากไปวางใน Sidebar หรือ Footer Widget Area ซึ่งมักแสดงผลได้ดีกว่าเมนูในธีมบางตัว นอกจากนี้ตรวจสอบว่าเมนูที่แก้ไขเป็น Menu Location เดียวกับที่ธีมแสดงผลจริง
เนื้อหาเดียวกันแสดงซ้ำทั้งสองภาษา — ยังไม่ได้สร้าง Translation
ปัญหานี้เกิดเมื่อ Language Switcher เปลี่ยนภาษาแล้วเนื้อหายังเหมือนเดิม ส่วนใหญ่เป็นเพราะโพสต์หรือหน้านั้นยังไม่มีเวอร์ชันภาษาเป้าหมาย Polylang จึง Redirect กลับไปที่หน้า Home หรือแสดงหน้าภาษาเดิมแทน
วิธีแก้: ตรวจสอบใน Posts List ว่าธงภาษาอังกฤษของโพสต์นั้นเป็นสีสดหรือสีเทา ถ้าสีเทาแปลว่ายังไม่มี Translation ให้คลิกไอคอนธงเพื่อสร้างโพสต์เวอร์ชันภาษาอังกฤษ จากนั้น Publish และทดสอบใหม่
URL Structure เปลี่ยนไปทำให้ Link เก่าเสีย — ตั้ง Redirect
เมื่อเปิดใช้ Polylang และเปลี่ยน URL Structure เป็นแบบ Subdirectory (/th/ /en/) URL เก่าที่ไม่มี prefix อาจไม่ทำงานอีกต่อไป ทำให้ Link ที่แชร์ไว้ก่อนหน้า หรือ Backlink จากเว็บอื่นเสียหาย
วิธีแก้: ใช้ Plugin Redirect เช่น Redirection หรือ Safe Redirect Manager เพื่อตั้ง 301 Redirect จาก URL เก่าไปยัง URL ใหม่ที่มี /th/ prefix ตัวอย่าง ตั้ง Redirect จาก /about/ ไปยัง /th/about/ นอกจากนี้ควรอัพเดท Internal Link ในเนื้อหาทั้งหมดด้วย เพื่อหลีกเลี่ยงการผ่าน Redirect ที่ทำให้เว็บช้าลงเล็กน้อย