← notlar · 2026-09-13 · 2 dk okuma · seo · geo · ai
Her sayfanın .md ikizi ve llms.txt: yapay zeka motorları için site
Google, ChatGPT ve Perplexity aynı sayfayı farklı okur. Sekiz sitede kurduğum yöntem: her sayfanın Markdown ikizi, tek bir llms.txt, ve aynı veriden üretilen schema. Ne işe yarar, ne yaramaz.
Bu sitenin her sayfasının bir de Markdown sürümü var. /tr.md, /notes/agent-loops.tr.md, /work/kaloro.en.md gibi. Bir de kökte llms.txt. Niye?
Sorun: aynı sayfa, üç farklı okuyucu
Bir sayfayı bugün üç tür sistem okuyor. Google'ın klasik indeksi HTML'i iyi tanır; JSON-LD'yi okur, başlık hiyerarşisini anlar. Yapay zeka arama motorları (ChatGPT search, Perplexity, Claude) ise sayfayı bir dil modeline "yediriyor": menüler, çerezler, tekrar eden alt bilgiler, animasyon için eklenmiş boş elemanlar hepsi gürültü. Üçüncüsü bir insan; o da telefonundan bakıyor.
HTML'i üçüne de iyi olacak şekilde yazmak mümkün, ama masraflı. Daha ucuz yol: içeriği tek kaynaktan tutup her okuyucuya kendi biçimini vermek.
Markdown ikizi ne yapar
.md dosyası, sayfanın gürültüsüz hâli: başlık, bir paragraf özet, listeler, linkler. Hiç CSS yok, hiç script yok. Bir dil modeli bu dosyayı okuduğunda ne olduğunu ilk on kelimede anlıyor. Ayrıca alıntılanabilir: "Necati Doğrul, Antalya'da yaşayan yazılım mühendisi" cümlesi düz metinde tek satır, HTML'de üç etiketin içinde.
Bu sitede ikizler elle yazılmıyor. scripts/generate-md.mjs her build'den önce çalışıyor; uygulama listesini, deneyimi, notları ve vaka çalışmalarını sitenin kullandığı aynı veri dosyalarından okuyup public/ altına yazıyor. Yani HTML ile Markdown birbirinden sapamıyor; birine eklediğin şey ötekinde de var.
llms.txt ne yapar
robots.txt tarayıcıya "nereye girebilirsin" der. llms.txt bir dil modeline "bu site kimin, ne anlatır, önemli sayfalar şunlar" der. Kısa bir tanıtım, ardından .md dosyalarına linkler. Benim dosyamda ilk paragraf bilerek şu cümleyi taşıyor: yazar Necati Doğru ile aynı kişi değilim. Çünkü isim karışıklığı, bir dil modelinin en kolay yaptığı hata.
Dürüst not: ne kadar işe yarıyor
Google, kendi yapay zeka özellikleri için llms.txt'nin gerekmediğini açıkça söyledi; Google için asıl olan hâlâ iyi HTML ve schema. ChatGPT ve Perplexity tarafında ise .md ve llms.txt okunuyor, ama kimse "okudum, alıntıladım" diye rapor vermiyor. Ölçülen şey şu: yapay zeka atıflarının yarısından fazlası topluluk platformlarına ve Wikipedia'ya gidiyor. Kendi siten, o kaynakların tutarlı olduğu bir merkez olduğunda işe yarıyor.
Bu yüzden .md ikizi tek başına bir hile değil, bir setin parçası:
- Person schema:
alternateName,disambiguatingDescription, genişsameAs(LinkedIn, GitHub, X, App Store geliştirici sayfası). - Görünür FAQ: "Necati Doğrul kimdir?" sorusunun cevabı sayfada bir cümle olarak var; aynısı FAQPage schema'da.
- Aynı ad, aynı fotoğraf, aynı tek cümle her profilde. Varlık tutarlılığı, teknik işaretlerden daha çok sayılıyor.
.mdikizleri +llms.txt: gürültüsüz, alıntılanabilir metin.robots.txt'te yapay zeka botlarına açık izin.
Nasıl yaparsın
Statik bir sitede en kolayı: her sayfa.html yanına sayfa.html.md. Next.js gibi bir yapıda: içeriği veri dosyasında tut, build öncesi bir script ile public/ altına yaz, llms.txt'yi de aynı script üretsin. Elle yazılan ikiz iki haftada bayatlar; üretilen ikiz bayatlayamaz.
Aynı yöntemi sekiz uygulama sitesine de bastım. Bir tanesinde .md ikizi olmayan sayfa, karşılaştırma yazısı ve llms.txt yoktu; bir hafta sonra Perplexity'de uygulamanın adıyla arama yapınca site kaynak olarak çıkmaya başladı. Tek veri noktası, sebep-sonuç iddiası değil; ama maliyeti sıfır olan bir şeyin sonuç vermeye başladığı an.