โปรแกรมรวบรวมข้อมูลของ AI อ่านเนื้อหาที่สร้างด้วย JavaScript ได้ไหม
มักจะไม่ได้ Googlebot เรนเดอร์ JavaScript ในขั้นตอนถัดมา แต่โปรแกรมรวบรวมข้อมูลของ AI ส่วนใหญ่ไม่ได้ระบุว่าทำเช่นนั้น และ Google เองก็ระบุว่าบอตทุกตัวไม่ได้รัน JavaScript ได้ หากข้อความของคุณปรากฏหลังสคริปต์ทำงานเท่านั้น โปรแกรมรวบรวมข้อมูลของ AI อาจได้หน้าว่าง ให้ส่งเนื้อหาหลักไว้ใน HTML ตั้งต้นด้วยการเรนเดอร์ฝั่งเซิร์ฟเวอร์หรือหน้าสแตติก
single-page app และเฟรมเวิร์กฝั่งไคลเอนต์มีอยู่ทุกที่ และในเบราว์เซอร์ก็ดูปกติดี แต่โปรแกรมรวบรวมข้อมูลที่อ่านเพียง HTML ที่เซิร์ฟเวอร์ส่งมาเห็นอีกอย่างหนึ่ง คือ <div id="root"></div> แท็กสคริปต์ไม่กี่ตัว และข้อความน้อยมากหรือไม่มีเลย สำหรับคำตอบจาก AI หน้าแบบนี้ไม่มีอะไรให้อ้างอิง
ในหน้านี้
- ทำไมโปรแกรมรวบรวมข้อมูลของ AI จึงพลาดเนื้อหา JavaScript
- ตรวจสอบอย่างไรว่าโปรแกรมรวบรวมข้อมูลได้รับอะไร
- หน้าแบบไหนเสี่ยงที่สุด
- แก้เนื้อหาที่มีเฉพาะใน JavaScript อย่างไร
- หน้าล็อกอิน หน้าขอความยินยอม และ paywall ก็บล็อกโปรแกรมรวบรวมข้อมูลของ AI ด้วยหรือไม่
- AISeeWhy ตรวจพบหน้าที่ใช้ JavaScript อย่างเดียวได้อย่างไร
ทำไมโปรแกรมรวบรวมข้อมูลของ AI จึงพลาดเนื้อหา JavaScript
การรัน JavaScript มีต้นทุนสูง โปรแกรมรวบรวมข้อมูลต้องดาวน์โหลดสคริปต์ รันในเอนจินเบราว์เซอร์ และรอให้ข้อมูลโหลด Google ทำเช่นนี้สำหรับ Search คือรวบรวมข้อมูล จัดคิวหน้าเพื่อเรนเดอร์ และเรนเดอร์ด้วย Chromium แบบ headless เมื่อทรัพยากรเอื้ออำนวย กระนั้น Google ก็ยังแนะนำการเรนเดอร์ฝั่งเซิร์ฟเวอร์หรือ prerendering เพราะเร็วกว่าทั้งสำหรับผู้ใช้และโปรแกรมรวบรวมข้อมูล และระบุว่าบอตทุกตัวไม่ได้รัน JavaScript ได้
OpenAI, Anthropic และ Perplexity ไม่ได้ระบุในเอกสารโปรแกรมรวบรวมข้อมูลว่าเอเจนต์ของตนรัน JavaScript Apple ระบุว่า Applebot อาจเรนเดอร์หน้าในเบราว์เซอร์ เมื่อไม่มีคำยืนยันชัดเจน ข้อสมมติที่ปลอดภัยสำหรับโปรแกรมรวบรวมข้อมูลของ AI คือพวกมันอ่านแค่ HTML ตั้งต้น
ตรวจสอบอย่างไรว่าโปรแกรมรวบรวมข้อมูลได้รับอะไร
ดู HTML ดิบ ไม่ใช่หน้าที่เรนเดอร์แล้ว เครื่องมือสำหรับนักพัฒนาในเบราว์เซอร์แสดง DOM หลังสคริปต์ทำงาน ซึ่งไม่ใช่สิ่งที่โปรแกรมรวบรวมข้อมูลได้รับ ใช้การดูซอร์ส หรือบันทึก HTML ดิบจากบรรทัดคำสั่งแล้วค้นหาในไฟล์
curl -s -o page.html \
-A "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot" \
https://example.com/page
# Is a sentence from your main text in the raw HTML?
grep -c "a sentence from your main content" page.html
ผลลัพธ์ 0 หมายความว่าประโยคนั้นไม่อยู่ใน HTML ที่เซิร์ฟเวอร์ส่งมา โปรแกรมรวบรวมข้อมูลที่ไม่รันสคริปต์จึงหาไม่เจอ ดูไฟล์คร่าว ๆ ก็บอกได้ที่เหลือ บทความที่เรนเดอร์ฝั่งเซิร์ฟเวอร์มีข้อความเต็มอยู่ในนั้น ส่วนเปลือกฝั่งไคลเอนต์มีแค่องค์ประกอบราก (root) ที่ว่างกับรายการสคริปต์
หน้าแบบไหนเสี่ยงที่สุด
- single-page app ที่สร้างด้วย React, Vue, Angular หรือ Svelte ซึ่งเรนเดอร์ทุกอย่างในเบราว์เซอร์
- หน้าที่ดึงข้อความหลักจาก API หลังโหลด เช่น รายละเอียดผลิตภัณฑ์ ราคา หรือรีวิว
- เนื้อหาในแท็บ แอคคอร์เดียน หรือส่วน “โหลดเพิ่ม” ที่ขอเมื่อคลิกเท่านั้น
- หน้าที่อยู่หลังการล็อกอิน paywall หรือหน้าขอความยินยอมที่โปรแกรมรวบรวมข้อมูลผ่านไม่ได้
- หน้าที่ตั้ง
noindexหรือ canonical URL ผ่าน JavaScript เท่านั้น Google เตือนว่าเมื่อเห็นnoindexใน HTML ต้นฉบับ อาจข้ามการเรนเดอร์ไปเลย
แก้เนื้อหาที่มีเฉพาะใน JavaScript อย่างไร
วิธีแก้คือส่งเนื้อหาสำคัญในคำตอบแรก เลือกตัวเลือกที่เบาที่สุดที่ระบบของคุณรองรับ
- การเรนเดอร์ฝั่งเซิร์ฟเวอร์ (SSR): เฟรมเวิร์กอย่าง Next.js, Nuxt, SvelteKit และ Angular SSR เรนเดอร์หน้าบนเซิร์ฟเวอร์แล้ว hydrate ในเบราว์เซอร์
- การสร้างแบบสแตติกหรือ prerendering: สร้าง HTML ตอน deploy สำหรับหน้าที่เปลี่ยนไม่บ่อย เช่น บทความ เอกสาร และ landing page
- progressive enhancement: ใส่ข้อความ หัวข้อ ลิงก์ ราคา และ JSON-LD ไว้ใน HTML และใช้ JavaScript เพื่อการโต้ตอบเท่านั้น
- ใส่สิ่งสำคัญไว้ตั้งแต่แรก: ถ้าแท็บซ่อนเนื้อหา ให้ใส่ทั้งหมดไว้ใน HTML แล้วสลับการแสดงผลด้วย CSS หรือสคริปต์ แทนการดึงมาเมื่อคลิก
คุณไม่ต้องแปลงทั้งแอปในคราวเดียว เริ่มจากหน้าที่อยากให้ถูกอ้างอิง ได้แก่ บทความ เอกสาร หน้าผลิตภัณฑ์ และหน้าราคา ส่วนพื้นที่บัญชีและแดชบอร์ดอยู่ฝั่งไคลเอนต์ต่อไปได้ เพราะอยู่หลังการล็อกอินอยู่แล้ว
หลีกเลี่ยงการส่งหน้าที่ต่างจากที่ผู้ใช้เห็นให้โปรแกรมรวบรวมข้อมูลโดยดูจาก user agent การเรนเดอร์ HTML เดียวกันให้ทุกคนดูแลง่ายกว่า และไม่ก่อข้อสงสัยเรื่อง cloaking
หน้าล็อกอิน หน้าขอความยินยอม และ paywall ก็บล็อกโปรแกรมรวบรวมข้อมูลของ AI ด้วยหรือไม่
ใช่ โปรแกรมรวบรวมข้อมูลไม่ล็อกอิน ไม่คลิกแบนเนอร์คุกกี้ และไม่แก้การตรวจสอบ Anthropic ระบุว่าบอตของตนจะไม่พยายามข้าม CAPTCHA หากตัวจัดการความยินยอมแทนที่หน้าด้วยเลเยอร์เต็มหน้าจอใน HTML หรือเปลี่ยนเส้นทางผู้เข้าชมครั้งแรกไปยังหน้าขอความยินยอม โปรแกรมรวบรวมข้อมูลจะได้สิ่งนั้นแทนเนื้อหาของคุณ
ให้หน้าสาธารณะแสดงเนื้อหาใน HTML ไม่ว่าสถานะความยินยอมจะเป็นอย่างไร โดยให้แบนเนอร์เป็นเลเยอร์ซ้อน ไม่ใช่สิ่งที่มาแทนหน้า วางหน้าที่อยากให้ถูกอ้างอิงไว้นอกกำแพงล็อกอิน และตรวจว่าโปรแกรมรวบรวมข้อมูลไม่ถูกเปลี่ยนเส้นทางไปหน้าลงชื่อเข้าใช้
AISeeWhy ตรวจพบหน้าที่ใช้ JavaScript อย่างเดียวได้อย่างไร
AISeeWhy อ่าน HTML ตั้งต้นตามที่โปรแกรมรวบรวมข้อมูลแต่ละตัวได้รับ โดยไม่รันสคริปต์ เมื่อหน้ามีข้อความที่มองเห็นแทบไม่มี แต่มีองค์ประกอบรากของเฟรมเวิร์กและสคริปต์ จะรายงานข้อค้นพบระดับ P1 ว่าเนื้อหาต้องใช้ JavaScript และยังระบุการเปลี่ยนเส้นทางที่ส่งโปรแกรมรวบรวมข้อมูลไปที่อื่นต่างจากหน้าที่เบราว์เซอร์ได้
คำถามที่พบบ่อย
Googlebot เรนเดอร์ JavaScript ไหม
เรนเดอร์ Google รวบรวมข้อมูล HTML จัดคิวหน้าเพื่อเรนเดอร์ และเรนเดอร์ด้วย Chromium แบบ headless เมื่อทรัพยากรเอื้ออำนวย Google ก็ยังแนะนำการเรนเดอร์ฝั่งเซิร์ฟเวอร์หรือ prerendering
โปรแกรมรวบรวมข้อมูลของ ChatGPT, Claude และ Perplexity รัน JavaScript ไหม
เอกสารโปรแกรมรวบรวมข้อมูลของผู้ให้บริการเหล่านั้นไม่ได้ระบุ จนกว่าผู้ให้บริการจะระบุเป็นอื่น ให้สมมติว่าโปรแกรมอ่าน HTML ตั้งต้น และตรวจให้แน่ใจว่าเนื้อหาของคุณอยู่ในนั้น
dynamic rendering สำหรับบอตเป็นความคิดที่ดีไหม
ใช้ได้เป็นทางแก้ชั่วคราว แต่เพิ่มเส้นทางเรนเดอร์ที่สองให้ต้องดูแล การเรนเดอร์ฝั่งเซิร์ฟเวอร์หรือ HTML แบบสแตติกส่งเนื้อหาเดียวกันให้ทุกคน และเป็นทางแก้ระยะยาวที่ง่ายกว่า
JSON-LD ที่เพิ่มด้วย JavaScript นับไหม
Google อ่านได้หลังเรนเดอร์ แต่โปรแกรมรวบรวมข้อมูลที่ไม่รันสคริปต์จะมองไม่เห็น ให้วาง JSON-LD ไว้ใน HTML ตั้งต้น
แหล่งอ้างอิง
- Google Search Central: พื้นฐาน JavaScript SEO
- Apple: เกี่ยวกับ Applebot
- OpenAI: ภาพรวมโปรแกรมรวบรวมข้อมูลของ OpenAI
- Anthropic: Anthropic รวบรวมข้อมูลจากเว็บหรือไม่ และเจ้าของเว็บไซต์บล็อกโปรแกรมนี้ได้อย่างไร
- Perplexity: โปรแกรมรวบรวมข้อมูลของ Perplexity