SEO หลายภาษา: 5 ข้อผิดพลาด hreflang และ canonical ที่เราแก้

ปัญหา SEO หลายภาษาส่วนใหญ่มาจากความผิดพลาดห้าข้อ คือแท็ก hreflang ที่ไม่ชี้หากัน, canonical URL ที่มี query string ติดมาด้วย, ข้อความเดียวกันที่เผยแพร่ภายใต้ URL ของหลายภาษา, หน้าที่ยังไม่ได้แปลแต่ทำเหมือนแปลแล้ว และ sitemap ที่ระบุหน้าซึ่งไม่มีอยู่จริงในภาษานั้น ทั้งหมดนี้มองไม่เห็นเลยเวลาเปิดเว็บไซต์ในเบราว์เซอร์ ระหว่างวันที่ 31 ตุลาคมถึง 4 พฤศจิกายน 2569 เราพบทั้งห้าข้อบนเว็บไซต์ของเราเอง wedodevwork.com ซึ่งมีให้เลือกทั้งภาษาอังกฤษ ดัตช์ ฝรั่งเศส เยอรมัน และไทย
เราค้นพบได้อย่างไร
เรา crawl ทุก URL ใน sitemap ซึ่งตอนนั้นมี 776 URL แล้วเปรียบเทียบ title, description, canonical tag และ hreflang tag ในแต่ละภาษา เรายังอ่านรายงานการจัดทำดัชนีหน้าเว็บ (page indexing) ใน Google Search Console ซึ่งแสดง URL ที่เราไม่เคยตั้งใจเผยแพร่ ทุกข้อด้านล่างนี้เราแก้แล้ว พร้อมอธิบายว่าเกิดอะไรขึ้นและแก้อย่างไร
1. เวอร์ชันภาษาที่ไม่ชี้หากัน
แท็ก hreflang บอก Google ว่า URL ไหนคือเวอร์ชันภาษาดัตช์ ฝรั่งเศส หรือไทยของหน้านั้น เพื่อให้แสดงเวอร์ชันที่ถูกต้องในแต่ละประเทศ แท็กนี้ใช้งานได้ก็ต่อเมื่อทุกเวอร์ชันระบุเวอร์ชันอื่นครบทุกเวอร์ชัน รวมถึงตัวมันเองด้วย
บทความบล็อกของเราระบุแค่ภาษาของตัวเองกับ x-default บทความภาษาอังกฤษไม่พูดถึงภาษาดัตช์ และบทความภาษาดัตช์ก็ไม่พูดถึงภาษาอังกฤษ สาเหตุคือโค้ดบรรทัดเดียว หน้าบล็อกส่งรายการภาษาที่แปลแล้วมาโดยใช้ชื่อ languages ซึ่งไปเขียนทับรายการภาษาของทั้งไซต์ที่ SEO component อ่านอยู่ ทำให้ alternate ทุกตัวไม่มีรหัสภาษาและถูกทิ้งไป หน้าเว็บดูสมบูรณ์แบบ มีแต่ HTML source เท่านั้นที่เผยปัญหา
วิธีแก้คือเปลี่ยนชื่อ key ตัวนั้น ตั้งแต่วันที่ 4 พฤศจิกายน ทุกบทความระบุคำแปลที่มีอยู่จริงครบทุกภาษา บทความที่ไม่มีเวอร์ชันภาษาไทยจะระบุสี่ภาษา ไม่ใช่ห้าภาษา
ลองตรวจเว็บของคุณ: เปิด page source ของหน้าที่แปลแล้วหนึ่งหน้า แล้วค้นหา hreflang คุณควรเห็นหนึ่งบรรทัดต่อหนึ่งภาษา ชุดเดียวกันในทุกเวอร์ชัน และมี x-default ด้วย
2. Canonical URL ที่มี query string
Search Console แสดงให้เห็นว่า Google จัดทำดัชนีหน้าอย่าง /th/chat?topic=project_senior และ /th/chat?topic=dedicated_developer_medior เป็นหน้าแยกกัน ปุ่มข้อเสนอของเราลิงก์ไปยังหน้าแชตพร้อมพารามิเตอร์ ?topic= ที่เลือกหัวข้อไว้ให้ล่วงหน้า แต่ canonical tag ใช้ URL เต็มซ้ำ รวม query string ด้วย ทำให้ทุกลิงก์หัวข้อและทุกลิงก์ที่มีพารามิเตอร์ติดตามอ้างว่าตัวเองเป็นหน้าแยกต่างหาก
วิธีแก้: ตอนนี้ canonical และ hreflang tag ใช้เฉพาะ path พารามิเตอร์ยังเลือกหัวข้อให้ล่วงหน้าเหมือนเดิม เพียงแต่ไม่สร้างหน้าใหม่ในสายตา Google อีกต่อไป เรื่องนี้ยิ่งสำคัญสำหรับเว็บไซต์หลายภาษา เพราะหน้าซ้ำทุกหน้าจะถูกคูณด้วยจำนวนภาษา
3. ข้อความภาษาอังกฤษเดียวกันภายใต้ URL ห้าภาษา
คู่มือแก้ปัญหาฟรีของเรามีเฉพาะภาษาอังกฤษ แต่เว็บไซต์กลับให้บริการภายใต้ prefix ครบทั้งห้าภาษา ตั้งแต่ /en/fixes/… ไปจนถึง /th/fixes/… ด้วย title และข้อความภาษาอังกฤษชุดเดียวกัน หกคู่มือคูณห้าภาษา เท่ากับ 30 หน้าที่เกือบซ้ำกันและแข่งกันเอง
วิธีแก้: ตอนนี้ทุกเวอร์ชันภาษามี canonical ชี้ไปที่ URL ภาษาอังกฤษ hreflang ระบุเฉพาะภาษาอังกฤษ และ sitemap ระบุแต่ละคู่มือเพียงครั้งเดียว ซึ่งทำให้ลบ 24 URL ออกจาก sitemap ผู้เข้าชมบนเว็บไซต์ภาษาดัตช์ยังคงเห็นเมนูภาษาดัตช์รอบ ๆ คู่มือ
4. หน้าที่ยังไม่ได้แปลแต่ทำเหมือนแปลแล้ว
หน้างานภาษาเยอรมันของเรามี title ว่า "Offene Stelle" และ description ว่า "Bewerben Sie sich als bei…" โดยไม่มีชื่อตำแหน่งงาน เพราะไม่มีตำแหน่งงานไหนมีคำแปลภาษาเยอรมัน เทมเพลตจึงเติมค่าว่างลงไป ส่วนกรณีศึกษาภาษาเยอรมันห้าหน้าแสดง description ทั่วไปของเว็บไซต์ภาษาอังกฤษด้วยเหตุผลเดียวกัน
การไม่มีคำแปลไม่ใช่ปัญหา แต่หน้าที่ทำเหมือนเป็นภาษาเยอรมันทั้งที่ไม่มีเนื้อหาภาษาเยอรมันเลยเป็นปัญหา เพราะ Google มองว่าเนื้อหาบาง และผู้เข้าชมก็รู้สึกแปลก วิธีแก้: หน้าที่ไม่มีคำแปลจะได้ noindex, follow และ canonical ชี้ไปที่เวอร์ชันภาษาอังกฤษ บทความบล็อกของเราที่ไม่มีคำแปลภาษาไทยทำงานแบบนี้อยู่แล้ว
5. Sitemap ที่ระบุทุกภาษาสำหรับทุกหน้า
หน้าบล็อกและหน้าบริการของเราระบุเฉพาะภาษาที่เขียนไว้จริง แต่กรณีศึกษาและหน้างานถูกระบุครบทั้งห้าภาษา sitemap จึงบอกให้ Google crawl หน้าภาษาเยอรมันที่ไม่มีข้อความภาษาเยอรมัน ตอนนี้ sitemap สร้างจากคำแปลที่มีอยู่จริง ซึ่งลบไปอีก 10 URL
สิ่งที่เปลี่ยนไป
| ข้อผิดพลาด | หน้าที่ได้รับผลกระทบ | แก้เมื่อ |
|---|---|---|
| hreflang หายไประหว่างเวอร์ชันของบทความบล็อก | ทุกบทความบล็อกที่มีคำแปล | 4 พ.ย. 2569 |
| Query string ใน canonical URL | ทุกลิงก์แชตที่มีหัวข้อ | 31 ต.ค. 2569 |
| คู่มือภาษาอังกฤษภายใต้ URL 5 ภาษา | 30 หน้า | 1 พ.ย. 2569 |
| หน้างานและกรณีศึกษาที่ยังไม่ได้แปลถูกจัดทำดัชนี | 10 หน้าภาษาเยอรมัน | 1 พ.ย. 2569 |
| Sitemap ระบุหน้าที่ยังไม่ได้แปล | ลบออกรวม 34 URL | 1 พ.ย. 2569 |
Google จะทิ้งหน้าซ้ำเมื่อ recrawl ซึ่งใช้เวลาหลายสัปดาห์ ไม่ใช่ไม่กี่วัน เราส่ง URL ที่เปลี่ยนไปให้ Bing และเสิร์ชเอนจินอื่นด้วย IndexNow ดูสิ่งที่ Bing Webmaster Tools บอกเรา
ตรวจเว็บไซต์หลายภาษาของคุณเอง
- เปิดหน้าหนึ่งหน้าในแต่ละภาษาแล้วดู source ค้นหา
hreflangทุกเวอร์ชันควรระบุชุดภาษาเดียวกัน รวมถึงx-default - ค้นหา
rel="canonical"ควรเป็น URL ที่สะอาดของเวอร์ชันภาษานั้น ไม่มี?utm_หรือพารามิเตอร์อื่น - ใน Google Search Console เปิดรายงานการจัดทำดัชนีหน้าเว็บ แล้วมองหา URL ที่มีเครื่องหมายคำถาม หรือหน้าในภาษาที่คุณไม่เคยเขียน
- เลือกหน้าที่คุณไม่เคยแปล แล้วเปิดในอีกภาษาหนึ่ง ถ้าแสดงข้อความที่ยังไม่ได้แปล หน้านั้นควรเป็น
noindexหรือให้ canonical ชี้ไปที่ต้นฉบับ - เปิด sitemap ของคุณ แล้วตรวจว่าระบุเฉพาะหน้าที่มีอยู่จริงในภาษานั้น
การแปลเป็นภาษาไทยมีข้อควรระวังของตัวเอง ตั้งแต่ฟอนต์ไปจนถึงการตัดคำ อ่านได้ที่การแปลเว็บไซต์ของคุณเป็นภาษาไทย ส่วนสิ่งที่ควรวางไว้ในเว็บไซต์ตั้งแต่ต้น ดูคู่มือ SEO สำหรับนักพัฒนาของเรา
อยากให้เราช่วยตรวจเว็บไซต์ของคุณไหม
เริ่มได้จากการตรวจเว็บไซต์ของเรา หรือส่งโดเมนของคุณมาทางติดต่อเรา การตรวจ SEO หลายภาษาและการแก้ไขแบบนี้มักใช้เวลาไม่กี่ชั่วโมง ซึ่งคุณจ่ายเป็นรายชั่วโมง หรือใช้บัตรชั่วโมง 14 ชั่วโมงราคา ฿25,900 ก็ได้
คำถามที่พบบ่อย
hreflang คืออะไร
แท็ก HTML (หรือรายการใน sitemap) ที่บอกเสิร์ชเอนจินว่า URL ไหนคือเวอร์ชันของหน้านั้นสำหรับภาษาหรือประเทศหนึ่ง ๆ เพื่อให้ผู้ใช้แต่ละคนเห็นเวอร์ชันที่ถูกต้องในผลการค้นหา ทุกเวอร์ชันต้องระบุครบทุกเวอร์ชัน รวมถึงตัวมันเอง
จำเป็นต้องมี x-default ไหม
แนะนำให้มี x-default บอก Google ว่าควรแสดงเวอร์ชันไหนเมื่อไม่มีภาษาใดของคุณตรงกับผู้ค้นหา ซึ่งมักเป็นหน้าภาษาอังกฤษหรือหน้าเลือกภาษา
Canonical URL ควรมี query string ไหม
โดยปกติไม่ควร พารามิเตอร์อย่าง ?utm_source หรือ ?topic ไม่ได้เปลี่ยนเนื้อหา canonical จึงควรเป็น path ที่สะอาด ไม่เช่นนั้นทุกรูปแบบของพารามิเตอร์อาจถูกจัดทำดัชนีเป็นหน้าแยกกัน
หน้าที่ฉันยังไม่ได้แปลควรทำอย่างไร
ไม่ต้องเผยแพร่ในภาษานั้น หรือกำหนดเวอร์ชันภาษานั้นเป็น noindex พร้อม canonical ไปที่ต้นฉบับ อย่าปล่อยให้เทมเพลตเติมหน้าที่ยังไม่ได้แปลด้วยข้อความว่างหรือข้อความทั่วไป
นานแค่ไหนกว่า Google จะทิ้งหน้าซ้ำ
ขึ้นอยู่กับว่า Google crawl เว็บไซต์ของคุณบ่อยแค่ไหน หน้าซ้ำจะหายไปเมื่อ Google recrawl ซึ่งโดยทั่วไปใช้เวลาหลายสัปดาห์ การส่ง sitemap ใน Search Console ช่วยได้ ส่วน IndexNow ช่วยให้เร็วขึ้นสำหรับ Bing และเสิร์ชเอนจินอื่น แต่ไม่ใช่ Google
ตรวจ hreflang บนเว็บไซต์ของฉันอย่างไร
เปิด page source ของแต่ละเวอร์ชันภาษาแล้วค้นหา hreflang แต่ละเวอร์ชันควรระบุชุดภาษาเดียวกันพร้อม x-default และทุก URL ในรายการนั้นควรตอบกลับเป็นหน้า 200 ที่มีแท็กชุดเดียวกัน
บทความที่เกี่ยวข้อง

Bing Webmaster Tools: สิ่งที่ต้องแก้ก่อน (รายงานของเราเอง)
สิ่งที่ต้องแก้ใน Bing Webmaster Tools ตามลำดับ: IndexNow, meta description ที่สั้น, alt text และ sitemap เก่า รายงานของเราเอง แก้ 61 ปัญหาในวันเดียว


Accessibility เว็บช็อป (EAA): ต้องแก้อะไร ทำไม Overlay ไม่ช่วย
กฎหมายการเข้าถึงของยุโรป (EAA) มีผลกับเว็บช็อปของคุณอย่างไร: 7 จุดทางเทคนิคที่ร้านส่วนใหญ่ต้องแก้ ตัวเลขจากการสแกนจริง และเหตุผลที่วิดเจ็ต overlay ไม่ใช่ทางออก


PHP 8.2 หมดอายุ 31 ธ.ค. 2569: ต้องทำอะไรตอนนี้
PHP 8.2 จะไม่มีการแก้ไขความปลอดภัยหลัง 31 ธันวาคม 2569 ควรย้ายไปเวอร์ชันไหน อะไรจะพังใน WordPress หรือ Laravel และอัปเกรดอย่างไรไม่ให้เว็บล่ม

