Aynı siteyi hem insan okurlara hem de AI ajanlarına sunmak için altı pratik adım, kopyalanabilir kontrol listesiyle
Son dört günde Claude Code'la birlikte smarts.md'yi insanlar için yapılmış bir akıllı kontrat dokümantasyon sitesinden AI ajanları için yapılmış bir siteye dönüştürdük.
Aynı şey gibi duruyorlar. Değiller. İnsanlar için bir site; okunabilirlik, aranabilirlik ve yükleme süresi için optimize edilir. AI ajanları için bir sitenin cevaplaması gereken sorular farklıdır:
robots.txt kapıyı kilitlemiş mi?Claude'a yaptırdığım altı şey aşağıda. Her biri tek başına faydalı ve kendi sitene ayrı ayrı taşıyabilirsin.
robots.txt'te AI crawler'ları açıkça davet etÇoğu site robots.txt'ini eski bir şablondan miras alır ve tanımadığı User-Agent'ları üstü kapalı şekilde engeller. Ama 2025 sonrasında birçok AI crawler'ı yeni User-Agent — GPTBot, ClaudeBot, PerplexityBot, Applebot-Extended, Google-Extended, CCBot, meta-externalagent ve fazlası. İçeri almak istiyorsan açıkça Allow etmelisin.
smarts'ın robots.txt'i bir politika notuyla açılıyor, sonra OpenAI, Anthropic, Perplexity, Google Gemini, Apple, Common Crawl, Meta ve Cohere'yi kapsayan 12 crawler için User-agent + Allow: / listeliyor. Tavır net: bu site AI tarafından okunmak için var.
llms.txt — LLM'ler için menüllms.txt, llmstxt.org'un önerdiği bir kongre: site köküne kısa bir Markdown koyarsın ve LLM'e bu site nedir, nasıl kullanılır, ana giriş noktaları nerede anlatırsın. Sitenin elevator pitch'i gibi.
smarts'ın llms.txt'i yaklaşık 60 satır:
/{chain}/{address} vs kısa slug)Püf nokta: LLM'ler dokümanını token ile okuyor, o yüzden tüm siteyi crawl etmezler. Damıtılmış bir dizin ver, isabet oranı belirgin şekilde artar.
.well-known/mcp.json — erken bahisMCP protokolü henüz /.well-known/openid-configuration gibi bir discovery kongresini standartlaştırmadı. Bugün sabit bir well-known yolunu crawl eden genel bir client yok.
Ama manifest'i yayımlamak 30 satır:
def well_known_mcp
response.set_header("Cache-Control", "public, max-age=3600")
response.set_header("Access-Control-Allow-Origin", "*")
render json: {
name: "smarts",
version: "0.1.0",
description: "...",
protocol_version: "2024-11-05",
transports: [{ type: "sse", endpoint: "https://smarts.md/mcp/sse" }],
capabilities: { tools: true, resources: false, prompts: false },
tools: MCP_TOOLS.map { |t| { name: t[:name], description: t[:blurb] } }
}
end
Bir discovery kongresi netleştiği anda tek satır değiştirmeme gerek yok. Aynı zamanda developer'lar için self-documentation — MCP'mi merak eden curl smarts.md/.well-known/mcp.json yeter.
Kilit nokta: tools dizisi MCP_TOOLS sabitinden türetiliyor, tek hakikat kaynağı. Mevcut bir yapısal test her app/tools/*_tool.rb'nin o sabit içinde görünmesini zorluyor, dolayısıyla manifest "yeni tool'u unutma" garantisini bedavaya miras alıyor.
.md varyantı: her sayfa için WebFetch-dostu damıtmaBu benim favorim. Claude Code'un WebFetch tool'u gelişigüzel HTML'i kendisi temizleyip içerik çıkarmak zorunda — token açısından pahalı ve güvenilmez. Peki doğrudan .md versen?
Rails'in respond_to'su bunu natif destekliyor:
# config/routes.rb
get ":slug(.:format)", to: "contracts#show",
constraints: { slug: ContractSlugs::ROUTE_PATTERN, format: /html|md/ }
https://smarts.md/usdc-eth HTML döner; https://smarts.md/usdc-eth.md 40 satırlık Markdown döner — adres, chain, sınıflandırma, MCP endpoint, AI ajanından nasıl sorgulanacağı, kaynak linkler.
# USD Coin on Ethereum
- **Address:** `0xa0b8...`
- **Chain:** Ethereum
- **Classification:** ERC-20 Token
## Query via AI agent
- **MCP endpoint:** `https://smarts.md/mcp/sse`
- **Reference:** `usdc-eth`
- **Sample prompt:** "Tell me the current state of usdc-eth"
Tek fetch, AI ajanının istediği tüm yapısal içerik orada, DOM parser'a gerek yok. Claude bunu hızlı halletti — bir controller, iki .md.erb şablonu, routes'a (.:format), bitti.
Bu tam tersi yönde bir discovery: ziyaretçilerimin bir kısmı zaten Claude Code / Cursor / Windsurf kullanıyor. Bir kontrat sayfasına geliyorlar, bir sonraki adım çoğunlukla "bırak AI'm buna bir baksın" oluyor.
O yüzden her kontrat sayfasında şu kartı render ediyorum:
usdc-eth) veya chain/address, yanında Kopyala butonumcp.smarts.md'ye işaret (tek satırlık kurulum)"Bu kontrata bakıyorum" ile "AI'ma soruyorum" arasında tek tıklık sürtünme. Kart bir DaisyUI card'ı ve genel bir Stimulus copy controller kullanıyor — 50 satır erb. Bir regresyon testi data-copy-text-value özelliklerini sabitliyor, böylece gelecekte bir refactor kullanıcıların panosuna sessizce yanlış string yapıştıramaz.
OpenGraph, Twitter Card, JSON-LD — geleneksel arama ve sosyal kart katmanı. Yapmaya değer, çünkü AI crawler'ları da burayı okuyor.
İlginç seçim, JSON-LD'nin bir akıllı kontratı nasıl tanımlaması gerektiği. Claude WebPage'in bir SoftwareApplication'ı sardığı yapıyı seçti:
{
"@type": "WebPage",
"about": {
"@type": "SoftwareApplication",
"name": "USD Coin",
"applicationCategory": "SmartContract",
"operatingSystem": "Ethereum",
"identifier": "0xa0b8..."
}
}
operatingSystem'e chain adı, identifier'e adres, additionalType'a sınıflandırma (örn. "Uniswap V3 Pool"). schema.org'da adanmış SmartContract tipi yok, ama SoftwareApplication + bu alanlar LLM'in "Ethereum'da çalışan, belirli adresi olan bir kontrat" olduğunu anlaması için yeterli.
OG görseli 1200×630 summary_large_image; Twitter Card, breadcrumb, softwareVersion, license alanları da tamamlandı.
Yukarıdaki altı madde, dört gündeki yedi PR'dan çıktı:
| PR | Dosya | Boyut |
|---|---|---|
feat/ai-crawler-discovery |
2 | ~126 loc |
feat/well-known-mcp-manifest |
4 | ~129 loc |
feat/markdown-contract-pages |
6 | ~298 loc |
feat/contract-mcp-card |
3 | ~126 loc |
feat/seo-meta-tags |
8 | ~292 loc |
feat/seo-enrichments |
8 | ~189 loc |
feat/og-card |
— | — |
Her biri kendi testleri ve commit mesajlarıyla bağımsız bir PR. Bu kadar ince doğrama ritmi Claude'la çalışmanın en değerli yanı — her PR bir bakışta diff'i gözden geçirecek kadar küçük, ama üst üste konduğunda site tam bir AI yüzeyi çıkardı.
İçerik odaklı bir siten varsa ve AI-dostu yapmak istiyorsan, bu sırayla ilerle:
robots.txt'te ana AI crawler'larına açıkça Allow ver/llms.txt yaz (damıtılmış bir menü).md varyantı ekle/.well-known/mcp.json yayımlaİlk beşini çoğu SEO mühendisi söylemeyecek — geleneksel SEO playbook'unda yoklar. Ama benim dört günlük verilerime göre AI trafik eğrisi ile insan trafik eğrisi tamamen bağımsız iki seri. İkisine de hizmet etmek lazım.