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.

Co się zmieniło?

1 lipca 2019 r. ogłosiliśmy, że protokół robots.txt ma zostać standardem internetowym. Wprowadzone zmiany zostały uwzględnione w tym dokumencie.

Podstawowe definicje

Definicje
Robot Robot to usługa lub klient, który indeksuje witryny. Ogólnie mówiąc, robot automatycznie i cyklicznie otwiera znane sobie adresy URL na hoście zawierającym treści dostępne dla standardowych przeglądarek. Treść pod nowo wykrytymi (na różne sposoby, np. dzięki linkom na indeksowanych stronach lub plikom z mapami witryny) 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.
W 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 wskazówki 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 dla pliku robots.txt to wszystkie protokoły oparte na identyfikatorze URI, a dla wyszukiwarki Google (np. do indeksowania stron) to „http” i „https”. Pozwalają one odczytać plik robots.txt bezwarunkowym żądaniem HTTP GET.

W 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/

W 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 adresu: 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 wyniku 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.
  • Zezwolenie warunkowe – dyrektywy w pliku robots.txt określają możliwość indeksowania określonych treści.
Obsługa kodów wyniku HTTP
2xx (powodzenie) Kody wyniku HTTP, które oznaczają udany odczyt skutkujący warunkowym zezwoleniem na indeksowanie.
3xx (przekierowanie) Google śledzi co najmniej pięć przekierowań zgodnie z definicją z RFC 1945 dla HTTP/1.0, a następnie przerywa działanie i przyjmuje kod błędu 404. Odradzamy korzystanie w pliku robots.txt z przekierowań na niedozwolone adresy URL. Nie pobrano jeszcze żadnych reguł, dlatego Google śledzi co najmniej pięć przekierowań, a jeśli nie znajdzie pliku robots.txt, traktuje to jako błąd 404 dla tego pliku. Odradzamy korzystanie z przekierowań logicznych z adresu pliku robots.txt, które wykorzystują treści HTML zwracające kod 2xx (ramki, JavaScript lub metaodświeżanie). Do znajdowania odpowiednich reguł zostaje wykorzystana zawartość pierwszej strony.
4xx (błędy klienta) Wszystkie błędy 4xx są traktowane w ten sam sposób. Przyjmuje się, że nie istnieje prawidłowy plik robots.txt. 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 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 plik robots.txt jest niedostępny dłużej niż 30 dni, używana jest jego ostatnia kopia zapisana w pamięci podręcznej. Jeśli plik jest niedostępny, zakładamy brak ograniczeń. Jeśli chcesz tymczasowo zawiesić indeksowanie, zalecamy zwracanie kodu wyniku HTTP 503.

W Google: jeśli ustalimy, ż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 traktowana jako błąd serwera.
Zapisywanie w pamięci podręcznej Treść pliku robots.txt zwykle przechowujemy w pamięci podręcznej przez maksymalnie 24 godziny, ale 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), ten okres może się wydłużyć. 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 wierszy rozdzielonych znakami CR, CR/LF lub LF.

Robot bierze pod uwagę tylko prawidłowe wiersze, wszystkie pozostałe treści ignoruje. Jeśli otrzymany dokument to na przykład strona HTML, analizuje tylko prawidłowe wiersze tekstu, a pozostałe odrzuca 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 prawidłowy wiersz składa się z pola, dwukropka i wartości. Spacje są opcjonalne (ale zalecane, by zwiększyć czytelność). Komentarze można umieszczać w dowolnym miejscu pliku, używając znaku „#”. Cała treść od początku komentarza do końca wiersza jest traktowana jako komentarz i ignorowana. Ogólny format to <field>:<value><#optional-comment>. Odstępy na początku i na końcu wiersza 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>.

Google nie zapewnia obsługi elementów <field> z prostymi błędami ani literówkami (na przykład „useragent” zamiast „user-agent”).

Maksymalny dozwolony rozmiar pliku może różnić się w zależności od robota. Po przekroczeniu maksymalnego rozmiaru pliku dalsza treść jest ignorowana. Obecnie w Google obowiązuje limit 500 kibibajtów (KiB). Aby zmniejszyć rozmiar pliku robots.txt, skonsoliduj dyrektywy, które powodują nadmierne zwiększenie rozmiaru pliku robots.txt. Możesz na przykład umieścić wykluczony materiał w osobnym katalogu.

Formalna składnia i definicja

Oto opis w rozszerzonej notacji Backusa-Naura (ABNF) określonej w RFC 5234.

robotstxt = *(group / emptyline)
group = startgroupline                    ; We start with a user-agent
        *(startgroupline / emptyline)     ; ... and possibly more user-agents
        *(rule / emptyline)               ; followed by rules relevant for UAs

startgroupline = *WS "user-agent" *WS ":" *WS product-token EOL

rule = *WS ("allow" / "disallow") *WS ":" *WS (path-pattern / empty-pattern) EOL

; parser implementors: add additional lines you need (for example, Sitemaps), and
; be lenient when reading lines that don’t conform. Apply Postel’s law.

product-token = identifier / "*"
path-pattern = "/" *(UTF8-char-noctl)    ; valid URI path pattern; see 3.2.2
empty-pattern = *WS

identifier = 1*(%x2d / %x41-5a / %x5f / %x61-7a)
comment = "#" *(UTF8-char-noctl / WS / "#")
emptyline = EOL
EOL = *WS [comment] NL         ; end-of-line may have optional trailing comment
NL = %x0D / %x0A / %x0D.0A
WS = %x20 / %x09

; UTF8 derived from RFC3629, but excluding control characters
UTF8-char-noctl = UTF8-1-noctl / UTF8-2 / UTF8-3 / UTF8-4
UTF8-1-noctl    = %x21 / %x22 / %x24-7F  ; excluding control, space, '#'
UTF8-2          = %xC2-DF UTF8-tail
UTF8-3          = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) /
                  %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail )
UTF8-4          = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) /
                  %xF4 %x80-8F 2( UTF8-tail )
UTF8-tail       = %x80-BF

Grupowanie wierszy i reguł

Co najmniej jeden wiersz klienta użytkownika, po którym następuje co najmniej jedna reguła. Grupę kończy wiersz klienta użytkownika lub koniec pliku. Ostatnia grupa może nie mieć żadnych reguł, co oznacza, że pośrednio zezwala na wszystko.

Przykładowe grupy:

user-agent: a
disallow: /c

user-agent: b
disallow: /d

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

user-agent: h

Mamy trzy osobne grupy – pierwszą dla robota „a”, drugą dla robota „b” oraz trzecią dla robotów „e” i „f”. Każda grupa poza ostatnią zawiera własny wiersz należący do grupy. Ostatnia grupa jest pusta. Zwróć uwagę na opcjonalne użycie odstępów i pustych wierszy, które zwiększają czytelność.

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

W przypadku konkretnego robota tylko jedna grupa jest prawidłowa. Robot musi ustalić właściwą grupę wierszy, wybierając tę z najbardziej konkretnym klientem użytkownika, który do niego pasuje. Ignoruje wszystkie pozostałe grupy. W nazwie klienta użytkownika nie jest rozróżniana wielkość liter. 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.

Jeśli dla konkretnego klienta użytkownika istnieje więcej niż jedna grupa, wszystkie reguły z grup mające zastosowanie do tego klienta użytkownika są łączone.

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, 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 (internet) 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 grupę bardziej ogólną.
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 (internet) 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 ciągów klienta użytkownika.

Reguły należące do grupy

W tej sekcji opisujemy tylko ogólne i typowe dla Google rodzaje reguł należących do grupy. Nazywamy je też „dyrektywami” dla robotów. Dyrektywy mają postać directive: [path], gdzie [path] jest wartością opcjonalną. Domyślnie nie ma ograniczeń w indeksowaniu 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. W ścieżce jest rozróżniana wielkość liter. Więcej informacji znajdziesz poniżej, w sekcji „Zgodność adresów URL na podstawie wartości ścieżki”.

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 ze zmianą znaczenia za pomocą znaku procenta.

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

  • * 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 wyrażeń:

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

Nie pasuje do wyrażeń:

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

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

Pasuje do wyrażeń:

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

Nie pasuje do wyrażeń:

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

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

Pasuje do wyrażeń:

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

Nie pasuje do wyrażeń:

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

Pasuje do wyrażeń:

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

Nie pasuje do wyrażeń:

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

Pasuje do wyrażeń:

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

Nie pasuje do wyrażeń:

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

Pasuje do wyrażeń:

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

Nie pasuje do wyrażeń: /Fish.PHP

Wiersze poza grupą obsługiwane przez Google

Wiersz sitemap 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. Adres URL nie musi być na tym samym hoście, co plik robots.txt. Wierszy 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 obowiązywania wierszy 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 regułą mniej szczegółową (krótszą). W przypadku konfliktów reguł, w tym reguł z symbolami wieloznacznymi, obowiązuje reguła najmniej restrykcyjna.

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: undefined

http://example.com/

allow: /$

disallow: /

Efekt: allow

http://example.com/page.htm

allow: /$

disallow: /

Efekt: disallow