robots.txt'te Siteyi AI'dan Gizleyen 7 Yaygın Hata
Kısaca: Robots.txt'te en sık yapılan hatalar arasında Disallow: / ile tüm siteyi kapatmak, wildcard karakterlerini yanlış kullanmak, birden fazla User-agent bloğunun birbirini ezmesi, CDN veya staging ortamındaki eski dosyanın canlıda kalması sayılabilir. Bu hataların çoğu Google Search Console'daki robots.txt raporu, URL denetimi ve tarayıcıdan doğrudan kontrol ile tespit edilebilir.
1. Disallow: / ile Tüm Siteyi Kapatmak
Robots.txt dosyasında en yıkıcı hata, tüm tarayıcıları engelleyen bir kural yazmaktır:
User-agent: *
Disallow: /
Bu yapılandırma, Googlebot, GPTBot, ClaudeBot dahil tüm tarayıcıların sitenizin her sayfasına erişimini engeller. Sonuç olarak Google arama sonuçlarından düşersiniz, ChatGPT ve diğer AI araçları içeriğinizi indeksleyemez.
Doğru kullanım: Yalnızca belirli dizinleri engellemek istiyorsanız:
User-agent: *
Disallow: /admin/
Disallow: /private/
Tüm siteyi açık bırakmak için Disallow: satırını boş bırakın veya hiç yazmayın:
User-agent: *
Disallow:
Test yöntemi: Google Search Console → Ayarlar → robots.txt raporu bölümünden dosyanızı görüntüleyin. Ayrıca tarayıcınızda https://siteniz.com/robots.txt adresini açarak içeriği doğrudan kontrol edin.
2. Wildcard Karakterlerini Yanlış Kullanmak
Robots.txt standart sözdiziminde yalnızca * (herhangi bir karakter dizisi) ve $ (satır sonu) wildcard'ları tanınır. Ancak bazı yöneticiler düzenli ifade (regex) benzeri yapılar kullanmaya çalışır:
User-agent: *
Disallow: /search?*query=
Disallow: /*.pdf$
İlk satır doğrudur; * ile "query=" içeren tüm arama URL'lerini engeller. İkinci satır da doğrudur; $ ile ".pdf" ile biten dosyaları engeller. Ancak şu hatalı:
Disallow: /[0-9]+/
Köşeli parantez ve + işareti robots.txt'te geçersizdir; bu satır yalnızca tam olarak /[0-9]+/ yolunu engeller, sayısal ID'leri engellemez.
Doğru kullanım: Sayısal ID'li sayfaları engellemek için wildcard kullanın:
Disallow: /product/*/reviews
Bu, /product/123/reviews, /product/abc/reviews gibi tüm yolları engeller.
Test yöntemi: Google Search Console'daki URL denetimi aracında örnek bir URL girin (örneğin /product/123/reviews) ve "Tarama" sekmesinde robots.txt tarafından engellenip engellenmediğini kontrol edin.
3. Birden Fazla User-agent Bloğunun Birbirini Ezmesi
Robots.txt'te her User-agent için ayrı bir blok yazarsınız. Ancak bloklar arasına boş satır koymayı unutursanız veya aynı User-agent'ı iki kez tanımlarsanız, tarayıcılar yalnızca ilk eşleşen bloğu uygular:
User-agent: GPTBot
Disallow: /blog/
User-agent: *
Disallow: /admin/
User-agent: GPTBot
Allow: /blog/public/
Yukarıdaki örnekte GPTBot için iki blok var. Tarayıcılar genellikle ilk bloğu uygular; ikinci Allow kuralı göz ardı edilir. Sonuç olarak GPTBot /blog/public/ dahil tüm /blog/ dizinini engellenmiş görür.
Doğru kullanım: Her User-agent için tek bir blok yazın ve bloklar arasına boş satır ekleyin:
User-agent: GPTBot
Disallow: /blog/
Allow: /blog/public/
User-agent: *
Disallow: /admin/
Ayrıca Allow kuralını Disallow'dan önce yazmayın; robots.txt'te daha spesifik kurallar önceliklidir, ancak sıralama okunabilirlik açısından önemlidir.
Test yöntemi: Dosyanızı bir robots.txt doğrulayıcı ile kontrol edin (örneğin Ryte Robots.txt Validator). Ayrıca GPTBot için curl -A "GPTBot" https://siteniz.com/blog/public/ komutuyla sunucunuzun yanıtını test edebilirsiniz (ancak robots.txt bir erişim güvenlik mekanizması değil, nezaket protokolüdür; sunucu 200 döndürse bile tarayıcı robots.txt'e uymalıdır).
4. CDN veya Önbellekteki Eski robots.txt
Cloudflare, Fastly veya başka bir CDN kullanıyorsanız, robots.txt dosyanız edge sunucularda önbelleğe alınmış olabilir. Dosyayı güncelleseniz bile tarayıcılar eski sürümü görmeye devam eder:
# Eski dosya (CDN'de önbellekte)
User-agent: *
Disallow: /
Yeni dosyayı yüklediniz:
User-agent: *
Disallow: /admin/
Ancak Googlebot hâlâ eski Disallow: / kuralını görüyor ve sitenizi taramıyor.
Çözüm: CDN kontrol panelinizden robots.txt için önbelleği temizleyin (purge). Cloudflare'de "Caching → Purge Cache → Custom Purge" bölümünden https://siteniz.com/robots.txt URL'sini girin. Ayrıca robots.txt için önbellek süresini kısaltın veya hiç önbelleğe almayın (Cache-Control: no-cache).
Test yöntemi: Tarayıcınızda https://siteniz.com/robots.txt adresini açın ve sayfayı yenileyin (Ctrl+F5 ile hard refresh). Yanıt başlıklarında (Developer Tools → Network sekmesi) X-Cache: HIT veya Age: değeri varsa dosya önbellekten geliyordur. Önbelleği temizledikten sonra X-Cache: MISS görmelisiniz.
5. Staging Dosyasının Canlıya Çıkması
Geliştirme veya staging ortamında test amacıyla tüm tarayıcıları engelleyen bir robots.txt kullanırsınız:
# staging.siteniz.com/robots.txt
User-agent: *
Disallow: /
Ancak bu dosya yanlışlıkla canlı siteye (production) deploy edilirse, tüm siteniz arama motorlarından ve AI tarayıcılarından gizlenir. Bu hata özellikle CI/CD pipeline'larında, dosya senkronizasyonunda veya manuel FTP yüklemelerinde sık görülür.
Önlem: Ortam değişkenlerine göre robots.txt içeriğini dinamik olarak oluşturun. Örneğin Node.js/Express'te:
app.get('/robots.txt', (req, res) => {
if (process.env.NODE_ENV === 'production') {
res.type('text/plain');
res.send('User-agent: *\nDisallow: /admin/');
} else {
res.type('text/plain');
res.send('User-agent: *\nDisallow: /');
}
});
Alternatif olarak, deployment scriptinizde staging robots.txt'yi production'a kopyalamayın; iki ayrı dosya tutun (robots.staging.txt ve robots.production.txt) ve deploy sırasında doğru olanı robots.txt olarak yükleyin.
Test yöntemi: Her deployment sonrası canlı sitede https://siteniz.com/robots.txt adresini kontrol edin. Ayrıca Google Search Console'da robots.txt raporunu inceleyin; dosya değiştiğinde Search Console genellikle birkaç saat içinde güncellenir.
6. Yorum Satırlarını Yanlış Yazmak
Robots.txt'te yorum satırları # ile başlar. Ancak bazı yöneticiler yorum işaretini satır ortasında kullanır:
User-agent: * # Tüm tarayıcılar
Disallow: /admin/ # Yönetim paneli
Bu sözdizimi geçersizdir. Tarayıcılar # işaretinden sonraki her şeyi yok sayar, ancak # işaretinden önceki kısmı işler. Yukarıdaki örnekte User-agent: * ve Disallow: /admin/ doğru çalışır, ancak okunabilirlik ve standartlara uygunluk açısından yorum satırları ayrı satırlarda olmalıdır:
# Tüm tarayıcılar
User-agent: *
# Yönetim paneli
Disallow: /admin/
Test yöntemi: Robots.txt dosyanızı bir syntax checker ile doğrulayın. Ayrıca Google Search Console'daki robots.txt raporunda uyarı mesajları olup olmadığını kontrol edin.
7. Sitemap Yolunu Yanlış Yazmak
Robots.txt'te sitemap URL'nizi belirtirken göreceli yol veya eksik protokol kullanırsanız, tarayıcılar sitemap'i bulamayabilir:
Sitemap: /sitemap.xml
Doğru format, tam URL olmalıdır:
Sitemap: https://siteniz.com/sitemap.xml
Ayrıca birden fazla sitemap varsa her birini ayrı satırda belirtin:
Sitemap: https://siteniz.com/sitemap.xml
Sitemap: https://siteniz.com/sitemap-news.xml
Test yöntemi: Google Search Console → Sitemap'ler bölümünden sitemap URL'nizi gönderin ve durumunu kontrol edin. "Getirilemedi" hatası alırsanız, robots.txt'teki URL'yi düzeltin ve Search Console'da yeniden gönderin.
Genel Test Kontrol Listesi
| Test Adımı | Araç/Yöntem | Beklenen Sonuç |
|---|---|---|
| Dosya erişimi | Tarayıcıda https://siteniz.com/robots.txt |
200 OK, düz metin içerik |
| Sözdizimi doğrulama | Google Search Console → robots.txt raporu | Hata veya uyarı yok |
| Belirli URL testi | Search Console → URL denetimi → Tarama sekmesi | "İzin verildi" veya "Robots.txt tarafından engellendi" |
| Önbellek kontrolü | Developer Tools → Network → Response Headers | X-Cache: MISS veya güncel Last-Modified |
| Sitemap doğrulama | Search Console → Sitemap'ler | "Başarılı" durumu |
Sık Sorulan Sorular
Robots.txt'te yaptığım değişiklik ne kadar sürede geçerli olur?
Google ve diğer arama motorları robots.txt dosyanızı her tarama öncesinde kontrol eder, ancak önbellekte tutabilir (genellikle 24 saat). Google Search Console'da "robots.txt raporunu yeniden getir" seçeneği yoktur; dosyayı güncelledikten sonra birkaç saat içinde Googlebot yeni sürümü alır. CDN kullanıyorsanız önbelleği manuel olarak temizlemeniz gerekir; aksi takdirde eski dosya günlerce aktif kalabilir.
GPTBot'u engelledim ama ChatGPT hâlâ sitemdeki içeriği gösteriyor, neden?
GPTBot yalnızca OpenAI'ın model eğitimi için kullandığı tarayıcıdır. ChatGPT'nin arama özelliği (ChatGPT Search) OAI-SearchBot tarayıcısını kullanır ve bu tarayıcı robots.txt'e uyar. Ancak bir kullanıcı ChatGPT'ye "şu siteyi özetle" dediğinde, ChatGPT-User adlı kullanıcı kaynaklı ajan devreye girer; OpenAI bu istekler için robots.txt kurallarının aynı şekilde uygulanmayabileceğini belirtir. Kullanıcı kaynaklı getirmeleri engellemek için sunucu veya WAF seviyesinde IP/User-Agent filtreleme yapmanız gerekir, ancak bu teknik olarak zordur ve hatalı pozitif sonuçlara yol açabilir.
Google-Extended'ı engelledim, Google Arama sıralamam düştü mü?
Hayır. Google-Extended bir robots.txt kontrol belirtecidir (ayrı bir tarayıcı değil) ve yalnızca Gemini uygulamaları ile Vertex AI için eğitim/grounding kullanımını kontrol eder. Google Arama sıralaması normal Googlebot tarafından yapılır ve Google-Extended'dan etkilenmez. Ancak Google AI Overviews (arama sonuçlarında AI özetleri) normal Googlebot ve snippet kontrolleriyle (nosnippet, max-snippet, data-nosnippet HTML attribute'leri) yönetilir. Google-Extended'ı engellemek AI Overviews'u etkilemez.
Robots.txt yerine meta robots veya X-Robots-Tag kullanmalı mıyım?
Robots.txt, tarayıcıların sayfayı getirmesini (crawl) engeller; meta robots veya X-Robots-Tag ise sayfanın indekslenmesini (index) engeller. Bir sayfayı hem taramadan hem de indekslemeden çıkarmak istiyorsanız, robots.txt ile engellemek yeterli değildir; çünkü tarayıcı sayfayı göremezse meta etiketini de okuyamaz. Google, "indekslenmesin ama taranabilsin" senaryosu için robots.txt'te engellememek, sayfada <meta name="robots" content="noindex"> kullanmak önerir. Hassas içerik (örneğin kullanıcı verileri) için robots.txt güvenlik mekanizması değildir; sunucu seviyesinde kimlik doğrulama (HTTP Basic Auth, IP whitelist) veya WAF kuralları kullanın.