Google, robots.txt spesifikasyonunu nasıl yorumluyor?

Google'ın otomatik tarayıcıları, Robot Hariç Tutma Protokolü'nü (REP) destekler. Yani Google'ın tarayıcıları, bir siteyi taramadan önce sitenin robots.txt dosyasını indirip ayrıştırarak sitenin hangi bölümlerinin taranabileceği bilgisine ulaşır. REP, Google'ın kullanıcılar tarafından yönetilen tarayıcılarına (örneğin, feed abonelikleri) veya kullanıcı güvenliğini artırmak için kullanılan tarayıcılara (örneğin, kötü amaçlı yazılım analizi) uygulanamaz.

Bu sayfada, Google'ın REP'i nasıl yorumladığını açıklanır. Orijinal standart için RFC 9309'a göz atın.

Robots.txt dosyası nedir?

Tarayıcıların sitenizin belirli bölümlerine erişmesini istemiyorsanız bunu sağlayacak kurallarla bir robots.txt dosyası oluşturabilirsiniz. Robots.txt dosyası, hangi tarayıcıların sitenizin hangi bölümlerine erişebileceğiyle ilgili kurallar içeren basit bir metin dosyasıdır. Örneğin, example.com için robots.txt dosyası aşağıdaki gibi görünebilir:

# This robots.txt file controls crawling of URLs under https://example.com.
# All crawlers are disallowed to crawl files in the "includes" directory, such
# as .css, .js, but Google needs them for rendering, so Googlebot is allowed
# to crawl them.
User-agent: *
Disallow: /includes/

User-agent: Googlebot
Allow: /includes/

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

Robots.txt kullanmaya yeni başlıyorsanız önce Robots.txt dosyasına giriş sayfamızı inceleyin. robots.txt dosyası oluşturmayla ilgili ipuçlarını da bulabilirsiniz.

Dosya konumu ve geçerlilik aralığı

Robots.txt dosyasını, desteklenen bir protokol üzerinde sitenin en üst düzey dizinine yerleştirmelisiniz. Robots.txt dosyasının URL'si de diğer URL'ler gibi büyük/küçük harfe duyarlıdır. Google Arama'nın desteklediği protokoller HTTP, HTTPS ve FTP'dir. Tarayıcılar, HTTP ve HTTPS üzerinde robots.txt dosyasını koşullu olmayan GET isteğiyle getirir, FTP'de ise anonim girişle standart RETR (RETRIEVE) komutunu kullanır.

Robots.txt dosyasında listelenen kurallar, yalnızca robots.txt dosyasının barındırıldığı ana makine, protokol ve bağlantı noktası numarası için geçerlidir.

Geçerli robots.txt URL'leri için örnekler

Aşağıdaki tabloda robots.txt URL örnekleri ve bunların geçerli olduğu URL yolları yer almaktadır. Birinci sütunda robots.txt dosyasının URL'si, ikinci sütunda ise robots.txt dosyasının hangi alanlarda geçerli olup hangilerinde uygulanmayacağı belirtilir.

Robots.txt URL örnekleri
https://example.com/robots.txt

Bu, genel kullanımdır. Diğer alt alan adları, protokoller veya bağlantı noktası numaraları için geçerli değildir. Aynı ana makine, protokol ve bağlantı noktası numarasında bulunan tüm alt dizinlerdeki dosyaların tamamı için geçerlidir.

Geçerli:
  • https://example.com/
  • https://example.com/folder/file
Geçerli değil:
  • https://other.example.com/
  • http://example.com/
  • https://example.com:8181/
https://www.example.com/robots.txt

Bir alt alan adındaki robots.txt dosyası yalnızca söz konusu alt alan adı için geçerlidir.

Geçerli https://www.example.com/

Geçerli değil:

  • https://example.com/
  • https://shop.www.example.com/
  • https://www.shop.example.com/
https://example.com/folder/robots.txt Geçerli bir robots.txt dosyası değildir. Tarayıcılar, alt dizinlerdeki robots.txt dosyalarını kontrol etmez.
https://www.exämple.com/robots.txt

IDN'ler (Uluslararası Hale Getirilmiş Alan Adı), punycode versiyonların eşdeğeridir. Ayrıca bkz. RFC 3492.

Geçerli:
  • https://www.exämple.com/
  • https://xn--exmple-cua.com/

Geçerli değil: https://www.example.com/

ftp://example.com/robots.txt

Geçerli: ftp://example.com/

Geçerli değil: https://example.com/

https://212.96.82.21/robots.txt

Ana makine adıyla aynı IP adresine sahip bir robots.txt dosyası, ana makine adı olarak yalnızca söz konusu IP adresinin taranması için geçerli olur. Söz konusu IP adresinde barındırılan tüm web siteleri için otomatik olarak geçerli olmaz (bununla birlikte, robots.txt dosyasının paylaşılması mümkündür. Bu durumda, robots.txt dosyası, paylaşılan ana makine adı altında da kullanılabilir).

Geçerli: https://212.96.82.21/

Geçerli değil: https://example.com/ (212.96.82.21 adresinde barındırılsa bile)

https://example.com:443/robots.txt

Standart bağlantı noktası numaraları (HTTP için 80, HTTPS için 443, FTP için 21), varsayılan ana makine adlarına eşdeğerdir.

Geçerli:

  • https://example.com:443/
  • https://example.com/

Geçerli değil: https://example.com:444/

https://example.com:8181/robots.txt

Standart olmayan bağlantı noktası numaralarındaki robots.txt dosyaları, yalnızca bu bağlantı noktası numaraları üzerinden kullanıma sunulan içerik için geçerlidir.

Geçerli: https://example.com:8181/

Geçerli değil: https://example.com/

Hataların ve HTTP durum kodlarının işlenmesi

Bir robots.txt dosyası istenirken, sunucunun yanıtındaki HTTP durum kodu, robots.txt dosyasının Google'ın tarayıcıları tarafından nasıl kullanılacağına etki eder. Aşağıdaki tabloda Googlebot’un, robots.txt dosyalarını farklı HTTP durum kodlarında nasıl işlediği özetlenmektedir.

Hataların ve HTTP durum kodlarının işlenmesi
2xx (success) Başarılı sinyali taşıyan HTTP durum kodları, Google'ın tarayıcılarını robots.txt dosyasını sunucu tarafından sağlandığı haliyle işlemeye sevk eder.
3xx (redirection)

Google, RFC 1945 tarafından tanımlandığı gibi en az beş yönlendirme atlamasını izler ve ardından durup bunu robots.txt için bir 404 olarak işler. Tarayıcı, yönlendirmelerden ötürü kuralları getiremediğinden bu durum, yönlendirme zincirindeki izin verilmeyen tüm URL'ler için geçerli olur.

Google, robots.txt dosyalarındaki mantıksal yönlendirmeleri (çerçeveler, JavaScript veya meta-refresh türü yönlendirmeler) takip etmez.

4xx (client errors)

Google tarayıcıları, 429 hariç tüm 4xx hatalarını, geçerli bir robots.txt dosyası yokmuş gibi işler. Yani Google, herhangi bir tarama kısıtlamasının olmadığını varsayar.

5xx (server errors)

Sunucu, Google'ın robots.txt isteğine belirli bir yanıt veremediği için Google, 5xx ve 429 sunucu hatalarını geçici olarak sitenin tamamında tarama izni olmadığı yönünde yorumlar. Google, sunucu hatası olmayan bir HTTP durum kodu alana kadar robots.txt dosyasını taramayı yeniden dener. 503 (service unavailable) hatası, yeniden deneme sıklığını oldukça artırır. 30 günden uzun bir süre boyunca robots.txt dosyasına ulaşılamazsa Google, robots.txt dosyasının önbelleğe alınan en son kopyasını kullanır. Bu kopya mevcut değilse Google, herhangi bir tarama kısıtlamasının olmadığını varsayar.

Taramayı geçici olarak askıya almanız gerekirse sitedeki tüm URL'ler için 503 HTTP durum kodu sunmanızı öneririz.

Bir sitenin eksik sayfalar için 404 yerine 5xx durum kodu döndürecek şekilde yanlış yapılandırıldığını tespit edebilirsek bu siteden gelen 5xx hatasını 404 hatası olarak değerlendiririz. Örneğin, 5xx durum kodu döndüren bir sayfadaki hata mesajı "Sayfa bulunamadı" ise durum kodunu 404 (not found) olarak yorumlarız.

Diğer hatalar Zaman aşımları, geçersiz yanıtlar, sıfırlanan veya kesintiye uğrayan bağlantılar ve HTTP öbekleme hataları gibi DNS veya ağ sorunlarından dolayı getirilemeyen robots.txt dosyaları, sunucu hatası olarak değerlendirilir.

Önbelleğe alma

Google, robots.txt dosyasının içeriğini genellikle 24 saate kadar önbellekte tutar ancak önbellekteki sürümün yenilenmesi mümkün değilse (örneğin, zaman aşımı veya 5xx hataları nedeniyle) içeriği daha uzun süre önbellekte tutabilir. Önbelleğe alınan yanıt, farklı tarayıcılar tarafından paylaşılabilir. Google, max-age önbellek kontrolü HTTP üstbilgilerine dayanarak önbellek ömrünü uzatabilir veya kısaltabilir.

Dosya biçimi

Robots.txt dosyası, UTF-8 kodlamalı düz metin dosyası olmalı ve satırlar CR, CR/LF veya LF ifadeleriyle ayrılmalıdır.

Google, robots.txt dosyasının başındaki Unicode bayt sırası işareti (BOM) dahil olmak üzere robots.txt dosyalarındaki geçersiz satırları yoksayar ve yalnızca geçerli satırları kullanır. Örneğin, indirilen içerik robots.txt kuralları yerine HTML biçimindeyse Google, içeriği ayrıştırıp kuralları çıkarmaya çalışır ve geri kalan her şeyi yoksayar.

Benzer şekilde, robots.txt dosyasının karakter kodlaması UTF-8 değilse Google, UTF-8 aralığı dışındaki karakterleri yoksayabilir ve bu durumda robots.txt kurallarını geçersiz olarak algılayabilir.

Google şu anda robots.txt dosyaları için 500 kibibaytlık (KiB) bir boyut sınırlaması uygulamaktadır. Maksimum dosya boyutundan sonraki içerik yoksayılır. Aşırı büyük bir robots.txt dosyasına neden olacak kuralları birleştirerek robots.txt dosyasının boyutunu küçültebilirsiniz. Örneğin, hariç tutulan malzemeyi ayrı bir dizine yerleştirin.

Söz dizimi

Geçerli robots.txt satırlarında bir adet alan, bir adet iki nokta üst üste ve bir adet değer bulunur. Boşluklar isteğe bağlıdır ancak dosyanın kolay okunabilmesi için önerilir. Satırın başındaki ve sonundaki boşluk yoksayılır. Yorum eklemek için, yorumunuzun başına # karakterini ekleyin. # karakterinden sonra gelen her şeyin yoksayılacağını unutmayın. Genel biçim şöyledir: <field>:<value><#optional-comment>.

Google, aşağıdaki alanları destekler:

  • user-agent: Kuralların hangi tarayıcıya uygulanacağını belirtir.
  • allow: Taranabilecek bir URL yolunu belirtir.
  • disallow: Taranamayacak bir URL yolunu belirtir.
  • sitemap: Site haritasının tam URL'sini belirtir.

allow ve disallow alanları ayrıca kurallar (diğer adıyla yönergeler) olarak da adlandırılır. Bu kurallar her zaman rule: [path] biçiminde belirtilir. Burada [path] değeri isteğe bağlıdır. Varsayılan değer, belirtilen tarayıcılar için herhangi bir tarama kısıtlaması olmamasıdır. Tarayıcılar, [path] içermeyen kuralları yoksayar.

[path] değeri belirtilirse, robots.txt dosyasının getirildiği web sitesinin kök dizininin devamı olarak işlenir (aynı protokol, bağlantı noktası numarası, ana makine ve alan adları kullanılır). Kök dizinini belirtmek için path değeri / karakteriyle başlamalıdır. Bu değer büyük/küçük harfe duyarlıdır. Path değerlerine dayalı URL eşleşmesi hakkında daha fazla bilgi edinin.

user-agent

user-agent satırı, kuralların hangi tarayıcıya uygulanacağını belirtir. Robots.txt dosyanızda kullanabileceğiniz kullanıcı aracısı dizelerinin kapsamlı bir listesini Google tarayıcıları ve kullanıcı aracısı dizeleri konusunda bulabilirsiniz.

user-agent satırının değeri büyük/küçük harfe duyarlı değildir.

disallow

disallow kuralında, tarayıcıların erişmemesi gereken yollar belirtilir. Bu yollar, disallow kuralının birlikte gruplandırıldığı user-agent satırında tanımlanır. Tarayıcılar, path değeri içermeyen kuralları yoksayar.

Google, taranmasına izin verilmeyen sayfaların içeriğini dizine ekleyemese de URL'yi dizine ekleyip arama sonuçlarında snippet olmadan gösterebilir. Dizine eklemeyi nasıl engelleyeceğinizi öğrenin.

disallow kuralının değeri büyük/küçük harfe duyarlıdır.

Kullanım:

disallow: [path]

allow

allow kuralı, belirtilen tarayıcılar tarafından erişilebilecek path değerlerini belirtir. Herhangi bir path değeri belirtilmediğinde kural yoksayılır.

allow kuralının değeri büyük/küçük harfe duyarlıdır.

Kullanım:

allow: [path]

sitemap

Google, Bing ve diğer büyük arama motorları, sitemaps.org tarafından tanımlandığı şekliyle robots.txt dosyasındaki sitemap alanını destekler.

sitemap alanının değeri büyük/küçük harfe duyarlıdır.

Kullanım:

sitemap: [absoluteURL]

[absoluteURL] satırı bir site haritasının veya site haritası dizin dosyasının konumunu işaret eder. Protokol ve ana makine de dahil olmak üzere bu tam nitelikli bir URL olmalıdır ve URL kodlamalı olması gerekmez. URL'nin, robots.txt dosyasıyla aynı ana makinede olması gerekmez. Birden fazla sitemap alanı belirtebilirsiniz. Sitemap alanı, belirli bir kullanıcı aracısına bağlı değildir ve taranmasına izin verildiği sürece tüm tarayıcılar tarafından takip edilebilir.

Örneğin:

user-agent: otherbot
disallow: /kale

sitemap: https://example.com/sitemap.xml
sitemap: https://cdn.example.org/other-sitemap.xml
sitemap: https://ja.example.org/テスト-サイトマップ.xml

Satırların ve kuralların gruplandırılması

Her bir tarayıcı için user-agent satırlarını tekrar ederek birden fazla kullanıcı aracısına uygulanan kuralları birlikte gruplandırabilirsiniz.

Örneğin:

user-agent: a
disallow: /c

user-agent: b
disallow: /d

user-agent: e
user-agent: f
disallow: /g

user-agent: h

Bu örnekte dört farklı kural grubu belirtilmiştir:

  • Kullanıcı aracısı "a" için bir grup.
  • Kullanıcı aracısı "b" için bir grup.
  • Hem "e" hem de "f" kullanıcı aracıları için bir grup.
  • Kullanıcı aracısı "h" için bir grup.

Grup kavramının teknik açıklamasını REP'in 2.1 bölümünde bulabilirsiniz.

Kullanıcı aracıları için öncelik sırası

Belirli bir tarayıcı için yalnızca bir grup geçerlidir. Google'ın tarayıcıları, robots.txt dosyasının içinde tarayıcının kullanıcı aracısıyla eşleşen en ayrıntılı kullanıcı aracısının olduğu grubu bularak doğru kural grubunu belirler. Diğer gruplar yoksayılır. Eşleşmeyen metnin tamamı yoksayılır (örneğin, googlebot/1.2 ve googlebot*, googlebot ile eş değerdir). Robots.txt dosyasındaki grupların sıralamasının bir önemi yoktur.

Kullanıcı aracısı için tanımlanan birden fazla belirli grup varsa belirli kullanıcı aracısı için geçerli olan gruplardaki tüm kurallar kendi içinde tek bir grupta birleştirilir. Kullanıcı aracısına özel gruplar ile genel gruplar (*) birleştirilmez.

Örnekler

user-agent alanlarının eşleşmesi

user-agent: googlebot-news
(group 1)

user-agent: *
(group 2)

user-agent: googlebot
(group 3)

Tarayıcılar ilgili grubu şu şekilde seçer:

Tarayıcı başına izlenen grup
Googlebot News googlebot-news, en ayrıntılı grup olduğu için 1. grubu takip eder.
Googlebot (web) googlebot, 3. grubu takip eder.
Googlebot Storebot Storebot-Google, belirli bir Storebot-Google grubu olmadığı için 2. grubu takip eder.
Googlebot News (görseller taranırken) googlebot-news, görselleri tararken 1. grubu takip eder. googlebot-news, görselleri Google Görseller için taramadığından yalnızca 1. grubu takip eder.
Otherbot (web) Diğer Google tarayıcıları 2. grubu takip eder.
Otherbot (news) Haber içeriklerini tarayan ancak googlebot-news olarak tanımlanmayan diğer Google tarayıcıları, 2. grubu takip eder. İlgili bir tarayıcı için bir giriş olsa bile, yalnızca özel olarak eşleştiğinde geçerli olur.

Kuralların gruplandırılması

Robots.txt dosyasında belirli bir kullanıcı aracısıyla ilgili birden fazla grup varsa Google'ın tarayıcıları, kendi içlerinde grupları birleştirir. Örneğin:

user-agent: googlebot-news
disallow: /fish

user-agent: *
disallow: /carrots

user-agent: googlebot-news
disallow: /shrimp

Tarayıcılar, kuralları kendi içlerinde kullanıcı aracısı bazında gruplandırır. Örneğin:

user-agent: googlebot-news
disallow: /fish
disallow: /shrimp

user-agent: *
disallow: /carrots

allow, disallow ve user-agent dışındaki kurallar robots.txt ayrıştırıcı tarafından yoksayılır. Yani, aşağıdaki robots.txt snippet'i bir grup olarak değerlendirilir. Bu nedenle hem user-agent a hem de b, disallow: / kuralından etkilenir:

user-agent: a
sitemap: https://example.com/sitemap.xml

user-agent: b
disallow: /

Tarayıcılar, robots.txt kurallarını işlerken sitemap satırını yoksayar. Örneğin, tarayıcılar önceki robots.txt snippet'ini şu şekilde anlar:

user-agent: a
user-agent: b
disallow: /

Path değerlerine dayalı URL eşleşmesi

Google, bir kuralın sitedeki belirli bir URL için geçerli olup olmadığını belirlerken allow ve disallow kurallarındaki path değerini temel alır. Bunun için kural, tarayıcının getirmeye çalıştığı URL'deki path bileşeniyle karşılaştırılır. Bir path değerindeki 7 bit olmayan ASCII karakterler, UTF-8 karakterleri veya RFC 3986'ya uygun şekilde yüzdeyle çıkış yapılmış UTF-8 kodlamalı karakterler olarak eklenebilir.

Google, Bing ve diğer büyük arama motorları, path değerleri için sınırlı bir joker karakter biçimini destekler. Bu joker karakterler şunlardır:

  • * işareti, geçerli herhangi bir karakterin 0 veya daha fazla örneğini belirtir.
  • $ işareti, URL'nin sonunu belirtir.

Aşağıdaki tabloda, farklı joker karakterlerin ayrıştırmayı nasıl etkilediği gösterilmektedir:

Örnek path eşleşmeleri
/ Kök ve alt düzey URL'lerle eşleşir.
/* / etiketine eş değer. Sondaki joker karakter yok sayılır.
/$ Yalnızca kökle eşleşir. Alt düzey URL'lerin taranmasına izin verilir.
/fish

/fish ile başlayan tüm path değerleriyle eşleşir. Eşleşmenin büyük/küçük harfe duyarlı olduğunu unutmayın.

Eşleşen:

  • /fish
  • /fish.html
  • /fish/salmon.html
  • /fishheads
  • /fishheads/yummy.html
  • /fish.php?id=anything

Eşleşmez:

  • /Fish.asp
  • /catfish
  • /?id=fish
  • /desert/fish
/fish*

/fish etiketine eşdeğer. Sondaki joker karakter yok sayılır.

Eşleşen:

  • /fish
  • /fish.html
  • /fish/salmon.html
  • /fishheads
  • /fishheads/yummy.html
  • /fish.php?id=anything

Eşleşmez:

  • /Fish.asp
  • /catfish
  • /?id=fish
  • /desert/fish
/fish/

/fish/ klasöründeki her öğeyle eşleşir.

Eşleşen:

  • /fish/
  • /fish/?id=anything
  • /fish/salmon.htm

Eşleşmez:

  • /fish
  • /fish.html
  • /animals/fish/
  • /Fish/Salmon.asp
/*.php

.php içeren tüm path değerleriyle eşleşir.

Eşleşen:

  • /index.php
  • /filename.php
  • /folder/filename.php
  • /folder/filename.php?parameters
  • /folder/any.php.file.html
  • /filename.php/

Eşleşmez:

  • / (/index.php ile eşleşse bile)
  • /windows.PHP
/*.php$

.php ile biten tüm path değerleriyle eşleşir.

Eşleşen:

  • /filename.php
  • /folder/filename.php

Eşleşmez:

  • /filename.php?parameters
  • /filename.php/
  • /filename.php5
  • /windows.PHP
/fish*.php

Sırasıyla /fish ve .php içeren tüm path değerleriyle eşleşir.

Eşleşen:

  • /fish.php
  • /fishheads/catfish.php?parameters

Eşleşmez: /Fish.PHP

Kuralların öncelik sırası

Tarayıcılar, robots.txt kurallarıyla URL'leri eşleştirirken kural yolunun uzunluğuna göre en ayrıntılı kuralı kullanır. Joker karakter içerenler de dahil olmak üzere çakışan kurallar söz konusu olduğunda Google, en az kısıtlayıcı olan kuralı kullanır.

Aşağıdaki örneklerde, Google'ın tarayıcılarının belirli bir URL'ye hangi kuralı uygulayacağı gösterilmektedir.

Örnek durumlar:
https://example.com/page
allow: /p
disallow: /

Geçerli kural: Daha ayrıntılı olduğu için allow: /p uygulanır.

https://example.com/folder/page
allow: /folder
disallow: /folder

Geçerli kural: Google çakışan kurallar söz konusu olduğunda en az kısıtlayıcı olan kuralı kullandığı için allow: /folder uygulanır.

https://example.com/page.htm
allow: /page
disallow: /*.htm

Geçerli kural: Kural yolu daha uzun olup URL'deki daha fazla karakterle eşleştiği için daha ayrıntılı olan disallow: /*.htm uygulanır.

https://example.com/page.php5
allow: /page
disallow: /*.ph

Geçerli kural: Google çakışan kurallar söz konusu olduğunda en az kısıtlayıcı olan kuralı kullandığı için allow: /page uygulanır.

https://example.com/
allow: /$
disallow: /

Geçerli kural: Daha ayrıntılı olduğu için allow: /$ uygulanır.

https://example.com/page.htm
allow: /$
disallow: /

Geçerli kural: allow kuralı yalnızca kök URL'de geçerli olduğundan disallow: / uygulanır.