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.

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 Googlebot 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

Dosya konumu ve geçerlilik aralığı

Robots.txt dosyasını, desteklenen bir protokol üzerinde sitenin en üst düzey dizinine yerleştirmelisiniz. 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.

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

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

Geçerli değil:

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

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

ftp://example.com/robots.txt

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

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

http://212.96.82.21/robots.txt

Geçerli: http://212.96.82.21/

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

http://example.com:80/robots.txt

Geçerli:

  • http://example.com:80/
  • http://example.com/

Geçerli değil: http://example.com:81/

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

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

Geçerli değil: http://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.

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 üst bilgilerine 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ı yok sayar 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 yok sayar.

Benzer şekilde, robots.txt dosyasının karakter kodlaması UTF-8 değilse Google, UTF-8 aralığı dışındaki karakterleri yok sayabilir 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 yok sayılır. Aşırı büyük bir robots.txt dosyasına neden olacak yönergeleri 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 yok sayılır. Yorum eklemek için, yorumunuzun başına # karakterini ekleyin. # karakterinden sonra gelen her şeyin yok sayı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ı yönergeler olarak da adlandırılır. Bu yönergeler her zaman directive: [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 yönergeleri yok sayar.

[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 yönergesinde, disallow yönergesinin birlikte gruplandırıldığı kullanıcı aracısı satırında tanımlanan tarayıcıların erişmemesi gereken yollar belirtilir. Tarayıcılar, path değeri içermeyen yönergeleri yok sayar.

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

Kullanım:

disallow: [path]

allow

allow yönergesi, belirtilen tarayıcılar tarafından erişilebilecek path değerlerini belirtir. Herhangi bir path değeri belirtilmediğinde yönerge yok sayılır.

allow yönergesinin 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 yok sayılır. Eşleşmeyen metnin tamamı yok sayı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 yönergelerindeki 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.
Ö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şir:

  • /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şir:

  • /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şir:

  • /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şir:

  • /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şir:

  • /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şir:

  • /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:
http://example.com/page

allow: /p
disallow: /

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

http://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.

http://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.

http://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.

http://example.com/

allow: /$
disallow: /

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

http://example.com/page.htm

allow: /$
disallow: /

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