คำตอบสั้น ๆ
เว็บไซต์ที่พร้อมสำหรับเอเจนต์ AI ทำได้สามอย่าง คือ เอเจนต์ AI เข้าถึงได้ อ่านได้โดยไม่ต้องฝ่าเมนู แบนเนอร์ และสคริปต์ และในจุดที่เหมาะสม เรียกใช้เครื่องมือที่ประกาศไว้ไม่กี่อย่างได้ แทนที่จะต้องเดาว่าควรกดปุ่มไหน
เราใส่ทั้งสามอย่างไว้ใน dardo.studio ช่วงต้นเดือนตุลาคม 2026 ต่อไปนี้คือสิ่งที่เราทำ และแพลตฟอร์ม AI รายใหญ่ระบุไว้ว่าใช้งานมันมากแค่ไหน โดยตรวจกับเว็บไซต์จริงเมื่อวันที่ 8 ตุลาคม 2026
บทสรุปน่าตื่นเต้นน้อยกว่าเช็กลิสต์ "AI-ready" ส่วนใหญ่ เลเยอร์ที่เก่าแก่ที่สุดสำคัญที่สุด คือการให้ crawler เข้าถึงได้ และ HTML เชิงความหมายที่สะอาด ส่วนสำเนา Markdown และ llms.txt เป็นของอำนวยความสะดวกที่ต้นทุนต่ำ MCP, A2A และ WebMCP เป็นโปรโตคอลจริงที่มีไคลเอนต์ใช้งานได้ แต่เอกสารเกี่ยวกับ crawler ของ OpenAI, Anthropic, Perplexity และ Google ที่เราอ้างอิง ไม่มีฉบับใดระบุว่าผู้ช่วยของเขาค้นพบเครื่องมือของเว็บไซต์ได้เอง
เริ่มจากการเข้าถึง: robots.txt และชั้น edge
ไฟล์ robots.txt ของเรากำหนดกลุ่มกฎเดียวกันซ้ำ สำหรับเอเจนต์เริ่มต้น (*) และสำหรับ AI search crawler และ user fetcher แต่ละตัวที่เราระบุชื่อ:
User-agent: OAI-SearchBot
Allow: /
Disallow: /api/
Content-Signal: search=yes, ai-input=yesกฎเดียวกันนี้ใช้กับ ChatGPT-User, PerplexityBot, Perplexity-User, Claude-SearchBot, Claude-User และ Bingbot โดยปิดเฉพาะ /api/
Search crawler กับ training crawler แยกจากกัน
ปัจจุบันบริษัทใหญ่ ๆ ระบุโทเค็นแยกกันสำหรับการค้นหาและการเทรนโมเดล:
- OpenAI OAI-SearchBot ทำให้เว็บไซต์ปรากฏใน ChatGPT search เว็บไซต์ที่บล็อกมันจะไม่อยู่ในคำตอบของ ChatGPT search แต่ยังอาจแสดงเป็นลิงก์นำทางธรรมดาได้ ส่วน GPTBot เก็บข้อมูลสำหรับเทรนโมเดล (OpenAI crawlers)
- Anthropic Claude-SearchBot สร้างดัชนีเพื่อการค้นหา ClaudeBot เก็บข้อมูลสำหรับเทรนโมเดล และ Claude-User ดึงหน้าเว็บเมื่อมีคนถามอะไรบางอย่างกับ Claude (Anthropic crawlers)
- Perplexity PerplexityBot ทำให้เว็บไซต์ปรากฏและมีลิงก์ในผลลัพธ์ของ Perplexity และไม่ได้ใช้เทรนโมเดลพื้นฐาน (Perplexity crawlers)
- Google Google-Extended เป็นโทเค็นควบคุมการเทรนและ grounding ของ Gemini ในผลิตภัณฑ์อื่นของ Google และไม่มีผลต่อการรวมอยู่ใน Google Search หรืออันดับ (Google common crawlers)
User-triggered fetcher นั้นต่างออกไป OpenAI ระบุว่า robots.txt อาจใช้กับ ChatGPT-User ไม่ได้ เพราะคำขอเหล่านั้นเริ่มโดยผู้ใช้ ส่วน Perplexity-User และ user-triggered fetchers ของ Google โดยทั่วไปจะไม่สนใจไฟล์นี้ fetcher เหล่านี้ทำงานแทนคนคนเดียวแบบเรียลไทม์ และเมื่อการบล็อกได้ผล ส่วนใหญ่ก็แค่ทำให้ผู้ช่วยของคนนั้นอ่านหน้าเว็บของคุณไม่ได้
ไฟล์ของเราไม่ได้ระบุชื่อ training crawler จึงอยู่ภายใต้ * และได้รับอนุญาต นี่เป็นการตัดสินใจทางธุรกิจ และผู้ให้บริการก็ระบุว่าเป็นการควบคุมแยกต่างหาก การบล็อก GPTBot หรือ ClaudeBot ไม่เหมือนกับการออกจากดัชนีค้นหาของพวกเขา
Content Signals: บรรทัดเดียว ไม่มีข้อผูกมัด
บรรทัด Content-Signal มาจาก Content Signals Policy ของ Cloudflare ซึ่งระบุการใช้งานสามแบบ คือ search, ai-input (ป้อนเนื้อหาให้โมเดลตอนตอบคำถาม) และ ai-train เราเว้น ai-train ไว้ ซึ่งตามนโยบายนั้นไม่ได้ทั้งอนุญาตและจำกัดการใช้งานดังกล่าว Cloudflare ระบุว่าสัญญาณเหล่านี้แสดงความต้องการ ไม่ได้บล็อกอะไร และอาจถูกเมินได้ ไม่มีหน้า crawler ใดที่เราอ้างอิงไว้ที่นี่กล่าวถึงมันเลย ใช้แค่บรรทัดเดียว แต่อย่าเพิ่งคาดหวังอะไร
ตรวจชั้น edge ไม่ใช่แค่ไฟล์
robots.txt เป็นเพียงการประกาศนโยบาย แต่ CDN ของคุณต่างหากที่ตัดสินว่าเกิดอะไรขึ้น ตอนที่เราทดสอบเมื่อวันที่ 2 ตุลาคม Browser Integrity Check ของ Cloudflare ตอบ 403 ให้ HTTP client เริ่มต้นของ Python (Python-urllib) และ libwww-perl ทั้งที่ robots.txt อนุญาตทุกอย่าง สคริปต์ที่เอเจนต์เขียนโค้ดสร้างขึ้นมักใช้ไลบรารีมาตรฐานของ Python โดยไม่ปรับแต่ง
เราเพิ่มกฎ configuration ของ Cloudflare ที่ยกเว้นคำขอ GET และ HEAD สำหรับเนื้อหาสาธารณะ ส่วน /api/ ยังตอบ 403 การตรวจสอบครั้งเดียวกันยังพบว่าไฟล์ .txt ของเราไม่ได้ระบุ charset ทำให้ไคลเอนต์บางตัวอ่าน "Bogotá" เป็น "Bogotá" วิธีแก้คือเพิ่ม header เดียว: charset=utf-8
ทดสอบด้วยคำขอจริงภายใต้ user agent แต่ละตัว วิธีนี้แสดงว่าไม่มีอะไรบล็อกชื่อนั้น แต่ไม่ได้พิสูจน์ว่า crawler ตัวจริงเข้ามาแล้ว
HTML เชิงความหมายแบบเรียบง่าย: เลเยอร์ที่เอเจนต์ทุกตัวพึ่งพา
AI optimization guide ของ Google อธิบายถึง browser agent ที่วิเคราะห์ภาพหน้าจอ ตรวจสอบ DOM และตีความ accessibility tree และแนะนำให้เจ้าของเว็บไซต์ดูagent-friendly guidanceของ web.dev ซึ่งส่วนใหญ่คืองานด้านการเข้าถึง เช่น ใช้ <button> และ <a> แทน <div> ที่ตกแต่งให้ดูเป็นปุ่ม เชื่อมทุก label เข้ากับ input ของมัน และไม่ให้เลย์เอาต์ขยับใต้ภาพหน้าจอ
บน dardo.studio ทุกหน้ามี <main> หนึ่งตัว และมี landmark <nav> ที่ติดป้ายกำกับ ปุ่มสลับเมนูและธีมเป็นปุ่มจริงที่แจ้งสถานะด้วย aria-expanded และ aria-pressed และเมนูที่ปิดอยู่เป็น inert ทุกช่องในฟอร์มติดต่ออยู่ใน <label> ของมัน ซึ่งทำให้มีชื่อที่เข้าถึงได้ web.dev แนะนำแอตทริบิวต์ for แต่การครอบ input ไว้ก็ทำหน้าที่เดียวกัน
สิ่งนี้ช่วยผู้ใช้โปรแกรมอ่านหน้าจอได้ตั้งแต่วันนี้ ซึ่งก็เป็นเหตุผลที่เพียงพอแล้ว
สำเนา Markdown ที่สะอาดของทุกหน้า
เอเจนต์ต้องจ่ายค่าโทเค็นทุกตัวที่อ่าน และหน้าที่เรนเดอร์แล้วมีทั้งเมนูนำทาง แบนเนอร์คุกกี้ สคริปต์ และกราฟิกตกแต่ง ก่อนที่เราจะทำงานนี้ การขอหน้าเว็บของเราด้วย Accept: text/markdown จะได้ทั้งหมดนั้นกลับมาเป็น HTML
ตอนนี้ขั้นตอนการ build จะสร้างไฟล์ index.md ไว้ข้างทุกหน้าที่ให้ดัชนีได้ โดยขึ้นต้นด้วย front matter (ชื่อเรื่อง คำอธิบาย canonical URL ภาษา เวอร์ชันภาษาอื่น และวันที่อัปเดต) ตามด้วยเนื้อหาใน <main> ของหน้านั้น โดยไม่มีสคริปต์ ปุ่ม รูปภาพตกแต่ง หรือสารบัญในหน้า คำตอบในส่วนคำถามที่พบบ่อยยังอยู่ครบ ส่วนแบบฟอร์มจะกลายเป็นรายการช่องกรอกและตัวเลือก เอเจนต์จึงบอกผู้ใช้ได้ว่าแบบฟอร์มติดต่อของเราถามอะไรบ้าง โดยไม่ต้องไปแตะแบบฟอร์มเลย
มี 3 วิธีในการเรียกใช้สำเนานี้:
- ส่ง
Accept: text/markdownไปยัง URL ปกติ การตอบกลับเหล่านี้จะมีVary: Acceptเพื่อให้แคชแยกเก็บแต่ละเวอร์ชัน - ขอไฟล์โดยตรง:
/en/services/seo/index.md - ต่อท้ายพาธของหน้าด้วย
.md(/en/services/seo.md) สำหรับ URL ที่ลงท้ายด้วยเครื่องหมายสแลช ข้อเสนอ llms.txt ใช้index.mdตามรูปแบบข้างต้น
หน้า HTML ทุกหน้ายังชี้ไปยังสำเนาของตัวเองด้วย <link rel="alternate" type="text/markdown">
ชี้เสิร์ชเอนจินกลับมาที่ HTML
คู่มือของ Google ระบุว่า Google สามารถcrawl และทำดัชนีไฟล์ได้หลายประเภทนอกจาก HTML โดยไม่ได้ปฏิบัติต่อไฟล์เหล่านั้นเป็นพิเศษ สำเนา markdown อาจแข่งกับหน้าต้นฉบับของมันเอง เราจึงให้ทุกการตอบกลับแบบ markdown ระบุหน้า HTML เป็น canonical:
$ curl -sI https://dardo.studio/en/services/seo/index.md
content-type: text/markdown; charset=utf-8
link: <https://dardo.studio/en/services/seo/>; rel="canonical", ...ใครอ่านสำเนาเหล่านี้บ้าง? Cloudflare สร้าง Markdown for Agents เพื่อแปลง HTML ที่ edge สำหรับคำขอที่ต้องการ markdown ซึ่งบ่งชี้ว่ามีเอเจนต์ขอจริง แต่ไม่ได้ระบุว่าไคลเอนต์ใดส่งเฮดเดอร์นี้ และเราเองก็ไม่มีรายชื่อที่ยืนยันแล้วเช่นกัน หากคุณใช้ฟีเจอร์ของ Cloudflare ระบบจะเพิ่ม Content-Signal: ai-train=yes, search=yes, ai-input=yes เว้นแต่ origin ของคุณจะกำหนดค่าเอง ส่วนเราสร้างสำเนาตอน build เพื่อให้ตรงกับหน้าเว็บทุกประการ
llms.txt: ดัชนีที่มีประโยชน์ แต่ไม่ส่งผลต่อการค้นหา
llms.txt คือข้อเสนอของ Jeremy Howard เผยแพร่ครั้งแรกในเดือนกันยายน 2024 และยังเปิดรับความคิดเห็นจากชุมชน เป็นไฟล์ markdown ที่ /llms.txt ซึ่งมีชื่อเว็บไซต์ สรุปสั้น ๆ และรายการลิงก์ที่เอเจนต์อาจต้องการ
ไฟล์ของเราที่ /llms.txt และ /es/llms.txt สร้างจากข้อมูลชุดเดียวกับหน้าเว็บ จึงไม่คลาดเคลื่อน ไฟล์ระบุข้อมูลของสตูดิโอ (โบโกตา ก่อตั้งปี 2026 ทีมสามคน วิธีคิดราคาโปรเจกต์ ช่องทางติดต่อ) รายการบริการและผลงาน และอธิบายวิธีดึงสำเนา markdown ส่วน llms-full.txt เก็บข้อความฉบับเต็มของหน้าสตูดิโอ บริการ ผลงาน และติดต่อ
มีหนึ่งบรรทัดที่ระบุธุรกิจชื่อคล้ายกันซึ่งไม่ใช่เรา ตอนที่เราตรวจเมื่อวันที่ 2 ตุลาคม ธุรกิจเหล่านั้นอยู่อันดับต้น ๆ ในผลการค้นหาคำว่า "dardo studio" บรรทัดนั้นอาจเป็นบรรทัดที่มีประโยชน์ที่สุดในไฟล์
สถานะตอนนี้ พูดตรง ๆ:
- Google ระบุว่าคุณไม่จำเป็นต้องมี llms.txt เพื่อให้ปรากฏใน Search หรือฟีเจอร์ AI ของ Google Search ไม่สนใจไฟล์นี้ และการมีไฟล์ไม่ได้ช่วยหรือเสียหายอะไร
- OpenAI, Anthropic และ Perplexity ไม่ได้ระบุในเอกสารเกี่ยวกับครอว์เลอร์ว่าบอตของตนอ่าน llms.txt ของเว็บไซต์อื่น แต่เว็บไซต์เอกสารของ OpenAI, Anthropic และ Perplexity เองก็เผยแพร่ไฟล์นี้ไว้ สำหรับเอเจนต์ที่อ่านเอกสารของพวกเขา
ควรมีไว้หากสร้างอัตโนมัติและถูกต้อง ไฟล์นี้ช่วยเอเจนต์เขียนโค้ดและเครื่องมือที่มองหามัน แต่ไม่ใช่เครื่องมือเพิ่มการมองเห็น
เครื่องมือที่เอเจนต์เรียกใช้ได้: MCP, A2A และ API catalog
เราเผยแพร่เครื่องมือแบบอ่านอย่างเดียวสองตัว:
list_servicesส่งคืนบริการที่เราเผยแพร่ ขอบเขตงาน สิ่งที่ส่งมอบ และ URL ต้นทาง เป็นภาษาอังกฤษหรือสเปน โดยกรองด้วยคีย์เวิร์ดได้ตามต้องการget_project_briefส่งคืนคำถามที่ควรตอบก่อนติดต่อเรา และลิงก์ติดต่อตามภาษาสำหรับบริการนั้น
การทำงานชุดเดียวอยู่เบื้องหลังหลายจุดเข้าใช้งาน:
| จุดเข้าใช้งาน | ที่อยู่บน dardo.studio | มาตรฐานและสถานะ |
|---|---|---|
| เซิร์ฟเวอร์ MCP | /mcp และการ์ดที่ /.well-known/mcp/server-card.json | MCP แบบ Streamable HTTP โดย server card เป็นข้อเสนอฉบับร่าง |
| เอเจนต์ A2A | /a2a และการ์ดที่ /.well-known/agent-card.json | A2A 1.0, JSON-RPC |
| JSON endpoint | /agent/services.json อธิบายด้วย OpenAPI | HTTP ธรรมดา |
| API catalog | /.well-known/api-catalog | RFC 9727 IETF Standards Track |
ทุกการตอบกลับแบบ HTML และ markdown จะส่งเฮดเดอร์ Link ที่ชี้ไปยัง catalog ดัชนี agent skills และการ์ดทั้งสองใบ ดังนั้นจากหน้าไหนก็ไปถึงส่วนที่เหลือได้
หลักการออกแบบที่เราจะใช้อีก
- อ่านอย่างเดียวและเปิดสาธารณะ เครื่องมือ MCP ประกาศ
readOnlyHint: trueและอ่านจาก catalog ที่เผยแพร่ชุดเดียวกับ HTML โดยไม่มีฐานข้อมูลอยู่เบื้องหลังget_project_briefไม่ส่งข้อมูล ไม่จอง และไม่เสนอราคา คนเป็นผู้ตรวจและส่งเอง - จำกัดข้อมูลนำเข้า เนื้อหาคำขอจำกัดที่ 8 KiB ตรวจเฮดเดอร์
Originของเบราว์เซอร์ (ข้อกำหนด MCP บังคับไว้) และการเรียกใช้มีขีดจำกัดอัตราของตัวเอง - ไม่เก็บสถานะ เอเจนต์ A2A ตอบทันที ไม่เก็บงาน ปิดการสตรีม และไม่ดึงไฟล์หรือ URL ที่ถูกส่งมา
- เงื่อนไขชัดเจน /auth.md ระบุว่าไม่ต้องใช้ข้อมูลรับรองใด ๆ และการอ่านข้อมูลสาธารณะไม่ได้ให้สิทธิ์ในการส่งข้อความหรือชำระเงิน
เรายังเว้นบางอย่างไว้ด้วย เครื่องมือสแกนความพร้อมจะตรวจหาโปรโตคอลการค้าและ OAuth discovery เราไม่ได้ขายอะไรผ่านระบบชำระเงินและไม่มีทรัพยากรที่ต้องป้องกัน การเผยแพร่สิ่งเหล่านั้นจึงเท่ากับอธิบายความสามารถที่ไม่มีอยู่จริง
ปัจจุบันใครใช้เครื่องมือเหล่านี้: ไคลเอนต์ MCP ที่มีคนเชื่อมต่อกับ /mcp และไคลเอนต์ A2A ที่ได้รับการ์ดของเรา สำหรับสตูดิโอ คุณค่าอยู่ในระดับพอประมาณ คือคำตอบที่แม่นยำต่อคำถามว่า "Dardo ทำอะไร และควรส่งอะไรให้พวกเขา" กรณีนี้เหมาะกับเว็บไซต์ที่มีข้อมูลสดซึ่งผู้คนมักถาม เช่น สต็อก ความพร้อมให้บริการ หรือเอกสารผลิตภัณฑ์ เอเจนต์ที่เขียนข้อมูลต้องมีการยืนยันตัวตนและขั้นตอนตรวจสอบ ซึ่งเป็นงานระบบอัตโนมัติด้วย AI
WebMCP: เครื่องมือชุดเดียวกันภายในเบราว์เซอร์
WebMCP ให้หน้าเว็บลงทะเบียนเครื่องมือที่เอเจนต์ AI ในเบราว์เซอร์เรียกใช้ได้ เป็น Draft Community Group Report ของ W3C Web Machine Learning Community Group และระบุว่าไม่ใช่มาตรฐาน W3C web.dev ระบุว่ากำลังพัฒนาอยู่ อาจมีการเปลี่ยนแปลง และลองใช้ใน Chrome ได้ผ่าน origin trial
หน้าเว็บของเราลงทะเบียนเครื่องมือชุดเดียวกันสองตัวผ่าน document.modelContext (หรือ navigator.modelContext ในพรีวิวรุ่นเก่า) หากไม่มี API เบราว์เซอร์ก็ไม่ได้รันอะไรเพิ่ม เพราะเครื่องมือเหล่านี้มีอยู่แล้ว งานนี้จึงใช้โค้ดราว 40 บรรทัด ถือว่าเป็นการทดลอง
ทุกเลเยอร์ และคุ้มค่าที่จะทำหรือไม่
| เลเยอร์ | คืออะไร | ใครอ่านในปัจจุบัน | คุ้มไหม |
|---|---|---|---|
| HTML เชิงความหมายและฟอร์มที่มีป้ายกำกับ | ปุ่ม ลิงก์ landmark และป้ายกำกับที่ใช้งานได้จริง | เบราว์เซอร์ เทคโนโลยีช่วยเหลือ และเอเจนต์บนเบราว์เซอร์ | คุ้ม ควรทำเป็นอันดับแรก |
| robots.txt สำหรับการค้นหาและ user agent | กฎรายครอว์เลอร์ที่แยกการค้นหาออกจากการเทรนโมเดล | OpenAI, Anthropic, Perplexity และ Google เปิดเผยโทเคนของตนไว้ในเอกสาร | คุ้ม จากนั้นทดสอบที่ CDN |
| Content Signals | ค่ากำหนด search, ai-input, ai-train ใน robots.txt | บริษัท AI ที่เราตรวจสอบไม่มีรายใดระบุในเอกสารว่าปฏิบัติตาม | ใส่บรรทัดเดียว อย่าคาดหวังผลใดๆ |
| สำเนา Markdown พร้อม canonical header | เวอร์ชันข้อความล้วนที่สะอาดของแต่ละหน้า | เอเจนต์ที่ร้องขอ Markdown ยังไม่มีรายชื่อที่เผยแพร่ว่ามีตัวไหนบ้าง | คุ้ม หากใส่ canonical header |
| llms.txt และ llms-full.txt | ดัชนีที่คัดสรรแล้วและข้อความฉบับเต็มสำหรับเอเจนต์ | Google Search ไม่สนใจไฟล์นี้ และเอกสารของครอว์เลอร์ไม่มีรายใดระบุว่าอ่าน | เก็บไว้ได้หากสร้างอัตโนมัติ แต่ไม่ใช่ตัวเร่งการมองเห็น |
| เซิร์ฟเวอร์ MCP (อ่านอย่างเดียว) | เครื่องมือที่ประกาศไว้ให้เอเจนต์เรียกใช้ | ไคลเอนต์ MCP ที่ผู้ใช้เชื่อมต่อเอง | เฉพาะเมื่อมีข้อมูลหรือการดำเนินการที่คุ้มค่าแก่การเรียกใช้ |
| A2A agent card | คำอธิบายเอเจนต์ในรูปแบบที่เครื่องอ่านได้ | ไคลเอนต์ A2A ที่ชี้มาที่ไฟล์นี้ | เป็นการคาดการณ์สำหรับเว็บไซต์ส่วนใหญ่ |
| API catalog (RFC 9727) | รายการ well-known เดียวที่รวม API สาธารณะของคุณ | เครื่องมือที่ค้นหาไฟล์นี้ | ต้นทุนต่ำ หากคุณมี API อยู่แล้ว |
| WebMCP | เครื่องมือที่หน้าเว็บลงทะเบียนไว้ในเบราว์เซอร์ | Chrome ผ่าน origin trial | การทดลอง |
สิ่งที่เราจะกลับมาสร้างอีก
ตามลำดับ: HTML เชิงความหมาย การเข้าถึงของครอว์เลอร์ที่ผ่านการทดสอบ สำเนา Markdown พร้อม canonical header, llms.txt ที่สร้างอัตโนมัติ และเครื่องมือเมื่อมีสิ่งที่คุ้มค่าแก่การเรียกใช้เท่านั้น จากนั้นจึงวัดผล บันทึกของเซิร์ฟเวอร์จะบอกว่าเอเจนต์ตัวไหนดึงสำเนา Markdown หรือเรียก /mcp การดึงข้อมูลไม่เท่ากับการอ้างอิง และสิ่งเหล่านี้ไม่ได้รับประกันว่าระบบ AI จะพูดถึงคุณ
ความพร้อมสำหรับเอเจนต์เป็นส่วนหนึ่งของงานการปรับแต่งเพื่อการค้นหาด้วย AI ของเรา ควบคู่ไปกับเนื้อหาและการวัดผลที่เป็นตัวตัดสินว่าคำตอบของ AI จะอ้างอิงคุณหรือไม่ หากต้องการสร้างสิ่งนี้ลงในเว็บไซต์ของคุณ เล่าโปรเจกต์ของคุณให้เราฟัง
