ब्लॉग

एजेंट-रेडी वेबसाइट को क्या चाहिए: dardo.studio बनाते समय के नोट्स

हमने dardo.studio को AI एजेंट्स के लिए पढ़ने और कॉल करने लायक बनाया, एक-एक लेयर करके। जानिए हर लेयर क्या करती है, आज कौन उसे पढ़ने की बात दर्ज करता है, और कौन-सी लेयर हम दोबारा बनाएँगे।

लेखक: Nicolás Cerón ·

पहियों वाला एक छोटा रोबोट रात में एक म्यूज़ियम गैलरी में गहरे लाल रंग की गाइड लाइन के सहारे रोशनी से जगमगाती मूर्ति की ओर बढ़ रहा है।

संक्षिप्त उत्तर

एजेंट-रेडी वेबसाइट तीन काम करती है। AI एजेंट्स उस तक पहुँच सकते हैं। वे मेन्यू, बैनर और स्क्रिप्ट के झंझट में पड़े बिना उसे पढ़ सकते हैं। और जहाँ ज़रूरी हो, वे यह अंदाज़ा लगाने के बजाय कि कौन-सा बटन दबाना है, घोषित किए गए कुछ टूल्स को कॉल कर सकते हैं।

हमने अक्टूबर 2026 की शुरुआत में dardo.studio में ये तीनों चीज़ें जोड़ीं। हमने क्या लॉन्च किया और प्रमुख AI प्लेटफ़ॉर्म उसके इस्तेमाल की कितनी बात दर्ज करते हैं, यह 8 अक्टूबर 2026 को लाइव साइट पर जाँचा गया है।

निष्कर्ष ज़्यादातर "AI-ready" चेकलिस्ट से कम रोमांचक है। सबसे पुरानी लेयर सबसे ज़्यादा मायने रखती हैं: क्रॉलर एक्सेस और साफ़, सिमेंटिक HTML। Markdown कॉपी और llms.txt सस्ती सुविधाएँ हैं। MCP, A2A और WebMCP असली प्रोटोकॉल हैं जिनके क्लाइंट काम करते हैं, लेकिन OpenAI, Anthropic, Perplexity या Google के जिन क्रॉलर दस्तावेज़ों का हम हवाला देते हैं, उनमें से कोई भी यह नहीं बताता कि उनके असिस्टेंट किसी साइट के टूल्स अपने आप खोज लेते हैं।

शुरुआत एक्सेस से: robots.txt और एज

हमारी robots.txt डिफ़ॉल्ट एजेंट (*) और हमारे नाम लिए हर AI सर्च क्रॉलर व यूज़र फ़ेचर के लिए एक ही ग्रुप दोहराती है:

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/ बंद है।

सर्च क्रॉलर और ट्रेनिंग क्रॉलर अलग-अलग होते हैं

प्रमुख कंपनियाँ अब सर्च और ट्रेनिंग के लिए अलग-अलग टोकन दस्तावेज़ित करती हैं:

  • OpenAI. OAI-SearchBot साइटों को ChatGPT सर्च में दिखाता है। जो साइटें इसे ब्लॉक करती हैं, वे ChatGPT सर्च के जवाबों से बाहर रह जाती हैं, हालाँकि सामान्य नेविगेशन लिंक के रूप में फिर भी दिख सकती हैं। GPTBot ट्रेनिंग डेटा इकट्ठा करता है। (OpenAI क्रॉलर)
  • Anthropic. Claude-SearchBot सर्च के लिए इंडेक्स करता है, ClaudeBot ट्रेनिंग डेटा इकट्ठा करता है, और Claude-User तब पेज लाता है जब कोई व्यक्ति Claude से कुछ पूछता है। (Anthropic क्रॉलर)
  • Perplexity. PerplexityBot Perplexity के नतीजों में साइटों को दिखाता और लिंक करता है, और इसका इस्तेमाल फ़ाउंडेशन मॉडल ट्रेन करने के लिए नहीं होता। (Perplexity क्रॉलर)
  • Google. Google-Extended एक कंट्रोल टोकन है, जो Gemini की ट्रेनिंग और Google के अन्य प्रोडक्ट्स में ग्राउंडिंग के लिए है। यह Google Search में शामिल होने या रैंकिंग को प्रभावित नहीं करता। (Google के सामान्य क्रॉलर)

यूज़र द्वारा शुरू किए गए फ़ेचर अलग हैं। OpenAI के अनुसार ChatGPT-User पर robots.txt लागू नहीं भी हो सकती, क्योंकि ये अनुरोध कोई व्यक्ति शुरू करता है। Perplexity-User और Google के यूज़र-ट्रिगर्ड फ़ेचर आम तौर पर इसे अनदेखा करते हैं। ये फ़ेचर रीयल टाइम में एक व्यक्ति के लिए काम करते हैं; जहाँ ब्लॉक काम करता है, वहाँ वह ज़्यादातर उसी व्यक्ति के असिस्टेंट को आपका पेज पढ़ने से रोकता है।

हमारी फ़ाइल ट्रेनिंग क्रॉलर का नाम नहीं लेती, इसलिए वे * के अंतर्गत आते हैं और उन्हें अनुमति है। यह एक बिज़नेस फ़ैसला है, और वेंडर इसे अलग कंट्रोल के रूप में दस्तावेज़ित करते हैं: GPTBot या ClaudeBot को ब्लॉक करना उनके सर्च इंडेक्स से बाहर होने जैसा नहीं है।

Content Signals: एक लाइन, कोई वादा नहीं

Content-Signal लाइन Cloudflare की Content Signals Policy से आती है, जो तीन उपयोग बताती है: search, ai-input (जवाब देते समय किसी मॉडल को कंटेंट देना) और ai-train। हमने ai-train छोड़ दिया है, जिसका पॉलिसी के तहत उस उपयोग को न अनुमति देना है, न रोकना। Cloudflare के अनुसार सिग्नल सिर्फ़ प्राथमिकताएँ बताते हैं, कुछ ब्लॉक नहीं करते, और अनदेखे किए जा सकते हैं। यहाँ उद्धृत किसी भी क्रॉलर पेज में इनका ज़िक्र नहीं है। इसमें बस एक लाइन लगती है; अभी कोई उम्मीद न रखें।

सिर्फ़ फ़ाइल नहीं, एज भी जाँचें

robots.txt एक नीति बताती है; असल में क्या होगा, यह आपका CDN तय करता है। 2 अक्टूबर को हमारे परीक्षण में, जब robots.txt ने सब कुछ अनुमति दे रखी थी, तब भी Cloudflare के Browser Integrity Check ने Python के डिफ़ॉल्ट HTTP क्लाइंट (Python-urllib) और libwww-perl को 403 से जवाब दिया। कोडिंग एजेंट्स की लिखी स्क्रिप्ट अक्सर Python की स्टैंडर्ड लाइब्रेरी को बिना बदले इस्तेमाल करती हैं।

हमने Cloudflare का एक कॉन्फ़िगरेशन रूल जोड़ा, जो सार्वजनिक कंटेंट के GET और HEAD अनुरोधों को छूट देता है; /api/ अब भी 403 देता है। उसी समीक्षा में पता चला कि हमारी .txt फ़ाइलों में charset नहीं था, इसलिए कुछ क्लाइंट "Bogotá" को "Bogotá" पढ़ रहे थे। इसका हल एक हेडर था: charset=utf-8।

हर यूज़र एजेंट के साथ असली अनुरोध भेजकर टेस्ट करें। इससे पता चलता है कि कुछ भी उस नाम को ब्लॉक नहीं कर रहा; यह साबित नहीं होता कि असली क्रॉलर आया था।

सादा, सिमेंटिक HTML: वह लेयर जिस पर हर एजेंट निर्भर है

Google की AI ऑप्टिमाइज़ेशन गाइड ऐसे ब्राउज़र एजेंट्स का वर्णन करती है जो स्क्रीनशॉट का विश्लेषण करते हैं, DOM की जाँच करते हैं और एक्सेसिबिलिटी ट्री की व्याख्या करते हैं। यह साइट मालिकों को web.dev की एजेंट-फ़्रेंडली गाइडेंस की ओर भेजती है, जो ज़्यादातर एक्सेसिबिलिटी का काम है: स्टाइल किए गए <div> की जगह <button> और <a> इस्तेमाल करें, हर लेबल को उसके इनपुट से जोड़ें, और लेआउट को स्क्रीनशॉट के नीचे खिसकने से बचाएँ।

dardo.studio पर हर पेज में एक <main> और लेबल वाले <nav> लैंडमार्क हैं। मेन्यू और थीम टॉगल असली बटन हैं जो aria-expanded और aria-pressed से अपनी स्थिति बताते हैं, और बंद मेन्यू inert हैं। संपर्क फ़ॉर्म का हर फ़ील्ड अपने <label> के अंदर है, जिससे उसे एक्सेसिबल नाम मिलता है। web.dev for एट्रिब्यूट सुझाता है; इनपुट को लपेट देना भी वही काम करता है।

इससे आज स्क्रीन रीडर इस्तेमाल करने वालों को मदद मिलती है, जो अपने आप में काफ़ी वजह है।

हर पेज की साफ़ markdown कॉपी

एजेंट्स को पढ़े गए हर टोकन की कीमत चुकानी पड़ती है, और रेंडर किए गए पेज में नेविगेशन, कुकी बैनर, स्क्रिप्ट और सजावटी ग्राफ़िक्स होते हैं। इस काम से पहले, Accept: text/markdown के साथ हमारे पेज माँगने पर यह सब HTML के रूप में लौटता था।

अब एक बिल्ड स्टेप हर इंडेक्स होने योग्य पेज के बगल में एक index.md फ़ाइल लिखता है। इसकी शुरुआत फ़्रंट मैटर (शीर्षक, विवरण, canonical URL, भाषा, दूसरी भाषा वाला संस्करण और अपडेट की तारीख) से होती है, फिर पेज की <main> सामग्री आती है, जिसमें स्क्रिप्ट, बटन, सजावटी इमेज और पेज के भीतर की विषय-सूची शामिल नहीं होती। FAQ के उत्तर रहते हैं। फ़ॉर्म अपने फ़ील्ड और विकल्पों की सूची बन जाते हैं, ताकि कोई एजेंट फ़ॉर्म को छुए बिना किसी व्यक्ति को बता सके कि हमारा कॉन्टैक्ट फ़ॉर्म क्या पूछता है।

यह कॉपी पाने के तीन तरीके हैं:

  • सामान्य URL पर Accept: text/markdown भेजें। इन रिस्पॉन्स में 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 की गाइड बताती है कि वह HTML के अलावा कई तरह की फ़ाइलें क्रॉल और इंडेक्स कर सकता है, और उन्हें कोई खास तरजीह नहीं देता। मार्कडाउन कॉपी अपने ही पेज से मुकाबला कर सकती है, इसलिए हर मार्कडाउन रिस्पॉन्स 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 को बदल देता है, इससे लगता है कि एजेंट इसे माँगते हैं। यह नहीं बताया गया कि कौन से क्लाइंट यह हेडर भेजते हैं, और हमारे पास भी कोई जाँची हुई सूची नहीं है। अगर आप Cloudflare का फ़ीचर इस्तेमाल करते हैं, तो वह Content-Signal: ai-train=yes, search=yes, ai-input=yes जोड़ देता है, जब तक आपका origin अपना हेडर न दे। हम अपनी कॉपियाँ बिल्ड के समय बनाते हैं, ताकि वे पेज से ठीक मेल खाएँ।

llms.txt: उपयोगी इंडेक्स, पर सर्च पर कोई असर नहीं

llms.txt Jeremy Howard का एक प्रस्ताव है, जो सितंबर 2024 में पहली बार प्रकाशित हुआ और अब भी समुदाय के सुझावों के लिए खुला है: /llms.txt पर एक मार्कडाउन फ़ाइल, जिसमें साइट का नाम, छोटा सारांश और उन लिंकों की सूचियाँ होती हैं जो किसी एजेंट के काम आ सकती हैं।

हमारी फ़ाइलें /llms.txt और /es/llms.txt पर हैं। वे पेजों वाले ही डेटा से बनती हैं, इसलिए उनमें फ़र्क नहीं आ सकता। उनमें स्टूडियो के तथ्य (बोगोटा, स्थापना 2026, तीन लोगों की टीम, प्रोजेक्ट की कीमत कैसे तय होती है, संपर्क के रास्ते) दिए हैं, सेवाओं और काम की सूची है, और यह भी समझाया गया है कि मार्कडाउन कॉपियाँ कैसे पाएँ। llms-full.txt में स्टूडियो, सेवा, काम और संपर्क पेजों का पूरा टेक्स्ट है।

एक पंक्ति में मिलते-जुलते नामों वाले उन कारोबारों का ज़िक्र है जो हम नहीं हैं। 2 अक्टूबर को जब हमने जाँचा, तो "dardo studio" के सर्च नतीजों में वही सबसे ऊपर थे। शायद फ़ाइल की सबसे उपयोगी पंक्ति यही है।

स्थिति, सीधे शब्दों में:

  • Google कहता है कि Search या उसके AI फ़ीचर में दिखने के लिए llms.txt की ज़रूरत नहीं है, Search उसे अनदेखा करता है, और उसे रखने से न फ़ायदा होता है न नुकसान।
  • OpenAI, Anthropic और Perplexity अपने क्रॉलर के दस्तावेज़ों में नहीं कहते कि उनके बॉट दूसरी साइटों की llms.txt पढ़ते हैं। OpenAI, Anthropic और Perplexity की अपनी डॉक्स साइटें ज़रूर एक llms.txt प्रकाशित करती हैं, ताकि एजेंट उनके दस्तावेज़ पढ़ सकें।

अगर वह अपने आप बनती है और सही है, तो रखें। यह कोडिंग एजेंटों और इसे खोजने वाले टूल्स के काम आती है। यह दृश्यता बढ़ाने का साधन नहीं है।

एजेंटों के बुलाने लायक टूल: MCP, A2A और API कैटलॉग

हमने दो रीड-ओनली टूल प्रकाशित किए हैं:

  • list_services हमारी प्रकाशित सेवाएँ, उनका दायरा, डिलिवरेबल और स्रोत URL अंग्रेज़ी या स्पेनिश में लौटाता है, जिन्हें एक वैकल्पिक कीवर्ड से फ़िल्टर किया जा सकता है।
  • get_project_brief हमसे संपर्क करने से पहले जिन सवालों के जवाब सोचने चाहिए, वे और उस सेवा का स्थानीय भाषा वाला संपर्क लिंक लौटाता है।

एक ही इम्प्लीमेंटेशन कई प्रवेश बिंदुओं के पीछे है:

प्रवेश बिंदुdardo.studio पर पतास्टैंडर्ड और स्थिति
MCP सर्वर/mcp, कार्ड /.well-known/mcp/server-card.json परMCP Streamable HTTP; सर्वर कार्ड एक ड्राफ़्ट प्रस्ताव है
A2A एजेंट/a2a, कार्ड /.well-known/agent-card.json परA2A 1.0, JSON-RPC
JSON एंडपॉइंट/agent/services.json, OpenAPI में वर्णितसामान्य HTTP
API कैटलॉग/.well-known/api-catalogRFC 9727, IETF Standards Track

हर HTML और मार्कडाउन रिस्पॉन्स एक Link हेडर भेजता है, जो कैटलॉग, एजेंट स्किल्स इंडेक्स और दोनों कार्डों की ओर इशारा करता है, इसलिए कोई भी पेज बाकी सबकी ओर ले जाता है।

डिज़ाइन के वे नियम जिन्हें हम दोहराएँगे

  • रीड-ओनली और सार्वजनिक। MCP टूल readOnlyHint: true घोषित करते हैं और HTML वाला ही प्रकाशित कैटलॉग पढ़ते हैं, उनके पीछे कोई डेटाबेस नहीं है। get_project_brief कुछ सबमिट नहीं करता, बुक नहीं करता, कोटेशन नहीं देता; कोई व्यक्ति देखकर भेजता है।
  • सीमित इनपुट। रिक्वेस्ट बॉडी 8 KiB तक सीमित हैं, ब्राउज़र के Origin हेडर जाँचे जाते हैं (MCP स्पेसिफ़िकेशन में यह ज़रूरी है), और कॉल की अपनी रेट लिमिट है।
  • कोई स्टेट नहीं। A2A एजेंट तुरंत जवाब देता है, कोई टास्क नहीं रखता, स्ट्रीमिंग बंद है और उसे भेजी गई फ़ाइलें या URL नहीं खोलता।
  • साफ़ शर्तें। /auth.md बताता है कि किसी क्रेडेंशियल की ज़रूरत नहीं है और सार्वजनिक डेटा पढ़ने से संदेश भेजने या भुगतान करने की अनुमति नहीं मिल जाती।

हमने कुछ चीज़ें जानबूझकर छोड़ भी दीं। रेडिनेस स्कैनर कॉमर्स प्रोटोकॉल और OAuth डिस्कवरी की जाँच करते हैं। हम चेकआउट के ज़रिए कुछ नहीं बेचते और किसी संसाधन की सुरक्षा नहीं करते, इसलिए उन्हें प्रकाशित करना ऐसी क्षमताओं का वर्णन होता जो हैं ही नहीं।

आज इन टूल्स का उपयोग कौन करता है: वे MCP क्लाइंट जिन्हें किसी ने /mcp से जोड़ा है, और वे A2A क्लाइंट जिन्हें हमारा कार्ड दिया गया है। एक स्टूडियो के लिए इसका मूल्य सीमित है: "Dardo क्या करता है, और उन्हें क्या भेजना चाहिए?" का सटीक उत्तर। ऐसी साइट के लिए तर्क ज़्यादा मज़बूत है जिसके लाइव डेटा के बारे में लोग पूछते हैं, जैसे स्टॉक, उपलब्धता या प्रोडक्ट दस्तावेज़। जो एजेंट डेटा लिखते हैं, उन्हें ऑथेंटिकेशन और समीक्षा के चरण चाहिए; वह AI ऑटोमेशन का काम है।

WebMCP: वही टूल, ब्राउज़र के भीतर

WebMCP किसी पेज को ऐसे टूल रजिस्टर करने देता है जिन्हें ब्राउज़र में मौजूद AI एजेंट बुला सकता है। यह W3C की Web Machine Learning Community Group की एक Draft Community Group Report है और साफ़ कहती है कि यह W3C Standard नहीं है। web.dev के अनुसार यह सक्रिय विकास में है, बदल सकती है, और Chrome में origin trial के ज़रिए आज़माई जा सकती है।

हमारे पेज वही दो टूल document.modelContext (या पुराने प्रीव्यू में navigator.modelContext) के ज़रिए रजिस्टर करते हैं। API न हो, तो ब्राउज़र कुछ अतिरिक्त नहीं चलाता। टूल पहले से मौजूद थे, इसलिए इसमें लगभग 40 लाइनें लगीं। इसे एक प्रयोग मानें।

हर लेयर, और क्या वह करने लायक है

लेयरयह क्या हैआज इसे कौन पढ़ता हैक्या यह करने लायक है?
सिमेंटिक HTML और लेबल वाले फ़ॉर्मअसली बटन, लिंक, लैंडमार्क और लेबलब्राउज़र, सहायक तकनीक और ब्राउज़र एजेंटहाँ। इसे सबसे पहले बनाएँ
सर्च और यूज़र एजेंट के लिए robots.txtहर क्रॉलर के लिए अलग नियम, जो सर्च और ट्रेनिंग को अलग करते हैंOpenAI, Anthropic, Perplexity और Google अपने टोकन दस्तावेज़ में बताते हैंहाँ। फिर CDN पर टेस्ट करें
Content Signalsrobots.txt में search, ai-input, ai-train की प्राथमिकताएँहमारी जाँच में किसी भी AI कंपनी ने इनका पालन करने की बात दस्तावेज़ में नहीं लिखीबस एक लाइन। उम्मीद कुछ न रखें
कैनोनिकल हेडर वाली मार्कडाउन कॉपीहर पेज का साफ़ टेक्स्ट वर्शनमार्कडाउन माँगने वाले एजेंट; कौन-से हैं, इसकी कोई प्रकाशित सूची नहींहाँ, कैनोनिकल हेडर के साथ
llms.txt और llms-full.txtएजेंट के लिए चुना हुआ इंडेक्स और पूरा टेक्स्टGoogle Search इसे नज़रअंदाज़ करता है; किसी क्रॉलर के दस्तावेज़ में इसे पढ़ने का दावा नहीं हैजनरेट होती हो तो रखें। यह विज़िबिलिटी बढ़ाने का साधन नहीं है
MCP सर्वर (केवल पढ़ने के लिए)घोषित टूल, जिन्हें एजेंट कॉल कर सकते हैंMCP क्लाइंट, जिन्हें कोई व्यक्ति कनेक्ट करता हैतभी, जब कॉल करने लायक डेटा या एक्शन हों
A2A एजेंट कार्डकिसी एजेंट का मशीन-पठनीय विवरणइसकी ओर इशारा करने वाले A2A क्लाइंटज़्यादातर वेबसाइटों के लिए अनिश्चित
API कैटलॉग (RFC 9727)आपकी सार्वजनिक APIs की एक well-known सूचीइसे खोजने वाले टूलAPIs पहले से हों तो सस्ता सौदा
WebMCPवे टूल जिन्हें पेज ब्राउज़र में रजिस्टर करता हैChrome, ओरिजिन ट्रायल के ज़रिएप्रयोग

जो हम दोबारा बनाएँगे

क्रम से: सिमेंटिक HTML, टेस्ट किया हुआ क्रॉलर एक्सेस, कैनोनिकल हेडर वाली मार्कडाउन कॉपी, जनरेट की गई llms.txt, और टूल तभी जब कॉल करने लायक कुछ हो। फिर नापें। सर्वर लॉग दिखाते हैं कि कौन-से एजेंट मार्कडाउन कॉपी फ़ेच करते हैं या /mcp कॉल करते हैं। फ़ेच करना सिटेशन नहीं है, और इनमें से कुछ भी इसकी गारंटी नहीं देता कि कोई AI सिस्टम आपका ज़िक्र करेगा।

एजेंट रेडीनेस हमारे AI सर्च ऑप्टिमाइज़ेशन काम का हिस्सा है, कंटेंट और मेज़रमेंट के साथ, जो तय करते हैं कि AI जवाब आपको सिटेट करते हैं या नहीं। इसे अपनी साइट में शामिल करवाने के लिए हमें अपने प्रोजेक्ट के बारे में बताएँ।