Specyfikacje pliku robots.txt

Streszczenie

W tym dokumencie szczegółowo opisujemy, jak Google obsługuje plik robots.txt, który pozwala webmasterom kontrolować sposób pobierania i indeksowania publicznie dostępnych witryn przez roboty indeksujące Google.

Powrót do początku

Język wymagań

Słowa kluczowe „MUST” (musieć), „MUST NOT” (nie wolno), „REQUIRED” (wymagane), „SHALL” (należy), „SHALL NOT” (nie należy), „SHOULD” (powinno), „SHOULD NOT” (nie powinno), „RECOMMENDED” (zalecane), „MAY” (móc) oraz „OPTIONAL” (opcjonalne) w tym dokumencie mają znaczenie zgodne z opisem w RFC 2119.

Powrót do początku

Podstawowe definicje

  • robot: usługa lub klient, który pobiera witryny. Ogólnie mówiąc, robot automatycznie i rekurencyjnie otwiera znane sobie adresy URL na hoście zawierającym treści dostępne dla standardowych przeglądarek. Zawartość pod nowo wykrytymi (na różne sposoby, np. dzięki linkom na pobieranych stronach lub plikom map witryn) adresami URL jest pobierana w ten sam sposób.
  • klient użytkownika: sposób identyfikacji konkretnego robota lub ich grupy.
  • dyrektywy: lista obowiązujących wskazówek dla robota lub ich grupy umieszczona w pliku robots.txt.
  • URL: adres URL (Uniform Resource Locator) zgodny z definicją w RFC 1738.
  • typowe dla Google: te elementy wynikają z implementacji obsługi pliku robots.txt w Google i mogą nie występować w innych wyszukiwarkach.

Powrót do początku

Obowiązywanie

Do wskazówek wymienionych w tym dokumencie stosują się wszystkie automatyczne roboty Google. Gdy klient uzyskuje dostęp do adresów URL w imieniu użytkownika (aby wykonać tłumaczenie, pobrać ręcznie zasubskrybowany kanał, przeanalizować złośliwe oprogramowanie itp.), te wskazówki mogą nie obowiązywać.

Powrót do początku

Lokalizacja pliku i zasięg działania

Plik robots.txt musi się znajdować w katalogu głównym hosta i być dostępny za pomocą odpowiedniego protokołu i numeru portu. Powszechnie akceptowane protokoły pliku robots.txt (i pobierania witryn) to „http” i „https”. Pozwalają one odczytać plik robots.txt bezwarunkowym żądaniem HTTP GET.

Typowe dla Google: Google akceptuje pliki robots.txt i stosuje się do nich także w przypadku serwerów FTP. Aby odczytać plik robots.txt na serwerze FTP, korzystamy z protokołu FTP i anonimowego loginu.

Dyrektywy wymienione w pliku robots.txt odnoszą się tylko do hosta, protokołu i numeru portu używanych do jego udostępniania.

Uwaga: wielkość liter w adresie URL pliku robots.txt (tak jak w innych adresach URL) jest rozróżniana.

Powrót do początku

Przykłady prawidłowych adresów URL pliku robots.txt

URL pliku robots.txtPrawidłowy w przypadku adresów Nieprawidłowy w przypadku adresówKomentarze
http://example.com/robots.txt http://example.com/
http://example.com/folder/plik
http://inny.example.com/
https://example.com/
http://example.com:8181/
To sytuacja ogólna. Plik nie odnosi się do innych subdomen, protokołów ani numerów portów. Obowiązuje w przypadku każdego pliku we wszystkich podkatalogach z tym samym hostem, protokołem i numerem portu.
http://www.example.com/robots.txt http://www.example.com/ http://example.com/
http://sklep.www.example.com/
http://www.sklep.example.com/
Plik robots.txt w subdomenie obowiązuje tylko w niej.
http://example.com/folder/robots.txt Plik robots.txt jest nieprawidłowy.   Roboty nie szukają plików robots.txt w podkatalogach.
http://www.müller.eu/robots.txt http://www.müller.eu/
http://www.xn--mller-kva.eu/
http://www.muller.eu/ Nazwy IDN mają swoje odpowiedniki w punycode. Zapoznaj się z RFC 3492.
ftp://example.com/robots.txt ftp://example.com/ http://example.com/ Typowe dla Google: korzystamy z plików robots.txt w zasobach FTP.
http://212.96.82.21/robots.txt http://212.96.82.21/ http://example.com/ (nawet na hoście 212.96.82.21) Plik robots.txt z adresem IP jako nazwą hosta obowiązuje tylko podczas pobierania stron, które mają ten adres IP jako nazwę hosta. Nie obowiązuje automatycznie we wszystkich witrynach przechowywanych pod tym adresem IP (plik robots.txt może być jednak wspólny – wtedy jest też dostępny pod wspólną nazwą hosta).
http://example.com:80/robots.txt http://example.com:80/
http://example.com/
http://example.com:81/ Host ze standardowym numerem portu (80 dla http, 443 dla https, 21 dla ftp) to domyślny odpowiednik samej nazwy hosta. Zobacz też [numery portów].
http://example.com:8181/robots.txt http://example.com:8181/ http://example.com/ Pliki robots.txt na portach o niestandardowych numerach obowiązują tylko w przypadku treści udostępnianych przez te porty.

Powrót do początku

Obsługa kodów wyniku HTTP

Odczyt pliku robots.txt może zakończyć się jednym z trzech różnych wyników:

  • Pełne zezwolenie – można pobrać wszystkie treści.
  • Pełny zakaz – nie można pobrać żadnych treści.
  • Warunkowe zezwolenie – dyrektywy w pliku robots.txt określają możliwość pobierania określonych treści.
2xx (powodzenie)
Kody wyniku HTTP, które oznaczają udany odczyt skutkujący warunkowym zezwoleniem na pobieranie.
3xx (przekierowanie)
Robot zwykle podąża za przekierowaniami, aż uzyska prawidłowy wynik (lub wykryje pętlę). Po ograniczonej liczbie przekierowań (RFC 1945 w przypadku HTTP/1.0 dopuszcza ich pięć) zatrzymuje się i traktuje sytuację jako błąd 404. Obsługa przekierowań z adresu pliku robots.txt pod zabronione adresy URL jest niezdefiniowana. Odradzamy takie rozwiązanie. Obsługa przekierowań logicznych z adresu pliku robots.txt, które wykorzystują treści HTML zwracające kod 2xx (ramki, JavaScript lub metaodświeżanie), jest niezdefiniowana. Takie rozwiązanie także odradzamy.
4xx (błędy klienta)
Google traktuje wszystkie błędy 4xx tak samo i przyjmuje, że prawidłowy plik robots.txt nie istnieje. W takiej sytuacji zakładamy brak ograniczeń. Oznacza to pełne zezwolenie na pobieranie. Uwaga: obejmuje to kody wyniku HTTP 401 „Unauthorized” (brak autoryzacji) i 403 „Forbidden” (zabronione).
5xx (błąd serwera)
Robot traktuje błędy serwera jako tymczasowe, które skutkują pełnym zakazem pobierania. Żądanie jest ponawiane, aż do uzyskania kodu wyniku HTTP innego niż błąd serwera. Błąd 503 „Service Unavailable” (usługa niedostępna) powoduje dość częste ponawianie próby. Jeśli chcesz tymczasowo zawiesić pobieranie, zalecamy zwracanie kodu wyniku HTTP 503. Obsługa trwałego błędu serwera jest niezdefiniowana.

Typowe dla Google: po ustaleniu, że witryna jest nieprawidłowo skonfigurowana i w przypadku brakujących stron zwraca kod 5xx zamiast 404, traktujemy błąd 5xx z tej witryny jako 404.
Nieudane żądania lub niepełne dane
Obsługa pliku robots.txt, którego nie można odczytać z powodu problemów z DNS lub siecią (przekroczone czasy oczekiwania, nieprawidłowe odpowiedzi, zresetowane/zerwane połączenia, błędy podziału danych HTTP itp.), jest niezdefiniowana.
Zapisywanie w pamięci podręcznej
Żądanie pliku robots.txt zwykle przechowujemy w pamięci podręcznej przez maksymalnie jeden dzień, ale ten okres może się wydłużyć w sytuacji, gdy nie można odświeżyć wersji w pamięci podręcznej (np. z powodu błędu 5xx lub przekroczenia czasu oczekiwania). Z odpowiedzi zapisanej w pamięci podręcznej mogą korzystać różne roboty. Google może wydłużyć lub skrócić czas przechowywania w pamięci podręcznej na podstawie nagłówków HTTP max-age Cache-Control.

Powrót do początku

Format pliku

Oczekiwany format pliku to zwykły tekst zakodowany w UTF-8. Plik składa się z rekordów (wierszy) rozdzielonych znakami CR, CR/LF lub LF.

Robot bierze pod uwagę tylko prawidłowe rekordy – wszystkie pozostałe treści ignoruje. Jeśli otrzymany dokument to na przykład strona HTML, tylko prawidłowe wiersze tekstu są analizowane, a pozostała zawartość jest odrzucana bez ostrzeżenia czy komunikatu o błędzie.

Jeśli w wyniku użycia innego kodowania w pliku pojawią się znaki spoza zestawu UTF-8, może to spowodować nieprawidłową analizę treści pliku.

Opcjonalny BOM (znacznik kolejności bajtów) Unicode na początku pliku robots.txt jest ignorowany.

Każdy rekord składa się z pola, dwukropka i wartości. Spacje są opcjonalne (ale zalecane, by zwiększyć czytelność). Komentarze można umieścić w dowolnym punkcie pliku, korzystając ze znaku „#”. Cała treść od tego znaku aż do końca rekordu jest traktowana jako komentarz i ignorowana. Ogólny format to „<pole>:<wartość><#opcjonalny_komentarz>”. Odstępy na początku i końcu rekordu są ignorowane.

Wielkość liter w elemencie <pole> nie jest rozróżniana. W elemencie <wartość> może ona mieć znaczenie w zależności od elementu <pole>.

Obsługa elementów <pole> z drobnymi błędami lub literówkami (np. „useragent” zamiast „user-agent”) jest niezdefiniowana. Niektóre klienty użytkownika mogą interpretować te elementy jako prawidłowe dyrektywy.

Maksymalny dozwolony rozmiar pliku może różnić się w zależności od robota. Fragment, który wykracza poza tę wartość, może być ignorowany. Obecnie w Google obowiązuje limit 500 kB.

Powrót do początku

Formalna składnia i definicja

Poniżej znajdziesz opis zbliżony do notacji Backusa-Naura (BNF) i zgodny z konwencją określoną w RFC 822. Jedyna różnica polega na tym, że znak „|” oznacza alternatywę. Literały są ujęte w cudzysłów "", nawiasy () grupują elementy, a elementy opcjonalne są w nawiasach kwadratowych []. Elementy może poprzedzać ciąg <n>* oznaczający co najmniej n powtórzeń danego elementu. Wartość domyślna n to 0.

robotstxt = *entries
entries = *( ( <1>*startgroupline 
  *(groupmemberline | nongroupline | comment)
  | nongroupline
  | comment) )
startgroupline = [LWS] "user-agent" [LWS] ":" [LWS] agentvalue [comment] EOL
groupmemberline = [LWS] (
  pathmemberfield [LWS] ":" [LWS] pathvalue
  | othermemberfield [LWS] ":" [LWS] textvalue) [comment] EOL
nongroupline = [LWS] (
  urlnongroupfield [LWS] ":" [LWS] urlvalue
  | othernongroupfield [LWS] ":" [LWS] textvalue) [comment] EOL
comment = [LWS] "#" *anychar
agentvalue = textvalue

pathmemberfield = "disallow" | "allow"
othermemberfield = ()
urlnongroupfield = "sitemap"
othernongroupfield = ()

pathvalue = "/" path
urlvalue = absoluteURI
textvalue = *(valuechar | SP)
valuechar = <any UTF-8 character except ("#" CTL)>
anychar = <any UTF-8 character except CTL>
EOL = CR | LF | (CR LF)

Definicję składni wyrażeń „absoluteURI”, „CTL”, „CR”, „LF”, „LWS” znajdziesz w RFC 1945. Składnię wyrażenia „path” zdefiniowano w RFC 1808.

Powrót do początku

Grupowanie rekordów

Rekordy są podzielone na różne rodzaje w zależności od typu elementu <pole>:

  • początek grupy,
  • należący do grupy,
  • poza grupą.
  • Wszystkie rekordy należące do grupy – od rekordu początku grupy aż do następnego takiego rekordu – są traktowane jako grupa rekordów. Jedyny element <pole> będący początkiem grupy to user-agent. Wiele kolejnych wierszy początku grupy następuje po rekordach należących do grupy, które znajdują się po ostatnim wierszu początku grupy. Wszystkie rekordy należące do grupy, które nie mają poprzedzającego rekordu początku grupy, są ignorowane. Każdy rekord poza grupą jest prawidłowy niezależnie od wszystkich grup.

    Prawidłowe elementy <pole>, które szczegółowo opisujemy w dalszej części tego dokumentu, to:

    • user-agent (początek grupy),
    • disallow (prawidłowy tylko jako rekord należący do grupy),
    • allow (prawidłowy tylko jako rekord należący do grupy),
    • sitemap (rekord poza grupą).
    • Robot może ignorować wszystkie pozostałe elementy <pole>.

      Element początku grupy user-agent określa robota, do którego odnoszą się dyrektywy w grupie. W przypadku konkretnego robota prawidłowa jest tylko jedna grupa rekordów. Pierwszeństwo obowiązywania opisujemy w dalszej części tego dokumentu.

      Przykładowe grupy:

      user-agent: a
      disallow: /c
      
      user-agent: b
      disallow: /d
      
      user-agent: e
      user-agent: f
      disallow: /g
      

      Mamy trzy osobne grupy – pierwszą dla robota „a”, drugą dla robota „b” oraz trzecią dla robotów „e” i „f”. Każda grupa zawiera własny rekord należący do grupy. Zwróć uwagę na opcjonalne odstępy (puste wiersze), które zwiększają czytelność.

      Powrót do początku

      Pierwszeństwo obowiązywania dla klientów użytkownika

      W przypadku konkretnego robota tylko jedna grupa rekordów należących do grupy jest prawidłowa. Robot musi ustalić właściwą grupę rekordów, wybierając tę z najbardziej konkretnym klientem użytkownika, który do niego pasuje. Ignoruje wszystkie pozostałe grupy rekordów. Wielkość liter w nazwie klienta użytkownika nie jest rozróżniana. Wszystkie niepasujące fragmenty tekstu są ignorowane (np. googlebot/1.2 i googlebot* to odpowiedniki wartości googlebot). Kolejność grup w pliku robots.txt nie ma znaczenia.

      Na przykład:

      Załóżmy, że mamy taki plik robots.txt:

      user-agent: googlebot-news
      (group 1)
      
      user-agent: *
      (group 2)
      
      user-agent: googlebot
      (group 3)
      

      Roboty wybierają odpowiednią grupę w ten sposób:

      Nazwa robotaWybrana grupa rekordów Komentarze
      Googlebot News (grupa 1) Robot przestrzega dyrektyw z najbardziej odpowiedniej grupy. Wszystkie pozostałe grupy ignoruje.
      Googlebot (internet) (grupa 3) 
      Googlebot Images (grupa 3) Nie ma określonej grupy googlebot-images, więc robot wybiera bardziej ogólną grupę.
      Googlebot News (podczas pobierania obrazów) (grupa 1) Te obrazy pobiera jedynie Googlebot News, więc przestrzega tylko dyrektyw z grupy przeznaczonej dla niego.
      Inny robot (internet)(grupa 2) 
      Inny robot (wiadomości)(grupa 2) Nawet jeśli istnieje grupa dla podobnego robota, obowiązuje ona tylko wtedy, gdy nazwa dokładnie pasuje.

      Zobacz też listę robotów Google i ciągów klienta użytkownika.

      Powrót do początku

      Rekordy należące do grupy

      W tej sekcji opisujemy tylko ogólne i typowe dla Google rodzaje rekordów należących do grupy. Nazywamy je także „dyrektywami” dla robotów. Dyrektywy mają postać „dyrektywa: [ścieżka]”, gdzie [ścieżka] jest opcjonalna. Domyślnie nie ma ograniczeń pobierania stron przez określone roboty. Dyrektywy bez wartości [ścieżka] są ignorowane.

      Wartość [ścieżka] (jeśli została określona) jest traktowana jako względna wobec katalogu głównego witryny, z której pochodzi dany plik robots.txt (ma ten sam protokół, numer portu, hosta i domenę). Musi zaczynać się znakiem „/” wskazującym katalog główny. Jeśli ścieżka nie ma początkowego ukośnika, robot może potraktować ją tak, jakby go zawierała. Wielkość liter w ścieżce jest rozróżniana. Więcej informacji znajdziesz w sekcji „Zgodność adresów URL na podstawie wartości ścieżki” poniżej.

      disallow

      Dyrektywa disallow określa ścieżki, do których wskazanym robotom nie wolno uzyskiwać dostępu. W przypadku braku ścieżki dyrektywa jest ignorowana.

      Sposób użycia:

      disallow: [path]
      

      allow

      Dyrektywa allow określa ścieżki, do których wskazane roboty mogą uzyskiwać dostęp. W przypadku braku ścieżki dyrektywa jest ignorowana.

      Sposób użycia:

      allow: [path]
      

      Powrót do początku

      Zgodność adresów URL na podstawie wartości ścieżki

      Na podstawie wartości ścieżki robot określa, czy reguła ma zastosowanie do konkretnego adresu URL w witrynie. Ścieżka jest dopasowywana do początku danego adresu URL (i dowolnych prawidłowych adresów URL, które zaczynają się tą samą ścieżką) – chyba że zawiera symbole wieloznaczne. Znaki ASCII inne niż 7-bitowe można umieścić w ścieżce jako znaki UTF-8 lub jako zakodowane zgodnie z RFC 3986 znaki UTF-8 ze zmianą znaczenia za pomocą znaku procentu.

      Uwaga: adresy URL objęte indeksowaniem AJAX musisz podać w wersjach, które można pobierać. Przeczytaj naszą dokumentację o pobieraniu treści aplikacji AJAX.

      Google, Bing, Yahoo i Ask obsługują w wartościach ścieżki ograniczone formy symboli wieloznacznych. Dostępne symbole:

      1. * oznacza zero lub więcej wystąpień dowolnego prawidłowego znaku.
      2. $ oznacza koniec adresu URL.

      Przykładowe dopasowania ścieżek

      [ścieżka]Pasuje Nie pasujeKomentarze
      /Każdy prawidłowy URL  Pasuje do adresów URL na poziomie głównym i wszystkich niższych.
      /*Odpowiednik ścieżki / Odpowiednik ścieżki / Odpowiednik ścieżki „/” – robot ignoruje symbol wieloznaczny na końcu.
      /fish/fish
      /fish.html
      /fish/salmon.html
      /fishheads
      /fishheads/yummy.html
      /fish.php?id=dowolny
      /Fish.asp
      /catfish
      /?id=fish
      Zwróć uwagę na rozróżnianie wielkości liter podczas dopasowywania.
      /fish*/fish
      /fish.html
      /fish/salmon.html
      /fishheads
      /fishheads/yummy.html
      /fish.php?id=dowolny
      /Fish.asp
      /catfish
      /?id=fish
      Odpowiednik ścieżki „/fish” – robot ignoruje symbol wieloznaczny na końcu.
      /fish//fish/
      /fish/?id=dowolny
      /fish/salmon.htm
      /fish
      /fish.html
      /Fish/Salmon.asp
      Końcowy ukośnik oznacza zgodność z każdym elementem w danym folderze.
      fish/Odpowiednik ścieżki /fish/ Odpowiednik ścieżki /fish/ Odpowiednik ścieżki /fish/
      /*.php/nazwapliku.php
      /folder/nazwapliku.php
      /folder/nazwapliku.php?parametry
      /folder/dowolny.plik.php.html
      /nazwapliku.php/
      / (nawet jeśli wskazuje /index.php)
      /windows.PHP
       
      /*.php$/nazwapliku.php
      /folder/nazwapliku.php
      /nazwapliku.php?parametry
      /nazwapliku.php/
      /nazwapliku.php5
      /windows.PHP
       
      /fish*.php/fish.php
      /fishheads/catfish.php?parametry
      /Fish.PHP  

      Powrót do początku

      Rekordy poza grupą obsługiwane przez Google

      sitemap

      Rekord obsługują Google, Ask, Bing i Yahoo. Jego definicję znajdziesz na sitemaps.org.

      Sposób użycia:

      sitemap: [absoluteURL]
      

      [absoluteURL] wskazuje mapę witryny, plik indeksu map witryn lub odpowiedni adres URL, który nie musi być na tym samym hoście, co plik robots.txt. Rekordów sitemap może być wiele. Nie należą one do grupy, więc nie odnoszą się do żadnego konkretnego klienta użytkownika – wszystkie roboty mogą ich przestrzegać, o ile dana lokalizacja nie jest zabroniona.

      Powrót do początku

      Pierwszeństwo obowiązywania rekordów należących do grupy

      Na poziomie elementów grupy (konkretnie dyrektyw allow i disallow) najbardziej szczegółowa reguła wybrana na podstawie długości wartości [ścieżka] ma priorytet nad mniej szczegółową (krótszą) regułą. Pierwszeństwo obowiązywania reguł z symbolami wieloznacznymi jest niezdefiniowane.

      Przykładowe sytuacje:

      Adres URLallow:disallow:Efekt Komentarze
      http://example.com/page /p /allow 
      http://example.com/folder/page /folder/ /folderallow 
      http://example.com/page.htm /page /*.htmniezdefiniowany 
      http://example.com/ /$ /allow 
      http://example.com/page.htm /$ /disallow 

      Powrót do początku