# Dokümantasyon Sitesi Kaynağı

> Herkese açık bir sitenin sitemap'ini, llms.txt'ini ya da bir crawl'ını indekslemek — algılama, beş tavan, robots.txt ve tazelik kontrolü.

- Güncelleme: 2026-09-25
- Kaynak: https://contextator.com/tr/docs/documentation-site-source/
- Dil: tr-TR
- Yazar: Muhammet Şafak

---
Herkese açık bir dokümantasyon sitesini kendi sitemap'i, kendi `llms.txt`'i ya da onu tek bir giriş
noktasından crawl ederek indeksleyin — oturum açma yok, kimlik bilgisi yok, hedefe hiçbir şey
kurulmuyor.

## Bir tane eklemek

**Add source → Documentation site**

| Alan | Notlar |
|-------|-------|
| **Name** | Mount öneki. Değiştirilemez |
| **Entry point** | Bir `sitemap.xml`, bir `llms.txt`, ya da crawl'ın başlayacağı sıradan bir sayfa |
| **Entry format** | Varsayılan olarak *Detect from the document*. Algılama reddettiğinde elle ayarlayın — sitemap, llms.txt ya da crawl |
| **Index now** | Kaynak kaydedilir kaydedilmez bir çalıştırmayı kuyruğa alır |

Giriş noktasını çekmek, üç formattan hangisi olduğunu algılamak ve ne bulunduğunu bildirmek için
**Test connection**'a basın — bir sitemap'ten bir sayfa sayısı, `llms.txt`'ten bir link sayısı ya da
bir crawl için başlangıç sayfasının kendisinin sunduğu link sayısı.

## Giriş noktası ne olabilir

Contextator, verdiğiniz URL'deki belgeyi okur, uzantısını değil, bu yüzden üçü de herhangi bir yolda
çalışır:

- **`sitemap.xml`** — her `<loc>` çekilecek bir sayfadır. Başka sitemap'lere işaret eden bir
  `<sitemapindex>`, `WEB_MAX_DEPTH` kadar derine ve en fazla `WEB_MAX_PAGES` iç içe sitemap okunacak
  şekilde otomatik olarak izlenir.
- **`llms.txt`** — bir sitenin LLM tarafından okunabilir bir indeksi için gelişmekte olan konvansiyon.
  Sayfadaki her Markdown linki çekilecek bir sayfadır.
- **Tek bir sayfa** — bunların dışındaki her şey bir **crawl** başlatır: o URL'den genişlik öncelikli,
  onun host'unu paylaşan ve onun yolunun altında kalan linkleri izleyerek.

Algılama, URL'yi değil belgeyi okur. Giriş noktasındaki belge üçünden hiçbirine uymadığında — bir
landing page'e yönlendiren bir sitemap, HTML olarak sunulan bir `llms.txt` — kaynak tahmin etmek
yerine reddeder ve **Entry format** alanını adlandırır, çünkü tahmin etmek, bir sayfayı ya da hiçbir
sayfayı indekslemeyen ve yine de başarı bildiren bir kaynak üretir. Bu durumda **Entry format**'ı elle
ayarlayın: bu, yalnızca algılananın bir göstergesi değil, çalışan bir geçersiz kılmadır.

## Beş tavan

Bir crawl, hepsi örnek genelinde ortam değişkeni olan beş sınırla sınırlıdır — kaynak başına
geçersiz kılma yoktur:

| Tavan | Değişken | Varsayılan |
|---------|----------|---------|
| Kaynak başına sayfa | `WEB_MAX_PAGES` | 1000 |
| Giriş noktasından link derinliği | `WEB_MAX_DEPTH` | 10 |
| İstekler arası gecikme | `WEB_REQUEST_DELAY_MS` | 500 |
| Toplam crawl zaman bütçesi | `WEB_CRAWL_BUDGET_MS` | 900000 (15 dakika) |
| `robots.txt`'e uy | `WEB_RESPECT_ROBOTS` | 1 (açık) |

Bir tavana çarpmak, senkronizasyonu başarısız kılmak yerine crawl'ı olduğu yerde bitirir — kaynak,
ulaştığı sayfaları indeksler ve çalıştırma hangi sınırın onu durdurduğunu söyler. Beşi de `.env`
içindeki, ürünle gelen
[`.env.example`](https://github.com/Contextator/Contextator/blob/main/.env.example)'de listelenen,
örnek genelindeki `WEB_*` değişkenleridir — ulaşılan bir tavan için, değişkenlerden birini
yükseltmeden önce giriş noktasını daraltmak ya da siteyi birden çok kaynağa bölmek daha iyi bir
çözümdür.

**`WEB_MAX_PAGES` indekslenen sayfaları değil, getirilen sayfaları sayar**, bilerek: metni yalnızca
script'lerinde olduğu için reddedilen bir sayfa, eskimiş bir sitemap bağlantısından gelen bir `404` ya
da başarısız bir bağlantı yine de birinin web sunucusu tarafından sunulmuştur, bu yüzden burada hiç
kimsenin hesabı olmadığı bir host'u korumak için var olan tek ayara sayılır. Hiç istenmeyen bir URL
hiçbir zaman sayılmaz — bir `robots.txt` reddi ya da başka bir host'ta duran bir bağlantı, süreçten
hiçbir şey çıkmadan yerel olarak alınan bir karardır.

## `robots.txt`

Varsayılan olarak uyulur (`WEB_RESPECT_ROBOTS=1`):

- Bir `Crawl-delay` yönergesi, hızı yalnızca `WEB_REQUEST_DELAY_MS`'in **üzerine çıkarabilir** — onu
  düşüremez.
- `robots.txt`'in `404` yanıtı vermesi **kısıtlama yok** olarak okunur — crawl devam eder.
- `robots.txt`'in hiç yüklenememesi — bir `5xx` ya da bir bağlantı hatası — kuralları okunamayan bir
  siteyi crawl'lamak yerine **senkronizasyonu başarısız kılar**.

Headless bir tarayıcı yoktur: HTML yanıtında bulunmak yerine içeriği istemci tarafı JavaScript'le
render edilen bir sayfa, tıpkı render edilemeyen bir dosyanın başka herhangi bir kaynakta olduğu gibi,
adıyla reddedilir.

## Bir sayfa neye dönüşür

Çekilen her sayfa, başka herhangi bir kaynaktan gelen bir `.html` dosyasının geçtiği aynı
HTML→Markdown dönüşümünden geçer — bkz. [İçerik Türleri](/tr/docs/content-types/). URL, belgenin yolu
olur: uzantıyı, URL'nin bittiği sonek değil, yanıtın içerik türü belirler, ve bir query string
atılmak yerine yolun içine hash'lenir, bu yüzden yalnızca query string'i farklı iki URL çakışmaz.

## Nasıl taze tutulur

Yalnızca bir **`sitemap.xml`** kaynağı ucuz bir tazelik kontrolü alır: iki istek, önce `robots.txt`
sonra sitemap'in kendisi, giriş sayısını ve en yeni `<lastmod>` tarihini son çalıştırmayla
karşılaştırır. İkisi de değişmediyse hiçbir şey yeniden çekilmez. Hiç `<lastmod>` taşımayan bir
sitemap'in karşılaştıracak hiçbir şeyi yoktur, bu yüzden aşağıdaki diğer iki biçim gibi her
çalıştırmada baştan sona yeniden çekilir.

**`llms.txt`** ve **crawl** kaynaklarının ucuzca kontrol edilebilecek eşdeğer bir sinyali yoktur, bu
yüzden her zamanlanmış çalıştırma, aynı beş tavan içinde kaynağı baştan sona yeniden çeker. Programın
kendisinin nasıl ayarlandığı için bkz. [İndeksleme](/tr/docs/indexing/).

## Sık karşılaşılan sorunlar

| Belirti | Neden ve çözüm |
|---------|---------------|
| Kaynak reddediyor ve **Entry format**'ı adlandırıyor | Algılama, giriş noktasının ne olduğunu söyleyemedi — bir landing page'e yönlendiren bir sitemap, HTML olarak sunulan bir `llms.txt`. Formatı elle ayarlayın |
| İndeksten bir sayfa eksik | `WEB_MAX_PAGES` ya da `WEB_MAX_DEPTH`'in ötesinde kalıyor, `robots.txt` tarafından dışlandı ya da içeriğini istemci tarafı JavaScript'le render ediyor |
| Çalıştırma bir tavanda durdu | Kaynağın satırı hangisini adlandırır — sayfa, derinlik ya da zaman bütçesi. Ayarı yükseltmeden önce giriş noktasını daraltın ya da siteyi kaynaklara bölün |
| Senkronizasyon `robots.txt`'te başarısız oldu | Hiç okunamadı (`5xx` ya da bir bağlantı hatası), bu bir izin olarak sayılmaz. Bir `404` sorun olmazdı |
| Bir sayfa *served as …, which is not a page this source can read* diyerek reddediliyor | Host, bu kaynağın okumadığı bir içerik türü gönderiyor — bir `.md` dosyasında `application/octet-stream` yaygın olanıdır. Yalnızca HTML, Markdown ve düz metin okunur |
| Senkronizasyon başarısız oluyor ve mevcut belgeleri silmeyi reddettiğini söylüyor | Çalıştırma, kaynak zaten belge tutarken hiçbir şey indekslemedi — bir CDN'in kısa süreliğine bir landing page ile yanıtladığı bir sitemap, yeniden adlandırılmış bir `llms.txt`. Belgeler, kaybolmuş sayılıp silinmek yerine tutulur; giriş noktasını kontrol edin, sonra yeniden senkronize edin |
