# 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.

Yazan: Necati Doğrul · 2026-09-13 · https://necatidogrul.dev/tr/notes/markdown-twins-llms-txt · seo, geo, ai

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ı:

1. **Person schema**: `alternateName`, `disambiguatingDescription`, geniş `sameAs` (LinkedIn, GitHub, X, App Store geliştirici sayfası).
2. **Görünür FAQ**: "Necati Doğrul kimdir?" sorusunun cevabı sayfada bir cümle olarak var; aynısı FAQPage schema'da.
3. **Aynı ad, aynı fotoğraf, aynı tek cümle** her profilde. Varlık tutarlılığı, teknik işaretlerden daha çok sayılıyor.
4. `.md` ikizleri + `llms.txt`: gürültüsüz, alıntılanabilir metin.
5. `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.

---
Necati Doğrul · https://necatidogrul.dev
