Specyfikacje pliku robots.txt

W skrócie

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

Język wymagań

Słowa kluczowe „musi” (must), „nie wolno” (must not), „jest wymagane” (required), „należy” (shall), „nie należy” (shall not), „powinno się” (should), „nie powinno się” (should not), „zalecane” (recommended), „może” (may) oraz „opcjonalne” (optional) w tym dokumencie mają znaczenie zgodne z tym, jak zostały użyte w RFC 2119.

Podstawowe definicje

Definicje
Robot Robot to usługa lub klient, który indeksuje 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 skanowanych stronach lub plikom map witryn) adresami URL jest indeksowana w ten sam sposób.
Klient użytkownika Sposób identyfikacji konkretnego robota lub grupy robotów.
Dyrektywy Lista obowiązujących wskazówek dla robota lub grupy robotów umieszczona w pliku robots.txt.
URL Adres URL (Uniform Resource Locator) zgodny z definicją podaną w RFC 1738.
Typowe dla Google Elementy, które wynikają z implementacji pliku robots.txt w Google i mogą nie występować w innych wyszukiwarkach.

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 wytyczne mogą nie obowiązywać.

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 indeksowania 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.

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

Przykłady adresów URL pliku robots.txt
http://example.com/robots.txt Prawidłowy w przypadku adresów:
  • http://example.com/
  • http://example.com/folder/file
Nieprawidłowy w przypadku adresów:
  • http://other.example.com/
  • https://example.com/
  • http://example.com:8181/
http://www.example.com/robots.txt

Prawidłowy w przypadku adresów: http://www.example.com/

Nieprawidłowy w przypadku adresów:

  • http://example.com/
  • http://shop.www.example.com/
  • http://www.shop.example.com/
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 Prawidłowy w przypadku adresów:
  • http://www.müller.eu/
  • http://www.xn--mller-kva.eu/

Nieprawidłowy w przypadku adresów: http://www.muller.eu/

ftp://example.com/robots.txt

Prawidłowy w przypadku adresów: ftp://example.com/

Nieprawidłowy w przypadku adresów: http://example.com/

Typowe dla Google: korzystamy z plików robots.txt w zasobach FTP.

http://212.96.82.21/robots.txt

Prawidłowy w przypadku adresów: http://212.96.82.21/

Nieprawidłowy w przypadku adresów: http://example.com/ (nawet na hoście 212.96.82.21)

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

Prawidłowy w przypadku adresów:

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

Nieprawidłowy w przypadku adresów: http://example.com:81/

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

Prawidłowy w przypadku adresów: http://example.com:8181/

Nieprawidłowy w przypadku adresów: http://example.com/

Obsługa kodów odpowiedzi HTTP

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

  • Pełne zezwolenie – można zindeksować wszystkie treści.
  • Pełny zakaz – nie można zindeksować żadnych treści.
  • Warunkowe zezwolenie – dyrektywy w pliku robots.txt określają możliwość indeksowania określonych treści.
Obsługa kodów odpowiedzi HTTP
2xx (powodzenie) Kody odpowiedzi HTTP, które oznaczają udany odczyt skutkujący warunkowym zezwoleniem na indeksowanie.
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 indeksowanie.
5xx (błąd serwera)

Robot traktuje błędy serwera jako tymczasowe, które skutkują pełnym zakazem indeksowania. Żądanie jest ponawiane aż do uzyskania kodu odpowiedzi 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ć indeksowanie, zalecamy zwracanie kodu odpowiedzi 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 błąd 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.
Buforowanie Żą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.

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, analizowane są tylko prawidłowe wiersze, 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 <field>:<value><#optional-comment>. Odstępy na początku i końcu rekordu są ignorowane.

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

Obsługa elementów <field> 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.

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.

Grupowanie rekordów

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

  • 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 <field> 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 <field>, 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 <field>.

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ść.

Pierwszeństwo 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.

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:

Grupa rekordów, której dyrektyw przestrzega robot
Googlebot News Robot przestrzega dyrektyw z grupy 1. Robot przestrzega dyrektyw z najbardziej odpowiedniej grupy. Wszystkie pozostałe grupy ignoruje.
Googlebot (www) Robot przestrzega dyrektyw z grupy 3.
Googlebot Images Robot przestrzega dyrektyw z grupy 3. Nie ma określonej grupy googlebot-images, więc robot wybiera bardziej ogólną grupę.
Googlebot News (podczas indeksowania obrazów) Robot przestrzega dyrektyw z grupy 1. Te obrazy indeksuje jedynie Googlebot News, więc przestrzega tylko dyrektyw z grupy przeznaczonej dla niego.
Inny robot (www) Robot przestrzega dyrektyw z grupy 2.
Inny robot (wiadomości) Robot przestrzega dyrektyw z grupy 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 tokenów klienta użytkownika.

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ć directive: [path], gdzie [path] jest wartością opcjonalną. Domyślnie nie ma ograniczeń indeksowania stron przez określone roboty. Dyrektywy bez wartości [path] są ignorowane.

Wartość [path] (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. 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]

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 korzystające ze zmiany znaczenia za pomocą znaku procentu.

Google, Bing, Yahoo i Ask obsługują w wartościach ścieżki ograniczone formy symboli wieloznacznych. Są to:

  • * oznacza zero lub więcej wystąpień dowolnego prawidłowego znaku.
  • $ oznacza koniec adresu URL.
Przykładowe dopasowania ścieżek
/ Pasuje do adresów URL na poziomie głównym i wszystkich niższych.
/* Odpowiednik /. Końcowy symbol wieloznaczny jest ignorowany.
/fish

Pasuje do:

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

Nie pasuje do:

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

Odpowiednik /fish. Końcowy symbol wieloznaczny jest ignorowany.

Pasuje do:

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

Nie pasuje do:

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

Końcowy ukośnik oznacza zgodność z każdym elementem w danym folderze.

Pasuje do:

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

Nie pasuje do:

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

Pasuje do:

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

Nie pasuje do:

  • / (nawet jeśli wskazuje /index.php)
  • /windows.PHP
/*.php$

Pasuje do:

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

Nie pasuje do:

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

Pasuje do:

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

Nie pasuje do: /Fish.PHP

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.

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

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

Przykładowe sytuacje
http://example.com/page

Allow: /p

Disallow: /

Efekt: allow

http://example.com/folder/page

Allow: /folder

Disallow: /folder

Efekt: allow

http://example.com/page.htm

Allow: /page

Disallow: /*.htm

Efekt: niezdefiniowany

http://example.com/

Allow: /$

Disallow: /

Efekt: allow

http://example.com/page.htm

Allow: /$

Disallow: /

Efekt: disallow

Wyślij opinię na temat...