ตัวอย่างเช่น หากมีปัญหาด้านรูปแบบรหัสภาษา หรือเส้นทางลิงก์ไม่สมบูรณ์ อาจทำให้เครื่องมือค้นหาไม่สามารถระบุภาษา หรือภูมิภาคของหน้าเว็บได้อย่างถูกต้อง ส่งผลให้หน้าเว็บไซต์หลายภาษามาแย่งชิงทราฟฟิกกันเอง และพลาดกลุ่มเป้าหมายได้
บทความนี้จะสรุป 7 ข้อผิดพลาดที่พบบ่อยที่สุดในการตั้งค่า hreflang จากมุมมองทางเทคนิค พร้อมแนะนำให้ตรวจสอบเป็นประจำด้วยเครื่องมือ เพื่อป้องกันความผิดพลาดเล็กน้อยที่อาจทำให้ประสิทธิภาพ SEO โดยรวมลดลง

ข้อผิดพลาดรูปแบบรหัสภาษา หรือรหัสภูมิภาค
ตัวอย่างเช่น ใช้ตัวอักษรใหญ่ (เช่น EN-US
) หรือสะกดผิด (เช่น เขียน zh-CN
เป็น zh-CH
) อาจทำให้เครื่องมือค้นหาไม่สามารถอ่านข้อมูลได้ถูกต้อง และถือว่าแท็กไม่ถูกต้อง
แม้รหัสจะดูเหมือนถูกต้อง (เช่น ใช้ es-ES
แทน es
) แต่บางครั้งข้อมูลส่วนเกินก็ทำให้ระบบสับสนได้
ผลกระทบค่อนข้างรุนแรง เช่น ทราฟฟิกจากผู้ใช้ในสเปนอาจถูกส่งไปยังหน้าภาษาโปรตุเกสแทน
กฎของรหัสตามมาตรฐาน ISO
- รหัสภาษา: ต้องใช้รหัสอักษรพิมพ์เล็ก 2 ตัวตามมาตรฐาน ISO 639-1 (เช่น
en
, es
, zh
). - รหัสภูมิภาค: ไม่จำเป็นเสมอไป ใช้อักษรพิมพ์ใหญ่ 2 ตัวตามมาตรฐาน ISO 3166-1 (เช่น
US
, GB
, CN
). - รูปแบบรวมกัน: เชื่อมด้วยเครื่องหมายขีดกลาง เช่น
en-US
(ภาษาอังกฤษแบบอเมริกัน) หรือ zh-CN
(ภาษาจีนตัวย่อ).
กรณียกเว้น:
- หากใช้เฉพาะรหัสภาษา (เช่น
fr
) จะหมายถึงผู้ใช้ที่พูดภาษานั้นทั้งหมด ไม่จำกัดภูมิภาค - กรณีภาษาจีนตัวเต็ม ให้ใช้
zh-Hant
(ภาษาจีนตัวเต็ม) หรือ zh-Hant-TW
(ภาษาจีนตัวเต็มในไต้หวัน) แทน zh-TW
เพื่อป้องกันความสับสนกับภาษาจีนตัวย่อของไต้หวัน
กรณีข้อผิดพลาดทั่วไปและผลกระทบ
ข้อผิดพลาด 1: ใช้ตัวพิมพ์เล็ก/ใหญ่สลับกัน
- ตัวอย่างผิด:
EN-us
(รหัสภาษาเป็นตัวพิมพ์ใหญ่ + รหัสภูมิภาคเป็นตัวพิมพ์เล็ก), Zh-cn
(ตัวอักษรแรกเป็นตัวพิมพ์ใหญ่) - ผลกระทบ: เครื่องมือค้นหาอาจไม่อ่านแท็กเลย ทำให้หน้าเว็บไม่แสดงกับผู้ใช้งานเป้าหมาย
ข้อผิดพลาด 2: สะกดผิด หรือใช้รหัสสมมุติ
- ตัวอย่างผิด:
pt-BZ
(รหัสบราซิลที่ถูกต้องคือ BR
), eu
(ภาษาบาสก์ อาจไม่รองรับในบางระบบ) - ผลกระทบ: รหัสที่ผิดหรือภาษาหายากจะทำให้ไม่ถูกจัดอันดับ และทราฟฟิกไหลไปหน้าภาษาหลัก
ข้อผิดพลาด 3: ใช้รหัสซ้ำซ้อน หรือผิดรูปแบบ
- ตัวอย่างผิด:
es-ES
(ภาษาสเปน + สเปน, จริงๆ ใช้แค่ es
ก็พอ), en-US-UK
(รูปแบบรวมหลายภูมิภาคที่ไม่ถูกต้อง) - ผลกระทบ: ข้อมูลส่วนเกินทำให้ระบบสับสน หน้าเว็บที่รหัสสั้นกว่าจะถูกแสดงก่อน
เครื่องมือแนะนำและวิธีตรวจสอบ
- Google hreflang Testing Tool: ใส่ URL เพื่อตรวจว่ารหัส hreflang ถูกต้องหรือไม่ (แนะนำใช้ร่วมกับ Search Console)
- Screaming Frog: ตรวจสอบ hreflang ขณะ Crawl เว็บไซต์ และส่งออกข้อผิดพลาดเป็นชุด (เวอร์ชันเสียเงิน)
- Hreflang Validator (เครื่องมือบุคคลที่สาม): ตรวจสอบออนไลน์ฟรี แสดงข้อผิดพลาดหรือความขัดแย้ง
ขั้นตอนแก้ไขจริง
ตรวจสอบโค้ดปัจจุบัน: หากใช้ WordPress ให้ใช้ปลั๊กอิน (เช่น Yoast SEO) หรือดู Source Code โดยตรงเพื่อค้นหาแท็ก <link rel="alternate" hreflang="..." />
การแทนที่โค้ดที่ผิดพลาดแบบกลุ่ม:
- หากใช้ปลั๊กอินหลายภาษา (เช่น WPML) ให้แก้ไข “รหัสภาษา” โดยตรงในตั้งค่าภาษา
- หากแก้ไขเอง ให้แน่ใจว่าทุกหน้ามีรูปแบบเดียวกัน (เช่น แทนที่
EN
เป็น en
ทั้งเว็บไซต์)
การเพิ่มรหัสภูมิภาค (ไม่บังคับ):
- เพิ่มเฉพาะเมื่อจำเป็นต้องแบ่งภูมิภาคอย่างละเอียด (เช่น
en-GB
สำหรับผู้ใช้สหราชอาณาจักร) หากไม่จำเป็นให้ใช้เฉพาะรหัสภาษา (เช่น fr
)
ตรวจสอบอีกครั้ง:ใช้เครื่องมือตรวจสอบอีกครั้ง เพื่อให้แน่ใจว่าหน้าเพจที่แก้ไขแล้วแสดงสถานะ 200 และไม่มีข้อผิดพลาดในการรวบรวมข้อมูล
ไม่ใช้ URL แบบสัมบูรณ์อย่างครบถ้วน
เจ้าของเว็บไซต์หลายคนเข้าใจผิดว่าการใช้เส้นทางสัมพัทธ์ (เช่น /de/page
) หรือการละเว้นโปรโตคอล (เช่น example.com/de
) จะทำให้การตั้งค่าง่ายขึ้น แต่จริงๆ แล้วอาจทำให้เกิดปัญหาร้ายแรง
ตัวอย่างเช่น หากมีทั้ง http
และ https
บนหน้าเดียวกัน การไม่ระบุโปรโตคอลอาจทำให้เครื่องมือค้นหาคิดว่าเป็นสองหน้าแยกกัน ส่งผลให้คะแนน SEO แยกออกจากกัน
หรือถ้าเว็บไซต์มีโครงสร้างแบบซับโดเมนหรือซับไดเรกทอรี การไม่ใช้ URL แบบสัมบูรณ์อย่างครบถ้วน อาจทำให้เครื่องมือค้นหาตีความผิด (เช่น ใช้ URL เดียวกันทั้งมือถือและเดสก์ท็อป)
นิยามและความสำคัญของ URL แบบสัมบูรณ์
URL แบบสัมบูรณ์ ต้องประกอบด้วย โปรโตคอล (เช่น http://
หรือ https://
) ชื่อโดเมนแบบเต็ม และเส้นทาง (เช่น https://www.example.com/de/page
)
ความสำคัญ:
- เครื่องมือค้นหาต้องสามารถแยกแยะหน้าแต่ละหน้าได้อย่างชัดเจน หากใช้เส้นทางสัมพัทธ์ (เช่น
/de/page
) อาจทำให้สับสนระหว่าง http
และ https
ส่งผลให้เกิดปัญหาคอนเทนต์ซ้ำ - หากมีซับโดเมนหรือซับไดเรกทอรี การไม่ใช้ URL แบบเต็มอาจทำให้เครื่องมือค้นหาตีความผิดว่าหน้าอยู่คนละที่ (เช่น
de.example.com/page
กับ www.example.com/de/page
)
สถานการณ์ปัญหาทั่วไป:
- มีทั้ง
http
และ https
แต่ใน hreflang ไม่ระบุโปรโตคอล ทำให้คะแนน SEO แยกกัน - ใช้คอนเทนต์เดียวกันทั้งมือถือและเดสก์ท็อป แต่โครงสร้าง URL ต่างกัน (เช่น
m.example.com/de
และ example.com/de
) โดยไม่ใช้ URL แบบสัมบูรณ์
ตัวอย่างข้อผิดพลาดและผลกระทบ
ข้อผิดพลาดที่ 1: ใช้เส้นทางสัมพัทธ์หรือไม่ระบุโปรโตคอล
ตัวอย่างผิด:
<link hreflang="de" href="/de/page" />
(เส้นทางสัมพัทธ์)<link hreflang="es" href="www.example.com/es/page" />
(ไม่ระบุ https://
)
ผลกระทบ:
- เครื่องมือค้นหาอาจตีความ
/de/page
เป็น http://example.com/de/page
ทั้งที่จริงๆ แล้วเป็น https
ทำให้แท็กไม่ทำงาน - หน้า HTTP และ HTTPS ถูกมองว่าเป็นคนละหน้า ทำให้คอนเทนต์ซ้ำและคะแนน SEO กระจายตัว
ข้อผิดพลาดที่ 2: ซับโดเมนไม่สอดคล้องกัน
- ตัวอย่างผิด: โฮมเพจใช้
https://example.com/fr/page
แต่ซับไซต์ภาษาฝรั่งเศสใช้ URL อื่น
https://fr.example.com/page
โดยที่ hreflang ไม่ได้เชื่อมโยงกันด้วย URL แบบสมบูรณ์ (Absolute URL)ผลกระทบ: เครื่องมือค้นหาไม่สามารถเชื่อมโยงหน้าของซับโดเมนกับหน้าเว็บไซต์หลักได้ ทำให้ผู้ใช้ภาษาฝรั่งเศสอาจถูกนำไปยังหน้าภาษาเริ่มต้นข้อผิดพลาดที่ 3: พารามิเตอร์แบบไดนามิกไม่ได้มาตรฐาน
- ตัวอย่างข้อผิดพลาด:
<link hreflang="ja" href="https://example.com/page?lang=ja" />
(มีพารามิเตอร์ติดตาม) - ผลกระทบ: เครื่องมือค้นหาอาจมองว่าเป็นหน้าต่างกัน (เช่น
?lang=ja
กับ ?lang=ja&utm=ads
) ทำให้แท็ก hreflang ไม่ครอบคลุมครบถ้วน
วิธีตรวจสอบด้วยเครื่องมือ
- Google Search Console:
ตรวจสอบ “รายงานความครอบคลุม” เพื่อค้นหาข้อผิดพลาดเกี่ยวกับ “หน้าเนื้อหาซ้ำ” หรือ “ไม่ได้ตั้งค่า hreflang” เพื่อหาลิงก์ URL ที่ไม่สมบูรณ์ - Screaming Frog:
ทำการ Crawl เว็บไซต์ แล้วกรอง hreflang
เพื่อตรวจสอบว่า href
ทุกตัวเป็น Absolute URL หรือไม่ (ตัวกรอง: //example.com
หรือ /path
) - Sitebulb:
รายงาน “การตรวจสอบ SEO ระหว่างประเทศ” จะแจ้งเตือน “hreflang URL ไม่สมบูรณ์” พร้อมคำแนะนำการแก้ไข
แนวทางแก้ไขและขั้นตอนปฏิบัติ
ระบบ CMS (เช่น WordPress):
การตั้งค่าปลั๊กอิน:
ถ้าใช้ปลั๊กอิน เช่น Yoast SEO ให้เปิดใช้งาน “สร้าง URL แบบสมบูรณ์” ในการตั้งค่าภาษา (มักต้องปิดตัวเลือก “เส้นทางแบบสัมพัทธ์”)
การแทนที่ข้อมูลในฐานข้อมูลแบบกลุ่ม:
ใช้คำสั่ง SQL หรือปลั๊กอิน เช่น Better Search Replace เพื่อแทนที่ href="/
ด้วย href="https://www.example.com/
การแก้ไขโค้ดด้วยตนเอง:
ใน HTML หรือระบบ Render ฝั่งเซิร์ฟเวอร์ ตรวจสอบให้แน่ใจว่า hreflang ทุกลิงก์เป็น Absolute URL เช่น:
การตั้งค่าเซิร์ฟเวอร์:
- บังคับให้ใช้โปรโตคอลเดียวกัน: ใช้
.htaccess
หรือ Nginx เพื่อ Redirect จาก http
ไป https
เพื่อหลีกเลี่ยงเนื้อหาผสม - ทำให้ URL เป็นแบบคงที่: เพิ่มการ Redirect 301 ระหว่างเส้นทางต่างๆ (เช่น
/de
กับ /de/
) เพื่อใช้ URL แบบ Absolute เพียงหนึ่งเดียว
ขาดแท็ก hreflang อ้างอิงตนเอง
ตัวอย่างเช่น หน้าเว็บภาษาฝรั่งเศสที่มีลิงก์ไปยังภาษาอังกฤษหรือสเปน แต่ไม่มี hreflang="fr"
ที่ชี้กลับมาหาตนเอง
เครื่องมือค้นหาอาจไม่สามารถระบุภาษาเจ้าของของหน้าได้ ทำให้ไม่แสดงในผลการค้นหาสำหรับผู้ใช้ภาษาฝรั่งเศส
บทบาทและความสำคัญของแท็กอ้างอิงตนเอง
แท็กอ้างอิงตนเอง คือ การเพิ่มแท็ก hreflang ที่อ้างอิงกลับมาที่หน้าเดิม (เช่น หน้าเว็บภาษาฝรั่งเศสต้องมี <link rel="alternate" hreflang="fr" href="URL ของตนเอง"/>
)
บทบาทสำคัญ:
- ช่วยบอกเครื่องมือค้นหาให้รู้ว่า หน้านี้เป็นของภาษา/ภูมิภาคใดอย่างชัดเจน เพื่อป้องกันความเข้าใจผิด
- สร้าง การเชื่อมโยงแบบวงปิด ระหว่างหน้าในหลายภาษา เพื่อส่งผ่านค่าความสำคัญอย่างถูกต้อง
ผลกระทบเมื่อขาดแท็กนี้:
- เครื่องมือค้นหาอาจมองว่าหน้าเว็บ “ไม่ได้ระบุภาษา” และจัดไปยังโฟลเดอร์ภาษาหลักโดยอัตโนมัติ ส่งผลให้สูญเสียทราฟฟิกจากผู้ใช้เป้าหมาย
- ในกรณีแข่งขันกันหลายภาษา (เช่น ทั้งหน้าภาษาอังกฤษและภาษาสเปนไม่มี hreflang อ้างอิงตัวเอง) อาจเกิดปัญหาเนื้อหาซ้ำซ้อนภายในเว็บไซต์
ตัวอย่างข้อผิดพลาดทั่วไปและกรณีศึกษา
ข้อผิดพลาด 1: ใช้ hreflang ผิดในเว็บไซต์ภาษาเดียว
- สถานการณ์: หน้าเว็บมีแค่ภาษาเดียว แต่กลับเพิ่ม hreflang ไปยังหน้าภาษาอื่นที่ไม่มีอยู่จริง
- ตัวอย่าง: เว็บภาษาอังกฤษล้วนใส่
hreflang="en"
ชี้กลับมาหาตัวเอง แต่ดันใส่ hreflang="es"
ที่ชี้ไปยังหน้าที่ไม่มีอยู่จริง ทำให้เครื่องมือค้นหาสับสน
ข้อผิดพลาด 2: ลืมตั้งค่าปลั๊กอินหลายภาษา
- ตัวอย่าง: ใช้ปลั๊กอิน WPML แต่ไม่ได้เลือกตัวเลือก “สร้าง hreflang อ้างอิงตัวเองอัตโนมัติ”
- ผลลัพธ์: ระบบสร้างแท็กเฉพาะลิงก์ภาษาต่างๆ แต่ขาดลิงก์ของหน้าปัจจุบัน
ข้อผิดพลาด 3: หน้าเว็บแบบไดนามิกไม่ใส่แท็กครบถ้วน
- ตัวอย่าง: เว็บไซต์ที่ใช้ React หรือ Vue เรนเดอร์ด้วย JavaScript แต่ไม่ได้แทรก hreflang อย่างถูกต้องใน
<head>
- ผลลัพธ์: บอทเครื่องมือค้นหาอาจอ่านไม่เจอแท็ก hreflang ที่สร้างแบบไดนามิก
เครื่องมือและวิธีการตรวจสอบ
ขั้นตอนที่ 1: ตรวจโค้ดด้วยตนเอง
- กด
Ctrl+U
เพื่อดูซอร์สโค้ด แล้วค้นคำว่า hreflang="xx"
ตรวจว่ามีแท็กที่ชี้กลับมาหน้าปัจจุบันหรือไม่ (xx คือรหัสภาษาของหน้า)
ขั้นตอนที่ 2: ตรวจผ่าน Google Search Console
- ใช้ “เครื่องมือตรวจสอบ URL” ใส่ลิงก์หน้า แล้วดูรายงาน “การกำหนดเป้าหมายระหว่างประเทศ” ว่ามีแจ้งว่า “ขาดแท็ก hreflang ของตัวเอง” หรือไม่
ขั้นตอนที่ 3: ใช้ Hreflang Validator
- กรอก URL หน้าเว็บ ระบบจะแสดงลิงก์ hreflang ทั้งหมด ถ้าขาดแท็กอ้างอิงตัวเองจะขึ้นแจ้งเตือนเป็นสีแดง
แนวทางแก้ไขและวิธีทำจริง
แก้ไขผ่าน CMS (เช่น WordPress):
แก้ไขการตั้งค่าปลั๊กอิน:
- ถ้าใช้ Yoast SEO: เข้า “การตั้งค่าขั้นสูง” แล้วเปิดตัวเลือก “เพิ่ม hreflang อ้างอิงตัวเอง”
- ถ้าใช้ WPML: เข้า “ตั้งค่าภาษา” → “ตัวเลือก SEO” แล้วติ๊ก “ใส่ลิงก์หน้าตัวเองด้วย”
แก้ไขด้วยตนเอง (เว็บ Static หรือ Custom Code):
เพิ่มโค้ดนี้ใน <head>
(ตัวอย่างหน้าเว็บภาษาฝรั่งเศส):
การแก้ไขหน้าเรนเดอร์แบบไดนามิก (เช่น React):
ในตรรกะการเรนเดอร์ฝั่งเซิร์ฟเวอร์ (SSR) สร้างแท็กอ้างอิงตนเองตามภาษาของหน้าปัจจุบันอย่างไดนามิก:
หลักการและความจำเป็นของการเชื่อมโยงแบบวงปิด
กฎสำคัญของ hreflang คือ หน้าที่เชื่อมโยงกันทั้งหมดต้องชี้ไปหากันและกัน เพื่อสร้างวงปิดที่สมบูรณ์ เช่น:
- หน้าภาษาเยอรมัน (
de
) ต้องชี้ไปยังหน้าภาษาอังกฤษ (en
), ภาษาฝรั่งเศส (fr
) และเวอร์ชันภาษาอื่น ๆ; - หน้าภาษาอังกฤษและภาษาฝรั่งเศสต้องชี้กลับไปยังหน้าเยอรมันด้วย
ความจำเป็น:
- การส่งต่อคะแนน SEO: การเชื่อมโยงแบบวงปิดช่วยให้เครื่องมือค้นหาเข้าใจว่าหน้าหลายภาษาคือเวอร์ชันที่เท่าเทียมกัน ป้องกันการกระจายคะแนน SEO
- ป้องกันเนื้อหาซ้ำซ้อน: หากมีการเชื่อมโยงทางเดียว (เช่น หน้าอังกฤษชี้ไปยังหน้าเยอรมันแต่หน้าเยอรมันไม่ชี้กลับ) เครื่องมือค้นหาอาจมองว่าเป็นเนื้อหาที่แยกจากกันและอาจถูกลงโทษเรื่องเนื้อหาซ้ำซ้อน
กรณียกเว้น:
- หน้าเว็บไซต์ภาษาเดียว (เช่น มีแค่ภาษาอังกฤษ) ไม่จำเป็นต้องเชื่อมโยงแบบวงปิด แต่ต้องมีการอ้างอิงตนเอง
- รูปแบบภาษาท้องถิ่น (เช่น
en-US
และ en-GB
) ควรชี้หากันและกัน แต่ไม่จำเป็นต้องเชื่อมโยงกับภาษาอื่น
กรณีที่เกิดการขาดลิงก์และผลกระทบที่พบบ่อย
กรณี 1: การเพิ่มเวอร์ชันภาษาใหม่โดยไม่อัปเดตหน้าเดิม
- ตัวอย่าง: เว็บไซต์ข่าวเพิ่มหน้าภาษาญี่ปุ่น (
ja
) แต่หน้าอังกฤษและจีนเดิมไม่ได้เพิ่มแท็ก hreflang ชี้ไปยังหน้าภาษาญี่ปุ่น - ผลกระทบ: หน้าภาษาญี่ปุ่นกลายเป็น “หน้าที่โดดเดี่ยว” เครื่องมือค้นหาจะจัดทำดัชนีเฉพาะหน้าอื่น ๆ ที่ไม่มีการเชื่อมโยงเท่านั้น
กรณี 2: ข้อบกพร่องในตรรกะของปลั๊กอิน CMS
- ตัวอย่าง: ปลั๊กอินหลายภาษาของ WordPress (เช่น Polylang) ไม่ได้เพิ่มลิงก์ภาษาใหม่ให้กับเนื้อหาเก่าโดยอัตโนมัติเมื่อสร้างหน้าจำนวนมาก
- ผลกระทบ: การเชื่อมโยงบางหน้าถูกตัดขาด ผู้ใช้ไม่สามารถสลับไปยังเวอร์ชันภาษาใหม่จากเนื้อหาเก่าได้
กรณี 3: พารามิเตอร์ไดนามิกทำให้การเชื่อมโยงล้มเหลว
- ตัวอย่าง: URL ของหน้าภาษาเสปนมีพารามิเตอร์ (เช่น
?lang=es
) แต่หน้าในภาษาอื่นไม่ได้รวมพารามิเตอร์นี้ใน hreflang - ผลกระทบ: เครื่องมือค้นหาจะมองว่า URL ที่มีพารามิเตอร์
es
เป็นเนื้อหาที่ไม่เกี่ยวข้อง
เครื่องมือและวิธีการตรวจสอบ
เครื่องมือ 1: Screaming Frog
- ในผลการรวบรวมข้อมูล ไปที่แท็บ “Hreflang” แล้วกรอง “Missing Reciprocal Links” (ลิงก์ตอบกลับที่หายไป)
- ขั้นตอน: ส่งออกรายการข้อผิดพลาดเพื่อตรวจสอบกลุ่ม URL ที่ไม่มีการเชื่อมโยงแบบวงปิด
เครื่องมือ 2: Sitebulb
- ในรายงาน “International SEO Audit” ดูคำเตือน “Unreciprocated hreflang links” ซึ่งแสดงหน้าที่ขาดลิงก์และภาษาที่ขาด
เครื่องมือ 3: DeepCrawl
- ตั้งกฎกำหนดเองเพื่อตรวจสอบความสัมพันธ์ระหว่างหน้าหลายภาษา และรายงานปัญหาลิงก์ขาดแบบอัตโนมัติทุกสัปดาห์
วิธีแก้ไขและขั้นตอนปฏิบัติ
วิธีที่ 1: แก้ไขแบบกลุ่มผ่านปลั๊กอิน CMS (ตัวอย่าง Shopify)
เข้าไปที่การตั้งค่าปลั๊กอินหลายภาษา (เช่น Langify) แล้วเปิดใช้งานตัวเลือก “เชื่อมโยงเวอร์ชันภาษาทุกภาษาโดยอัตโนมัติ”
ใน “การตั้งค่าเทมเพลต” ให้ตรวจสอบว่าโค้ด hreflang มีการวนลูปครอบคลุมทุกภาษา:
วิธีที่ 2: แก้ไขโค้ดด้วยตนเอง (เว็บไซต์แบบ Static)
สร้างรายการ URL สำหรับแต่ละภาษา (เช่น Excel) เพื่อระบุ URL ที่ต้องการเชื่อมโยงถึงกัน
เพิ่มแท็กลงในหน้าเว็บไซต์ตามรายการที่เตรียมไว้ เช่น:
อย่าลืมเพิ่มลิงก์กลับไปยังหน้าอังกฤษในหน้าภาษาเยอรมันและฝรั่งเศสด้วย
วิธีที่ 3: อัตโนมัติผ่านเซิร์ฟเวอร์ (เช่น Nginx)
ใช้ Reverse Proxy และกฎ Mapping เพื่อสร้าง hreflang tag แบบอัตโนมัติ:
ปัญหาความขัดแย้งกับ Canonical tag
ตัวอย่างเช่น หากหน้าเยอรมันมี Canonical tag ที่ชี้ไปยังหน้าอังกฤษหลัก Google อาจมองว่าหน้าเยอรมันเป็นสำเนาของหน้าอังกฤษ และไม่แสดงผลแก่ผู้ใช้ชาวเยอรมัน
ปัญหาที่พบบ่อยคือ CMS หลายตัวจะตั้ง Canonical ของทุกภาษาชี้ไปที่หน้าเริ่มต้น (เช่น x-default
) ส่งผลให้หน้าแต่ละภาษาถูกมองเป็นเนื้อหาซ้ำกัน
กลไกความขัดแย้งและลำดับความสำคัญ
ลำดับการประมวลผลของ Google ระหว่าง hreflang และ Canonical tag:
Canonical มาก่อน: ถ้า Canonical ของหน้า A ชี้ไปหน้า B หน้า A จะถูกมองเป็นสำเนาของหน้า B และ hreflang จะถูกเพิกเฉย
กรณีที่ hreflang ไม่ทำงาน:
- หน้าเว็บภาษาฝรั่งเศสมี Canonical ชี้ไปหน้าอังกฤษ → หน้าเว็บภาษาฝรั่งเศสจะไม่แสดงต่อผู้ใช้ชาวฝรั่งเศส
- ทุกหน้าภาษามี Canonical ชี้ไปหน้าแรกเหมือนกัน → ถูกมองเป็น Duplicate Content ทั้งหมด
ข้อยกเว้น:
- หาก Canonical tag ชี้กลับมาที่ตัวเอง (เช่น
<link rel="canonical" href="URL ของหน้าปัจจุบัน"/>
) hreflang จะทำงานได้ตามปกติ
สถานการณ์ข้อผิดพลาดทั่วไปและผลลัพธ์
ข้อผิดพลาด 1: ความขัดแย้งของการตั้งค่าปลั๊กอินหลายภาษาเริ่มต้น
- กรณีตัวอย่าง: ปลั๊กอิน Yoast SEO ของ WordPress ตั้งค่า Canonical ของหน้าหลายภาษาโดยค่าเริ่มต้นให้ชี้ไปยังหน้าภาษาหลัก เช่น หน้าเวอร์ชันภาษาเยอรมันมีแท็ก Canonical เป็น
<link rel="canonical" href="https://example.com/en/page"/>
- ผลลัพธ์: หน้าเวอร์ชันภาษาเยอรมันถูกมองว่าเป็นสำเนาของหน้าภาษาอังกฤษ ส่งผลให้ไม่แสดงผลในผลการค้นหาภาษาเยอรมัน และการเข้าชมลดลงมากกว่า 50%
ข้อผิดพลาด 2: การรบกวนจากพารามิเตอร์แบบไดนามิก
- กรณีตัวอย่าง: URL ที่มีพารามิเตอร์ เช่น
example.com/page?lang=de
มี Canonical ชี้ไปยังเวอร์ชันที่ไม่มีพารามิเตอร์ (example.com/page
) แต่เวอร์ชันหลังไม่ได้ตั้งค่า hreflang - ผลลัพธ์: หน้าเวอร์ชันภาษาเยอรมันที่มีพารามิเตอร์จะไม่ถูกจัดทำดัชนี และผู้ใช้จะเห็นเฉพาะหน้าภาษาหลักในการค้นหา
ข้อผิดพลาด 3: การไม่ประกาศเวอร์ชันตามภูมิภาคอย่างเป็นอิสระ
- กรณีตัวอย่าง: หน้า
en-US
มี Canonical ชี้ไปยังหน้าภาษาอังกฤษทั่วไป (en
) ทำให้เครื่องมือค้นหามองว่าเวอร์ชันภาษาอังกฤษแบบสหรัฐฯ ไม่มีความแตกต่าง - ผลลัพธ์: ผู้ใช้ในสหรัฐฯ ถูกเปลี่ยนเส้นทางไปยังหน้า
en
(เช่น ภาษาอังกฤษแบบอังกฤษ) ทำให้ประสบการณ์ที่ปรับตามท้องถิ่นลดลง
เครื่องมือตรวจสอบและวิธีแก้ไข
เครื่องมือ 1: Google Search Console
- เข้าไปที่รายงาน “การครอบคลุม” เลือกแท็บ “ยกเว้น” แล้วกรองดู “หน้าซ้ำกัน” หรือ “ส่งแล้วแต่ไม่ได้จัดทำดัชนี” เพื่อตรวจสอบว่า hreflang ถูกปิดใช้งานเนื่องจากความขัดแย้งของ Canonical หรือไม่
เครื่องมือ 2: Screaming Frog
- หลังจากการครอลเว็บไซต์แล้ว ให้กรองหน้าที่มีทั้งแท็ก hreflang และ Canonical จากนั้นตรวจสอบว่า Canonical ชี้ไปยัง URL ของหน้าเองหรือหน้าอื่น
- ส่งออกข้อมูลแล้วกรองด้วยเงื่อนไข
Canonical != Self-URL
เครื่องมือ 3: DeepCrawl
- ตั้งค่ากฎแจ้งเตือนแบบกำหนดเอง เพื่อแจ้งเตือนเมื่อเป้าหมายของ hreflang และ Canonical ไม่ตรงกัน
แนวทางแก้ไขและขั้นตอนปฏิบัติ
แนวทาง 1: แก้ไขปลั๊กอิน CMS (กรณี Yoast SEO)
- เข้าไปที่การตั้งค่าหลายภาษา และปิดใช้งานตัวเลือก “รวม Canonical ไปยังภาษาหลัก”
- เปิดใช้งาน “สร้าง Canonical แยกตามแต่ละภาษา” ในการตั้งค่าขั้นสูง
แนวทาง 2: แก้ไขโค้ดด้วยตนเอง
ในส่วน <head>
ของหน้า ให้แก้ไขแท็ก Canonical ให้ชี้ไปยัง URL ของหน้าเอง เช่น:
แนวทาง 3: การตั้งค่าฝั่งเซิร์ฟเวอร์ (ตัวอย่างเช่น Nginx)
สร้างแท็ก Canonical แบบไดนามิกตามภาษาปัจจุบัน:
เช่น หน้าแบบไดนามิกที่สร้างขึ้นอาจไม่สามารถโหลด HTML ได้สมบูรณ์เนื่องจากเซิร์ฟเวอร์หมดเวลา ทำให้แท็ก hreflang ในส่วน <head>
หายไป
นอกจากนี้ หากหน้าเวอร์ชันมือถือส่งสถานะ 302 แทนที่จะเป็น 200 เครื่องมือค้นหาอาจไม่ทำการครอลหน้าเหล่านั้น
บาง CDN หรือกฎไฟร์วอลล์อาจบล็อกคำขอของเครื่องมือค้นหา ทำให้ไม่สามารถเข้าถึงหน้าภาษาในบางภูมิภาคได้