WebValid
WebValid Team

5 ข้อผิดพลาดลับใน Sitemap.xml: ทำไม Google ถึงมองข้ามหน้าเว็บของคุณ

AI SEO Next.js WebDev VibeCoding

ขอบเขตทางเทคนิค: บทความนี้มุ่งเน้นไปที่ Next.js App Router (sitemap.ts), การสร้าง XML ด้วย Node.js และกับดักทั่วไปที่เกิดจากการใช้ AI Code Assistant (Cursor, Copilot, ChatGPT)

ในที่สุดแอปพลิเคชัน Next.js ของคุณก็ถูกนำไปใช้งานจริง (deploy) UI ดูไร้ที่ติ ฟีเจอร์ครบถ้วน และคะแนน Lighthouse ก็เป็นสีเขียว แต่สองสัปดาห์ต่อมา Google Search Console ยังคงจ้องมองคุณกลับมาด้วยตัวเลขอันน่าสะพรึงกลัว: “0 หน้าที่ถูกจัดทำดัชนี”

คุณจำได้ว่าเคยใช้ตัวช่วย AI เพื่อสร้างลอจิกการกำหนดเส้นทาง (routing) ในเวลาประมาณห้าวินาที มันดูถูกต้อง มันคอมไพล์ผ่าน แต่ภายใต้เปลือกนอกนั้น vibe-coding เพิ่งจะทำลาย SEO ทางเทคนิคของคุณไป ยูทิลิตี้ sitemap.xml ที่ AI สร้างขึ้นมีข้อผิดพลาดลับ 5 ประการที่ควรระวัง และนี่คือวิธีแก้ไข

ภาพลวงตาของ XML อันแสนง่าย

Vibe-coding ทำให้การสร้างแผนผังเว็บไซต์ (sitemap) ดูเหมือนเป็นเรื่องเล็กน้อย คุณสั่งงานว่า: “สร้าง sitemap สำหรับบล็อก Next.js ของฉัน” LLM จะพ่นไฟล์ sitemap.ts ออกมาให้ทันที

แต่ลอจิกของ AI ทำงานอย่างมืดบอด มันไม่ได้ตรวจสอบระบบไฟล์จริง ไม่ได้คิวรีฐานข้อมูลเพื่อยืนยันว่าสินค้ายังมีอยู่จริง และที่สำคัญที่สุดคือมันไม่เข้าใจข้อจำกัดด้านขนาดของเครื่องมือค้นหา มันสร้างโค้ดที่โครงสร้างดูดีแต่ทำลายลอจิกของการทำงานอย่างย่อยยับ

Critical — การสิ้นเปลืองงบประมาณในการรวบรวมข้อมูล (Crawl Budget) — ความล้มเหลวทางสถาปัตยกรรม

URL ผี (404 ใน Sitemap)

ข้อผิดพลาดที่พบบ่อยที่สุดของ LLM คือการทึกทักเอาเองว่าอาร์เรย์เส้นทาง (route) ของคุณจะเป็นความจริงตลอดไป หากคุณขอให้ AI วนซ้ำ (map) อาร์เรย์ของ slug มันมักจะรวมเส้นทางเก่าที่คุณลบหรือเปลี่ยนชื่อไปแล้วในระหว่างการปรับปรุงโค้ด (refactoring)

โค้ด AI ที่แย่:

// AI ฮาร์ดโค้ดเส้นทางเก่าหรือไม่ได้ตรวจสอบว่าข้อมูลในฐานข้อมูลถูก 'เผยแพร่' (published) หรือไม่
const routes = ["/blog/old-slug", "/blog/new-slug"];
return routes.map((route) => ({ url: `https://example.com${route}` }));

ผลกระทบ: URL ผี แผนผังเว็บไซต์นำเสนอหน้าเว็บต่อ Google อย่างภาคภูมิใจทั้งที่หน้าเหล่านั้นคืนค่า 404 Not Found ตัวรวบรวมข้อมูลของ Google สิ้นเปลืองงบประมาณไปกับการชนทางตัน ซึ่งจะลดคะแนนความน่าเชื่อถือของโดเมนทั้งหมดของคุณลงอย่างมาก

Critical — การลดประสิทธิภาพของสัญญาณ — การบิดเบือนข้อมูลเมตา (Metadata)

สแปมแบบไดนามิกใน <lastmod>

หากคุณขอให้ AI เพิ่มคุณสมบัติ lastModified ใน sitemap.ts ของ Next.js มันมักจะเลือกใช้วิธีที่ง่ายที่สุดของ JavaScript เสมอ นั่นคือ new Date()

โค้ด AI ที่แย่:

// AI สร้างวันที่ปัจจุบันแบบไดนามิกในทุกครั้งที่ deploy
return {
  url: "https://example.com/about",
  lastModified: new Date(),
  changeFrequency: "monthly",
};

ผลกระทบ: แท็ก <lastmod> ควรบอก Google ว่าเนื้อหานั้นถูกเปลี่ยนแปลง จริง ๆ เมื่อใด หากคุณใช้ new Date() คุณกำลังอัปเดตวันที่ในทุก ๆ การ build หรือการเรนเดอร์ของเซิร์ฟเวอร์ Google จะตรวจพบความไม่สอดคล้องกันของข้อมูลเมตานี้เมื่อเวลาผ่านไป และจะตีความพฤติกรรมนี้ว่าเป็นการบิดเบือนข้อมูลสำหรับเนื้อหาที่ไม่มีการเปลี่ยนแปลง และจะหยุดเชื่อถือสัญญาณ lastmod ของคุณถาวร

High — การปฏิเสธการจัดทำดัชนี — ข้อผิดพลาดทางไวยากรณ์ XML

แท็กหายและโครงสร้าง XML พัง

เมื่อมีการใช้ AI เพื่อสร้างสตริง XML ด้วยตนเอง (มักพบใน Node.js streaming API หรือ Custom Express endpoint) บ่อยครั้งที่ AI จะลืมแท็กปิด

โค้ด AI ที่แย่:

let xml = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">`;

urls.forEach((url) => {
  // แท็กปิด </loc> หายไป: ควรจะเป็น <loc>${url}</loc>
  xml += `<url><loc>${url}</url>`;
});
// แท็กปิด </urlset> หายไป

ผลกระทบ: Google Search Console ตรวจสอบ XML อย่างเข้มงวด เพียงแค่แท็ก </loc> หายไปเพียงแท็กเดียว หรือมีเครื่องหมายแอมเปอร์แซนด์ (&) ที่ไม่ได้ทำ escape ใน URL ก็จะทำให้ไฟล์ทั้งหมดใช้งานไม่ได้ และขัดขวางไม่ให้ Google ค้นพบหน้าเว็บทั้งหมดของคุณ

Medium — ความขัดแย้งของ Canonical URL — การจัดการ URL

โปรโตคอลผสม (HTTP vs HTTPS)

AI ชอบการแทรกสตริง (string interpolation) และไม่ค่อยคำนึงถึงบริบทของสภาพแวดล้อม (environment) เว้นแต่จะได้รับคำสั่งอย่างชัดเจน

โค้ด AI ที่แย่:

// AI ฮาร์ดโค้ด http แทนที่จะใช้ไดนามิกเฮดเดอร์หรือตัวแปร env
const domain = process.env.DOMAIN || "example.com";
const url = `http://${domain}/pricing`;

ผลกระทบ: หากไซต์จริงของคุณบังคับใช้ HTTPS แต่แผนผังเว็บไซต์ของคุณประกาศ URL เป็น HTTP Google จะมองว่าสิ่งเหล่านี้เป็นเอนทิตีที่แยกจากกัน ซึ่งจะทำให้เกิดปัญหาเนื้อหาซ้ำซ้อน การแจ้งเตือนเชนการเปลี่ยนเส้นทาง (redirect chain) ใน Search Console และความไม่สอดคล้องของ Canonical URL

Critical — การหยุดจัดทำดัชนีโดยสมบูรณ์ — ความล้มเหลวในการขยายขนาด

การเพิกเฉยต่อขีดจำกัดของ Google

หากคุณขอให้ AI สร้างแผนผังเว็บไซต์สำหรับไซต์อีคอมเมิร์ซที่มีผลิตภัณฑ์ 150,000 รายการ AI จะพ่นอาร์เรย์ขนาดใหญ่ออกมาเพียงชุดเดียวอย่างมีความสุข

ผลกระทบ: Google มีขีดจำกัดที่เข้มงวด: 50,000 URL หรือ 50MB (แบบไม่บีบอัด) ต่อไฟล์แผนผังเว็บไซต์หนึ่งไฟล์ อาร์เรย์แบบแบนขนาดใหญ่ขัดต่อกฎนี้ ตัวแยกส่วน (parser) จะค้าง แผนผังเว็บไซต์จะถูกปฏิเสธ และแคตตาล็อกสินค้าของคุณจะไม่ถูกจัดทำดัชนีโดยไม่แจ้งเตือน คุณต้องสั่งให้ AI ใช้สถาปัตยกรรม “Sitemap Index” เพื่อแบ่ง URL ออกเป็นไฟล์ย่อย ๆ หลายไฟล์ตามข้อกำหนด

Fact-Check: แผนผังเว็บไซต์ที่สร้างโดยอัตโนมัติ

การตรวจสอบอัตโนมัติด้วย WebValid

ตัวช่วย AI ของคุณไม่ได้ประสงค์ร้าย แต่มันแค่ขาดบริบทในการทำงานจริง เมื่อคุณรัน WebValid ตัว sitemap-scanner จะตรวจสอบ XML ที่สร้างขึ้นในเวลาเพียงเสี้ยววินาที

รูปแบบข้อผิดพลาดความสามารถของ WebValid
URL ผีตรวจสอบทุกลิงก์โดยอัตโนมัติเพื่อหาลิงก์เสีย
สแปม lastmod แบบไดนามิกระบุรูปแบบของเวลาอัปเดตที่เหมือนกันทั้งไฟล์
โปรโตคอลพังตรวจหาเนื้อหาที่มีโปรโตคอลผสมกันในสภาพแวดล้อม HTTPS
ขีดจำกัดของ Googleตรวจสอบขนาดไฟล์และขีดจำกัด URL อย่างเข้มงวดก่อน deploy

WebValid ตรวจสอบการตอบสนองของ HTTP และ XML ที่แยกวิเคราะห์แล้ว มันไม่ได้เขียน Next.js route handler ให้คุณใหม่ แต่มันให้บริบทของข้อผิดพลาดที่ AI ของคุณต้องการเพื่อนำไปแก้ไขเอง

รายการตรวจสอบ Sitemap ของคุณ

เทมเพลตพรอพสำหรับคัดลอกไปใช้ในตัวช่วย AI ของคุณ:

  1. ตรวจสอบ 404: ตรวจสอบว่าทุก URL ในแผนผังเว็บไซต์ตรงกับเส้นทางจริงที่คืนค่า 200 OK
  2. แก้ไข <lastmod>: ดึงวันที่มาจากฟิลด์ updatedAt ในฐานข้อมูลจริง ไม่ใช่ new Date()
  3. ตรวจสอบ XML: ใช้ตัวตรวจสอบ XML ที่เข้มงวดกับผลลัพธ์ที่จะใช้งานจริง
  4. Sitemap Index: หากมีมากกว่า 45,000 URL (ขีดจำกัดของ Google คือ 50,000 การแบ่งล่วงหน้าช่วยให้มีระยะปลอดภัย) ให้ใช้โครงสร้าง Sitemap Index

ตัวช่วย AI ของคุณสามารถเขียนโค้ดที่ดีได้ แต่มันแค่ไม่รู้ว่ามันทำผิดตรงไหน มอบรายการข้อผิดพลาดจาก WebValid ให้มัน แล้วมันจะแก้ไขทุกอย่างด้วยตัวเอง

เริ่มตรวจสอบฟรี

เอกสารอย่างเป็นทางการ

บทความนี้มีประโยชน์หรือไม่?