Geonode logo
Geonode Team

Geonode Team

Güncellenme: 7 Ekim 2026

Yayınlanma: 2 Eylül 2026

robots.txt Dosyasını Okuma: Kapsamlı Bir Kılavuz

`robots.txt` 2022 yılında bir gelenek olmaktan çıktı. Artık, tanımlanmış eşleştirme anlamları ve gerekli davranışları içeren bir standarttır, [RFC 9309](https://www.rfc-editor.org/rfc/rfc9309.txt). Bu konuyla ilgili açıklamaların çoğu bu tarihten daha eskidir ve iki konuda hatalıdır: kuralların sırayla eşleştirildiğini söylerler (öyle değildir) ve eksik bir dosyanın erişilemeyen bir dosya ile aynı anlama geldiğini söylerler (öyle değildir). İşte spesifikasyonda aslında ne yazdığı ve gerçek bir dosyanın nasıl doğru okunacağı.

Görüşümüz: Biz Geonode olarak, veri toplayan kişilere proxy satıyoruz; dolayısıyla robots.txt, müşterilerimizin çalışmalarının tam ortasında yer alıyor. Dürüstçe söylemek gerekirse, bu kurallara uymak sadece sitenin değil, sizin de çıkarınıza. Bu dosyaya saygı duyan, kendini tanıtan ve hızını ayarlayan bir tarayıcı, site operatörlerinin izin vermeyi tercih edebileceği bir tarayıcıdır. Bu dosyayı görmezden gelen bir tarayıcı ise engellenmesi gereken bir baş belasıdır ve engelleme işlemi onlar için ucuz, sizin için ise pahalıdır. Ayrıca, standardın bu konuda ne dediği konusunda da net olmak istiyoruz: RFC, bu kuralların "bir erişim yetkilendirme biçimi olmadığını" açıkça belirtir — bu nedenle robots.txt dosyasına uymak gereklidir ancak yeterli değildir; hizmet şartları ise ayrı bir konudur.

robots.txt Nedir ve Nedir Değildir

RFC'nin kendi tanımlaması mevcut en net açıklamadır:

Tarayıcıların URI alanının tamamını ziyaret etmesi, hizmet sahipleri için sakıncalı olabilir. Bu belge, tarayıcıların URI'lere erişirken uymaları istenen ve aslen "Robotlar Dışlama Protokolü" tarafından tanımlanan kuralları belirtir.

Bu kurallar, bir erişim yetkilendirme biçimi değildir.

Son cümle iki anlama gelmektedir. Bu, izin verilmeyen bir yolun korunmadığı — kuralı uygulayan hiçbir şeyin olmadığı — anlamına gelir; aynı zamanda izin verilen bir yolun bu nedenle yetkilendirilmediği anlamına da gelir, çünkü izin bir metin dosyasından değil, şartlar ve yasadan kaynaklanır.

Güvenlik bölümü, ilk kısmı açıkça ortaya koyar ve pek çok kişi bunu tersine anladığı için alıntı yapmaya değer:

Robotları Dışlama Protokolü, geçerli içerik güvenlik önlemlerinin yerini almaz. robots.txt dosyasında yolların listelenmesi, bu yolları herkese açık hale getirir ve dolayısıyla bu yolların keşfedilebilir olmasını sağlar.

Yani Disallow: /admin/secret-reports/, o yolun var olduğunu tüm dünyaya duyurur. Bir robots.txt dosyası yazıyorsanız, bu durum hassas yolları dosyada hiç listelememeniz için bir gerekçedir — RFC’nin açıkça önerdiği gibi kimlik doğrulama kullanın.

Biçim

Bir dosya, gruplardan oluşan bir dizidir. Her grup, bir veya daha fazla user-agent satırıyla başlar ve ardından kurallar gelir.

User-agent: *
Disallow: /admin/
Disallow: /search?
Allow: /search/help

User-agent: BadBot
Disallow: /

Sitemap: https://example.com/sitemap.xml

Tarayıcıların DESTEKLEMESİ GEREKEN üç özel karakter:

KarakterAnlamÖrnek
#Satır yorumuallow: / # comment in line
$Eşleşme deseninin sonuallow: /this/path/exactly$
*Sıfır veya daha fazla herhangi bir karakterallow: /this/*/exactly

Sonunda bulunan boş bir grup anlamlıdır: RFC'de "son grubun kuralı olmayabilir, bu da her şeye örtük olarak izin verdiği anlamına gelir" şeklinde belirtilmiştir. Dolayısıyla, altında hiçbir şey bulunmayan sondaki User-agent: quxbot, söz konusu tarayıcıya sınırsız erişim izni verir.

Yol içermeyen boş bir Disallow: de her şeye izin verildiği anlamına gelir — bu, "kısıtlama yok" demek için geleneksel bir yöntemdir.

Sitemap:, temel dilbilgisinin bir parçası değildir. RFC’deki ABNF, uygulayıcılara “ihtiyacınız olan ek satırları (örneğin, Site Haritaları) tanımlayın” şeklinde bir not içerir; bu nedenle bu, zorunlu bir özellikten ziyade yaygın olarak desteklenen bir uzantıdır. Crawl-delay de aynı kategoridedir: yaygındır, birçok tarayıcı tarafından kabul edilir ve standartta yer almaz.

User-Agent Eşleştirmesi Nasıl Çalışır?

Çoğu kişinin sandığından daha ayrıntılı bir konudur ve doğru bir şekilde anlaşılması önemlidir.

Token, User-Agent başlığınızın bir alt dizesidir. RFC'nin örneği: Mozilla/5.0 (compatible; ExampleBot/0.1; https://www.example.com/bot.html) başlığı, user-agent: ExampleBot adresindeki robots.txt satırına karşılık gelir ve burada "ürün tokeni (ExampleBot), User-Agent HTTP başlığının bir alt dizesidir" şeklinde belirtilir.

Eşleştirme işleminde büyük/küçük harf duyarlılığı yoktur. "Tarayıcılar, ürün belirteciyle eşleşen grubu bulmak için büyük/küçük harf duyarlı olmayan eşleştirme KULLANMALIDIR ve ardından grubun kurallarına uymalıdır."

Birden fazla eşleşen grup birleştirilir. "Kullanıcı aracısıyla eşleşen birden fazla grup varsa, eşleşen grupların kuralları tek bir grupta birleştirilmelidir." Dolayısıyla, aynı dosyadaki iki ayrı User-agent: ExampleBot bloğu, ikincisinin birincisini geçersiz kılması yerine tek bir birleştirilmiş kural kümesi oluşturur.

Birden fazla değil, tek bir grup elde edersiniz. Bir grup, tokeninizi adlandırıyorsa, o grubu kullanırsınız ve * grubunu tamamen göz ardı edersiniz — joker karakter bir yedek seçenektir, belirli kuralların eklendiği bir temel değildir. Bu durum kullanıcıları şaşırtabilir: Kendi grubu olan bir tarayıcı, genel kurallara tabi değildir.

Ve hiçbir eşleşme bulunmazsa: "Ürün belirteciyle eşleşen hiçbir grup yoksa ve * değerine sahip bir user-agent satırı içeren hiçbir grup yoksa ya da hiç grup mevcut değilse, hiçbir kural uygulanmaz."

Eşleştirme, Sıraya Göre Değil, Spesifikliğe Göre Yapılır

Bu alandaki en yaygın yanlış ifade edilen kural.

Bir URI’ye erişimin izin verilip verilmediğini değerlendirmek için, bir tarayıcı “allow” ve “disallow” kurallarındaki yolları URI ile eşleştirmelidir. Eşleştirme, büyük/küçük harf duyarlı olmalıdır. Eşleştirme, yolun ilk oktetiyle başlamalıdır. Bulunan en spesifik eşleşme KULLANILMALIDIR. En spesifik eşleşme, en fazla oktete sahip olan eşleşmedir.

İlk eşleşme kazanmaz. Son eşleşme kazanmaz. En uzun eşleşme kazanır.

RFC'nin kendi örneği:

User-Agent: foobot
Allow: /example/page/
Disallow: /example/page/disallowed.gif

example.com/example/page/disallowed.gif için, Disallow satırı daha uzun olduğundan geçerlidir — ikinci sırada görünmesine ve üst yolun Allow ile kapsanmasına rağmen.

Dosyadaki sırayı tersine çevirseniz de hiçbir şey değişmez. Sıra önemsizdir.

İki kural daha durumu tamamlar. Eşitlik durumunda Allow kuralı geçerlidir: "Bir 'allow' kuralı ile bir 'disallow' kuralı eşdeğer ise, 'allow' kuralı KULLANILMALIDIR." Ve eşleşme yoksa izin verilir: "Bir gruptaki kurallar arasında eşleşen bir kullanıcı ajanı bulunmazsa veya grupta kural yoksa, URI'ye izin verilir."

Bililmesi gereken bir ayrıntı daha: "/robots.txt URI'si zımnen izin verilir", dolayısıyla her şeyi engelleyen bir dosya kendi kendisini engellemez.

Yol eşleşmesi aynı zamanda yüzde kodlamalı normalleştirmeyi de içerir. ASCII dışındaki oktetler ve ayrılmış aralıktaki oktetler, karşılaştırma öncesinde "yüzde kodlamasına tabi tutulmalıdır" ve URI'daki yüzde kodlamalı bir ASCII okteti, ayrılmış olmadığı sürece "karşılaştırma öncesinde kodlamasından arındırılmalıdır". Uygulamada: bunu kendiniz yazmak yerine, bakımlı bir kütüphane kullanın.

Durum Kodları Her Şeyi Değiştirir

Buradaki kurallar kesin, sıklıkla göz ardı ediliyor ve ikisi arasındaki fark çok büyük.

Başarı. "Tarayıcı, robots.txt dosyasını başarıyla indirirse, tarayıcı ayrıştırılabilir kurallara UYMAK ZORUNDADIR."

Yönlendirmeler. "Tarayıcılar, yetki alanları arasında olsa bile en az beş ardışık yönlendirmeyi takip ETMELİDİR." Beş yönlendirme içinde ulaşılan bir dosya "alınmalı, ayrıştırılmalı ve kuralları ilk yetki alanı bağlamında uygulanmalıdır". Beş yönlendirmenin ötesinde, bir tarayıcı "robots.txt dosyasının erişilemez olduğunu varsayabilir."

Ulaşılamıyor — 4xx. "Bir sunucu durum kodu, robots.txt dosyasının tarayıcı için ulaşılamadığını gösteriyorsa, tarayıcı sunucudaki herhangi bir kaynağa erişebilir." 404 kodu, herhangi bir kısıtlama olmadığı anlamına gelir.

Ulaşılamıyor — 5xx. İnsanların sıklıkla yanlış anladığı durum budur: "robots.txt dosyasına sunucu veya ağ hataları nedeniyle ulaşılamıyorsa, bu durum robots.txt dosyasının tanımlanmamış olduğu anlamına gelir ve tarayıcı, erişimin tamamen yasaklandığını varsaymak ZORUNDADIR."

5xx kodu, tamamen durmak anlamına gelir. "Eskisi gibi devam et" ya da "önbellekteki kopyayı süresiz olarak kullan" değil — tam erişim engeli. RFC, uzun vadeli bir istisna izin verir: dosya "makul derecede uzun bir süre (örneğin, 30 gün) boyunca" tanımlanmamışsa, tarayıcılar robots.txt dosyasının erişilemez olduğunu varsayabilir... veya önbellekteki kopyayı kullanmaya devam edebilir.

Ayrıştırma hataları. "Tarayıcılar, robots.txt dosyasının her satırını ayrıştırmaya ÇALIŞMALIDIR. Tarayıcılar, ayrıştırılabilir kuralları KULLANMALIDIR." Biçimi bozuk bir satır, dosyayı geçersiz kılmaz; okuyabildiğiniz kısmı kullanırsınız.

Bir tarayıcı yazan herkes için pratik sonuç şudur: Hedefteki geçici bir kesinti, taramanızı hızlandırmamalı, duraklatmalıdır. Bunu tersine anlamak, zaten zor durumda olan bir siteye daha fazla yük bindirmek anlamına gelir.

Önbellekleme ve Sınırlar

Kendi geliştirdiğimiz uygulamaların başını belaya sokan iki operasyonel gereklilik.

En az günde bir kez yenileyin. "Tarayıcılar, alınan robots.txt dosyasının içeriğini önbelleğe alabilir... Tarayıcılar, robots.txt dosyasına erişilemediği durumlar hariç, önbelleğe alınmış sürümü 24 saatten fazla kullanmamalıdır."

Tarayıcınız başladığında dosyayı bir kez alıp bir hafta boyunca çalıştırmak kurallara uygun değildir. Siteler kurallarını değiştirir ve uzun süre çalışan bir işin bunu fark etmesi gerekir.

En az 500 KiB'yi ayrıştırın. "Ayrıştırma sınırı en az 500 kibibayt OLMALIDIR." Büyük sitelerin büyük dosyaları vardır ve keyfi olarak daha küçük bir boyutta kesintiye uğrayan bir ayrıştırıcı, kuralları fark edilmeden gözden kaçıracaktır — bu, burada olası en kötü hata durumudur, çünkü uyumlu olduğunu sanan ancak aslında olmayan bir tarayıcı ortaya çıkarır.

Gerçek Bir Dosyayı Okuma

Gerçekçi bir örnek üzerinden inceleme.

User-agent: *
Disallow: /search
Allow: /search/about
Disallow: /*?sessionid=
Disallow: /*.pdf$
Crawl-delay: 2

User-agent: GPTBot
Disallow: /

User-agent: PartnerBot
Disallow:

Sitemap: https://example.com/sitemap_index.xml

Satır satır:

**Disallow: /search

**, /search

, /search/

, /search/results

gibi, bu dizeyle başlayan her şeyi engeller; çünkü eşleştirme ilk oktetten başlar ve $

yoktur.

**Allow: /search/about

** daha uzundur, dolayısıyla bu belirli yol için önceliklidir. Önemli olan sıralama değil, en uzun eşleşmedir.

**Disallow: /*?sessionid=

**, öncesinde ne olursa olsun, oturum parametresi içeren herhangi bir yolu engellemek için joker karakter kullanır.

**Disallow: /*.pdf$

**, .pdf

ile biten URL'leri engeller. $

olmasaydı, /report.pdf.html

adresini de engellerdi.

**Crawl-delay: 2

**, standarttan ziyade bir uzantıdır ve buna uymak iyi bir uygulamadır.

**User-agent: GPTBot

ile Disallow: /

**, söz konusu tarayıcıyı tamamen hariç tutar. GPTBot’a yalnızca bu kuralın uygulandığını unutmayın — *

grubuna tabi değildir, dolayısıyla yukarıdaki Crawl-delay

kuralı onun için geçerli değildir.

**User-agent: PartnerBot

ile boş bir Disallow:

** sınırsız erişim izni verir.

**Sitemap:

**, URL envanterine işaret eder; bu, çoğu dosyada en hemen kullanışlı satırdır. Bununla ne yapılacağını bir web sitesindeki tüm sayfaları bulma başlıklı yazımızda ele aldık.

Kodda Buna Özen Göstermek

Güncel bir ayrıştırıcı kullanın. Yalnızca özgüllük eşleştirme kuralı bile yaygın bir hata kaynağıdır; yüzde kodlamalı normalleştirme ise daha da sorunludur.

Python: urllib.robotparser standart kütüphanede bulunur ve basit durumlar için yeterlidir; Google'ın açık kaynaklı robotstxt ayrıştırıcısı ve Python bağlamaları RFC 9309'u tam olarak uygular. Scrapy'de RobotsTxtMiddleware yerleşik olarak bulunur ve yeni projelerde varsayılan olarak etkindir — kimsenin bunu devre dışı bırakmadığından emin olun.

Node: Standartı uygulayan birkaç bakımlı paket mevcuttur.

Go: RFC'nin eşleştirme kurallarına uyan kütüphaneler mevcuttur.

Ne kullanırsanız kullanın, şu dört noktaya dikkat edin:

Başlangıçta bir kez değil, her 24 saatte bir yenileyin. 5xx kodlarını tamamen yasaklanmış, 404 kodlarını ise kısıtlama yok olarak değerlendirin. Gerçek ürün tokeninizle eşleştirin ve User-Agent başlığınızın bunu içerdiğinden emin olun. En fazla beş yönlendirmeyi takip edin ve kuralları orijinal ana bilgisayar bağlamında uygulayın.

Ve RFC’de yer almayan ancak en az o kadar önemli olan beşinci kural: atladığınız öğeleri günlüğe kaydedin. Beklemediğiniz bir kural nedeniyle bir sitenin yarısını sessizce hariç tutan bir tarayıcı, eksik verilerin haftalar sonra bir raporun neden yanlış göründüğünü soran biri tarafından keşfedilmesine neden olur.

robots.txt Dosyasının Kapsamadığı Konular

Bu konuyu açıkça belirtmek önemlidir, çünkü insanlar bu konuyu her iki yönden de yanlış yorumlamaktadır.

Bu dosya, aldığınız verilerle ne yapabileceğiniz konusunda hiçbir şey belirtmez. Telif hakkı, veritabanı hakları ve hizmet şartları bağımsız olarak geçerlidir.

Bu bir izin değildir. RFC bunu açıkça belirtir. İzin verilen bir yol, sitenin tarayıcılardan kaçınmalarını istemediği yoldur; bu, toplu veri toplama izni ile aynı şey değildir.

Standartta herhangi bir hız sınırı yoktur. Crawl-delay bir uzantıdır. Kibar davranmak size kalmıştır.

Amaçlar arasında ayrım yapmaz. Bir dosya, standart sözdiziminde "dizinleme evet, yapay zeka eğitimi hayır" diyemez; ancak birçok site artık belirli yapay zeka tarayıcı belirteçlerini adlandırarak buna yakın bir yaklaşım sergilemektedir. AB'nin metin ve veri madenciliği çerçevesi, makine tarafından okunabilir hak saklı tutma hükümlerini öngörmektedir ve bunları ifade etme mekanizmaları hâlâ şekillenme aşamasındadır.

Kimseyi durduramaz. Bu bir taleptir. Uygulama, hız sınırlaması, engelleme ve yasal süreçlerden oluşur — bu da, operatörlerin durdurmak zorunda oldukları tarayıcı yerine izin vermeyi tercih ettikleri tarayıcı olmasının pratik nedenidir.

İnsanlar Ayrıca Şunu Soruyor

robots.txt yasal olarak bağlayıcı mıdır?

Kendi başına değil. RFC 9309, bu kuralların “bir erişim yetkisi biçimi olmadığını” belirtir — bu, tarayıcıların uyması istenen bir taleptir. Yasal yükümlülükler, hizmet şartları, telif hakkı, veritabanı hakları ve yargı yetkisi alanına özgü yasalardan kaynaklanır; bunların tümü, dosyada ne yazdığına bakılmaksızın geçerlidir.

robots.txt kuralları sırayla eşleştirilir mi?

Hayır, ve bu konuyla ilgili en sık tekrarlanan yanılgı budur. Spesifikasyon, "bulunan en spesifik eşleşmenin KULLANILMASI GEREKTİĞİNİ" belirtir; burada "en spesifik", en fazla oktet içeren anlamına gelir. En uzun eşleşme geçerlidir, sıra önemsizdir ve eşitlik durumunda Allow adresi geçerlidir.

robots.txt dosyası 404 hatası verirse ne olur?

Dosya “erişilemez” durumdadır ve RFC’ye göre tarayıcı “sunucudaki herhangi bir kaynağa erişebilir”. Dosyanın olmaması, kısıtlama olmadığı anlamına gelir. Bu durum, sunucu hatasından farklıdır.

robots.txt dosyası 500 hatası döndürürse ne olur?

Dosya "erişilemez" ve tanımlanmamıştır; tarayıcı "tamamen yasaklandığını varsaymalıdır". Sunucu hatası, devam etmemek, tamamen durmak anlamına gelir. Uzun bir süre sonra — RFC 30 gün önerir — tarayıcı bunu erişilemez olarak değerlendirebilir veya önbellekteki kopyayı kullanmaya devam edebilir.

robots.txt dosyasını ne sıklıkla almalıyım?

En az 24 saatte bir. RFC, tarayıcıların "robots.txt dosyasına erişilemediği durumlar hariç, önbelleğe alınmış sürümü 24 saatten fazla KULLANMAMALARI" gerektiğini belirtir. Başlangıçta bir kez alıp bir hafta boyunca çalışmak kurallara uygun değildir.

Belirli bir kullanıcı ajanı grubu, joker karakter grubunun yerine geçer mi?

Onun yerine geçer. Bir grup, ürün belirtecinizi adlandırıyorsa, o grubu takip edersiniz ve * grubunu tamamen göz ardı edersiniz — belirli kurallar genel kurallara eklenmez. Aynı belirteci adlandıran iki grup, tek bir grupta birleştirilir.

robots.txt dosyasında * ve $ ne anlama gelir?

*, herhangi bir karakterden sıfır veya daha fazlasını eşleştirir; $ ise eşleştirme deseninin sonunu belirtir. Her ikisi de tarayıcıların DESTEKLEMESİ GEREKEN karakterlerdir. Disallow: /*.pdf$, .pdf ile biten URL'leri engeller; $ olmadan /file.pdf.html adresi de engellenirdi.

Hassas sayfaları gizlemek için robots.txt dosyasını kullanabilir miyim?

Hayır, bunu yapmak durumu daha da kötüleştirir. RFC'nin güvenlik bölümünde, "robots.txt dosyasında yolların listelenmesi, bu yolları herkese açık hale getirir ve dolayısıyla yolların keşfedilebilir olmasını sağlar" denilmektedir. Herkes bu dosyayı okuyabilir. Bunun yerine, spesifikasyonun açıkça önerdiği kimlik doğrulamayı kullanın.

Sonuç Olarak “

robots.txt” kısa, standartlaştırılmış ve rutin olarak yanlış uygulanmaktadır. Hataların çoğu üç kuraldan kaynaklanmaktadır.

En uzun eşleşme kazanır; ilk ya da son eşleşme değil. Dosyanın daha aşağısında yer alan bir Disallow, üstünde bulunan bir Allow’i geçersiz kılabilir ve bunun tersi de geçerlidir; bu durum tamamen uzunluğa bağlıdır. 5xx kodu, tamamen engellendiği anlamına gelir; bu, sezgisel bir uygulamanın yaptığının tam tersidir — sorun yaşayan bir site, sizden aynı miktarda değil, daha az trafik almalıdır. Ayrıca dosya en az günde bir kez yenilenmelidir; çünkü siteler fikirlerini değiştirebilir ve bir haftalık önbellek kopyası kurallara uygun değildir.

Kendi ayrıştırıcınızı yazmak yerine, bakımlı bir ayrıştırıcı kullanın; User-Agent başlığınızın gerçekten eşleşmesini beklediğiniz belirteci içerdiğinden emin olun ve atladığınız öğeleri günlüğe kaydedin; böylece eksik veriler bir sürpriz değil, bilinçli bir karar olur.

Ayrıca standardın kendi uyarısını da göz önünde bulundurun. Bu kurallar "bir erişim yetkilendirme biçimi değildir" — bunlara uymak, sizi operatörlerin kabul edebileceği bir tarayıcı haline getirir; ancak bu, şartların nelere izin verdiği ve topladığınız verilerle neler yapabileceğiniz gibi ayrı soruları çözmez.