Jak Google interpretuje specyfikację pliku robots.txt

Automatyczne roboty Google obsługują protokół Robots Exclusion Protocol (REP). Oznacza to, że przed zindeksowaniem witryny roboty Google pobierają i analizują jej plik robots.txt, aby wyodrębnić informacje o tym, które części witryny można zindeksować. Protokół REP nie dotyczy robotów Google kontrolowanych przez użytkowników (np. subskrypcja kanałów) ani robotów służących do zwiększania bezpieczeństwa użytkowników (np. analiza złośliwego oprogramowania).

Na tej stronie opisano, jak Google interpretuje protokół REP. Pierwotny standard znajdziesz w dokumencie RFC 9309.

Co to jest plik robots.txt?

Jeśli nie chcesz, aby roboty miały dostęp do pewnych sekcji Twojej witryny, możesz utworzyć plik robots.txt z odpowiednimi regułami. Plik robots.txt to prosty plik tekstowy z regułami określającymi, które roboty mogą uzyskać dostęp do poszczególnych części witryny. Na przykład plik robots.txt dla witryny example.com może wyglądać tak:

# 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

Jeśli korzystasz z pliku robots.txt po raz pierwszy, zacznij od wprowadzenia do pliku robots.txt. Możesz też znaleźć wskazówki dotyczące tworzenia pliku robots.txt i obszerną listę najczęstszych pytań wraz z odpowiedziami.

Lokalizacja pliku i zasięg działania

Plik robots.txt musi się znajdować w katalogu głównym witryny i musi być dostępny za pomocą obsługiwanego protokołu. Wielkość liter w adresie URL pliku robots.txt (tak jak w innych adresach URL) jest rozróżniana. W przypadku wyszukiwarki Google obsługiwane protokoły to HTTP, HTTPS i FTP. Protokoły HTTP i HTTPS pozwalają odczytać plik robots.txt bezwarunkowym żądaniem HTTP GET. W przypadku protokołu FTP roboty używają standardowego polecenia RETR (RETRIEVE), korzystając z anonimowego loginu.

Reguły 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

Poniższa tabela zawiera przykładowe adresy URL pliku robots.txt i ścieżki, dla których są one prawidłowe. Pierwsza kolumna zawiera adres URL pliku robots.txt, a druga wskazuje domeny, do których dany plik robots.txt miałby zastosowanie lub nie miałby zastosowania.

Przykłady adresów URL pliku robots.txt
https://example.com/robots.txt

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.

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

Plik robots.txt w subdomenie obowiązuje tylko w niej.

Prawidłowy w przypadku adresu: https://www.example.com/

Nieprawidłowy w przypadku adresów:

  • https://example.com/
  • https://shop.www.example.com/
  • https://www.shop.example.com/
https://example.com/folder/robots.txt Plik robots.txt jest nieprawidłowy. Roboty nie szukają plików robots.txt w podkatalogach.
https://www.exämple.com/robots.txt

Nazwy IDN mają swoje odpowiedniki w punycode. Zapoznaj się z normą RFC 3492.

Prawidłowy w przypadku adresów:
  • https://www.exämple.com/
  • https://xn--exmple-cua.com/

Nieprawidłowy w przypadku adresu: https://www.example.com/

ftp://example.com/robots.txt

Prawidłowy w przypadku adresu: ftp://example.com/

Nieprawidłowy w przypadku adresu: https://example.com/

https://212.96.82.21/robots.txt

Plik robots.txt z adresem IP jako nazwą hosta obowiązuje tylko podczas skanowania 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).

Prawidłowy w przypadku adresu: https://212.96.82.21/

Nieprawidłowy w przypadku adresu: https://example.com/ (nawet na hoście 212.96.82.21)

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

Standardowe numery portów (80 przy HTTP, 443 przy HTTPS, 21 przy FTP) są odpowiednikami domyślnych nazw hosta.

Prawidłowy w przypadku adresów:

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

Nieprawidłowy w przypadku adresu: https://example.com:444/

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

Pliki robots.txt na portach o niestandardowych numerach obowiązują tylko w przypadku treści udostępnianych przez te porty.

Prawidłowy w przypadku adresu: https://example.com:8181/

Nieprawidłowy w przypadku adresu: https://example.com/

Obsługa błędów i kodów stanu HTTP

Po wysłaniu żądania pliku robots.txt kod stanu HTTP odpowiedzi serwera wpływa na sposób, w jaki roboty Google będą z tego pliku korzystać. W tabeli poniżej opisujemy, jak Googlebot traktuje pliki robots.txt w przypadku różnych kodów stanu HTTP.

Obsługa błędów i kodów stanu HTTP
2xx (success) Kody stanu HTTP oznaczające, że próba przetworzenia pliku robots.txt w sposób podany przez serwer zakończyła się powodzeniem.
3xx (redirection)

Google śledzi co najmniej 5 przekierowań zgodnie z definicją podaną w specyfikacji RFC 1945, a następnie przerywa działanie i przyjmuje dla pliku robots.txt kod 404. Dotyczy to również wszelkich zablokowanych adresów URL w łańcuchu przekierowań, ponieważ robot nie mógł pobrać reguł z powodu tych przekierowań.

Google nie śledzi przekierowań logicznych w plikach robots.txt (ramki, JavaScript lub metaodświeżanie).

4xx (client errors)

Roboty Google traktują wszystkie błędy 4xx oprócz 429 tak, jakby prawidłowy plik robots.txt nie istniał. Google zakłada więc, że nie ma ograniczeń indeksowania.

5xx (server errors)

Ponieważ serwer nie mógł ostatecznie odpowiedzieć na żądanie dotyczące pliku robots.txt, Google tymczasowo interpretuje błędy serwera 5xx429 w taki sposób, jakby witryna była całkowicie zablokowana. Google będzie podejmować próby zindeksowania pliku robots.txt aż do uzyskania kodu stanu HTTP innego niż błąd serwera. Błąd 503 (service unavailable) powoduje dość częste ponawianie próby. Jeśli plik robots.txt jest niedostępny przez ponad 30 dni, Google użyje jego ostatniej kopii zapisanej w pamięci podręcznej. Jeśli plik jest niedostępny, zakładamy brak ograniczeń.

Jeśli chcesz tymczasowo zawiesić indeksowanie, zalecamy podawanie kodu stanu HTTP 503 w odpowiedzi na wszystkie adresy URL w witrynie.

Jeśli stwierdzimy, że witryna jest nieprawidłowo skonfigurowana i w przypadku brakujących stron zwraca kod stanu 5xx zamiast 404, traktujemy błąd 5xx z tej witryny jako 404. Jeśli na przykład komunikat o błędzie na stronie, która zwraca kod stanu 5xx, to „Nie znaleziono strony”, zinterpretujemy ten kod jako 404 (not found).

Inne błędy Jeśli pliku robots.txt 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 to traktowane jako błąd serwera.

Zapisywanie w pamięci podręcznej

Google zwykle przechowuje treść pliku robots.txt 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 przekroczenia czasu oczekiwania lub błędów 5xx), okres ten 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

Plik robots.txt musi być zwykłym plikiem tekstowym zakodowanym w formacie UTF-8. Wiersze muszą być oddzielone znakami CR, CR/LF lub LF.

Google ignoruje nieprawidłowe wiersze w plikach robots.txt, w tym znacznik kolejności bajtów (BOM) Unicode na początku pliku robots.txt, i wykorzystuje tylko prawidłowe wiersze. Jeśli na przykład pobrana treść ma format HTML zamiast reguł pliku robots.txt, Google spróbuje ją przeanalizować i wyodrębnić reguły, ignorując pozostałą zawartość.

Podobnie, jeśli znaki w pliku robots.txt nie są kodowane w formacie UTF-8, Google może zignorować znaki spoza zakresu UTF-8, co może spowodować, że reguły w pliku robots.txt będą renderowane nieprawidłowo.

Obecnie w Google obowiązuje limit rozmiaru pliku robots.txt wynoszący 500 kibibajtów (KiB). Po przekroczeniu maksymalnego rozmiaru pliku dalsza treść jest ignorowana. Możesz zmniejszyć rozmiar pliku robots.txt, konsolidując reguły, które powodują nadmierne zwiększenie jego rozmiaru. Możesz na przykład umieścić wykluczony materiał w osobnym katalogu.

Składnia

Prawidłowe wiersze pliku robots.txt składają się z pola, dwukropka i wartości. Spacje są opcjonalne, ale zalecane, aby zwiększyć czytelność. Spacje na początku i na końcu wiersza są ignorowane. Jeśli dodajesz komentarze, poprzedź je znakiem #. Pamiętaj, że wszystko, co jest po znaku #, zostanie zignorowane. Ogólny format to <field>:<value><#optional-comment>.

Google obsługuje te pola:

  • user-agent: wskazuje robota, którego dotyczą reguły.
  • allow: ścieżka adresu URL, która może być indeksowana.
  • disallow: ścieżka adresu URL, której nie można indeksować.
  • sitemap: pełny adres URL mapy witryny.

Pola allowdisallow są też nazywane regułami. Reguły mają postać rule: [path], gdzie [path] jest wartością opcjonalną. Domyślnie nie ma ograniczeń w indeksowaniu stron przez określone roboty. Roboty ignorują reguły bez atrybutu [path].

Wartość [path] (jeśli została określona) jest względna wobec katalogu głównego witryny, z której pochodzi dany plik robots.txt (ma ten sam protokół, numer portu, hosta i domenę). Wartość ścieżki musi zaczynać się znakiem / wskazującym katalog główny. Wielkość liter ma znaczenie. Dowiedz się więcej o zgodności adresów URL na podstawie wartości ścieżki.

user-agent

Wiersz user-agent wskazuje robota, którego dotyczą reguły. Pełną listę ciągów klienta użytkownika, których można użyć w pliku robots.txt, znajdziesz w sekcji dotyczącej robotów Google i ciągów klienta użytkownika.

Wielkość liter w wartości wiersza user-agent nie jest rozróżniana.

disallow

Reguła disallow określa ścieżki, do których nie mogą uzyskać dostępu roboty wskazane w wierszu user-agent, który występuje w grupie z regułą disallow. Roboty ignorują regułę bez ścieżki.

Google nie może indeksować zawartości stron, których indeksowanie zablokowano, ale nadal może indeksować ich adresy URL i wyświetlać je w wynikach wyszukiwania bez fragmentu treści. Dowiedz się, jak zablokować indeksowanie.

Wielkość liter w wartości reguły disallow jest rozróżniana.

Sposób użycia:

disallow: [path]

allow

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

Wielkość liter w wartości pola allow jest rozróżniana.

Sposób użycia:

allow: [path]

sitemap

Pole sitemap w pliku robots.txt obsługują Google, Bing i inne popularne wyszukiwarki. Jego definicję znajdziesz na sitemaps.org.

Wielkość liter w wartości pola sitemap jest rozróżniana.

Sposób użycia:

sitemap: [absoluteURL]

Wiersz [absoluteURL] wskazuje lokalizację mapy witryny lub pliku indeksu map witryn. Musi to być pełny i jednoznaczny URL obejmujący protokół i hosta. Nie musi być zakodowany. Adres URL nie musi należeć do tego samego hosta co plik robots.txt. Możesz określić wiele pól sitemap. Pole mapy witryny nie odnosi się do żadnego konkretnego klienta użytkownika – wszystkie roboty mogą z niego korzystać, o ile indeksowanie w danej lokalizacji nie jest zabronione.

Na przykład:

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

Grupowanie wierszy i reguł

Możesz grupować reguły dotyczące wielu klientów użytkownika, powtarzając wiersze user-agent na potrzeby poszczególnych robotów.

Na przykład:

user-agent: a
disallow: /c

user-agent: b
disallow: /d

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

user-agent: h

W tym przykładzie mamy 4 różne grupy reguł:

  • Jedna grupa dla klienta użytkownika „a”.
  • Jedna grupa dla klienta użytkownika „b”.
  • Jedna grupa dla klientów użytkownika „e” i „f”.
  • Jedna grupa dla klienta użytkownika „h”.

Techniczny opis grupy znajdziesz w sekcji 2.1 dokumentacji REP.

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

W przypadku konkretnego robota tylko jedna grupa jest prawidłowa. Roboty Google muszą ustalić właściwą grupę reguł, znajdując w pliku robots.txt grupę z najbardziej konkretnym pasującym do nich klientem użytkownika. Pozostałe grupy są ignorowane. 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 klienta użytkownika istnieje więcej niż 1 określona grupa, wszystkie reguły z grup mające zastosowanie do tego klienta użytkownika są łączone wewnętrznie w 1 grupę. Określone grupy klientów użytkownika i grupy globalne (*) nie są połączone.

Przykłady

Dopasowywanie pól user-agent

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 googlebot-news przestrzega reguł grupy 1, ponieważ grupa 1 jest najbardziej szczegółowa.
Googlebot (internet) googlebot przestrzega reguł grupy 3.
Googlebot Storebot Storebot-Google przestrzega reguł grupy 2, ponieważ nie ma konkretnej grupy dotyczącej robota Storebot-Google.
Googlebot News (podczas indeksowania obrazów) Podczas indeksowania obrazów robot googlebot-news przestrzega reguł grupy 1. googlebot-news nie indeksuje obrazów w Grafice Google, więc przestrzega tylko reguł grupy 1.
Inny robot (internet) Inne roboty Google przestrzegają reguł grupy 2.
Inny robot (wiadomości) Inne roboty Google, które indeksują treść wiadomości, ale nie są oznaczone jako googlebot-news, przestrzegają reguł grupy 2. Nawet wtedy, gdy istnieje grupa dla podobnego robota, obowiązuje ona tylko w przypadku dokładnego dopasowania nazwy.

Grupowanie reguł

Jeśli plik robots.txt zawiera wiele grup, które odnoszą się do konkretnego klienta użytkownika, roboty Google wewnętrznie scalają te grupy. Na przykład:

user-agent: googlebot-news
disallow: /fish

user-agent: *
disallow: /carrots

user-agent: googlebot-news
disallow: /shrimp

Roboty grupują reguły wewnętrznie w zależności od klienta użytkownika, na przykład:

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

user-agent: *
disallow: /carrots

Parser pliku robots.txt ignoruje reguły inne niż allow,disallowuser-agent. Oznacza to, że ten fragment pliku robots.txt jest traktowany jako 1 grupa, dlatego reguła disallow: / obejmuje zarówno klienta użytkownika user-agent a, jak i b:

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

user-agent: b
disallow: /

Gdy roboty przetwarzają reguły w pliku robots.txt, ignorują wiersz sitemap. Tak na przykład roboty rozumieją poprzedni fragment pliku robots.txt:

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

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

Na podstawie wartości ścieżki w regułach allowdisallow Google określa, czy reguła ma zastosowanie do konkretnego adresu URL w witrynie. Jest to możliwe dzięki porównaniu reguły z komponentem ścieżki adresu URL, który robot próbuje pobrać. 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 i inne popularne wyszukiwarki obsługują w wartościach ścieżki ograniczone formy symboli wieloznacznych. Symbole wieloznaczne:

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

W tabeli poniżej pokazujemy, jak różne symbole wieloznaczne wpływają na analizę:

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.
/$ Pasuje tylko do adresów na poziomie głównym. Wszystkie adresy URL na niższych poziomach mogą być indeksowane.
/fish

Pasuje do każdej ścieżki, która rozpoczyna się od /fish. W dopasowaniu jest rozróżniana wielkość liter.

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
  • /desert/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
  • /desert/fish
/fish/

Pasuje do wszystkich elementów w folderze /fish/.

Pasuje do wyrażeń:

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

Nie pasuje do wyrażeń:

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

Pasuje do dowolnej ścieżki zawierającej .php.

Pasuje do wyrażeń:

  • /index.php
  • /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 każdej ścieżki, która kończy się .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 każdej ścieżki zawierającej /fish.php (w tej kolejności).

Pasuje do wyrażeń:

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

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

Pierwszeństwo obowiązywania reguł

Dopasowując reguły pliku robots.txt do adresów URL, roboty korzystają z najbardziej szczegółowej reguły wybranej na podstawie długości ścieżki. W przypadku konfliktów reguł, w tym reguł z symbolami wieloznacznymi, Google przestrzega reguły najmniej restrykcyjnej.

Poniższe przykłady pokazują, którą regułę roboty Google zastosują do danego adresu URL.

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

allow: /p
disallow: /

Obowiązująca reguła: allow: /p, bo jest bardziej szczegółowa.

https://example.com/folder/page

allow: /folder
disallow: /folder

Obowiązująca reguła: allow: /folder, ponieważ w przypadku reguł sprzecznych Google stosuje regułę najmniej restrykcyjną.

https://example.com/page.htm

allow: /page
disallow: /*.htm

Obowiązująca reguła: disallow: /*.htm, ponieważ ścieżka reguły jest dłuższa i pasuje do większej liczby znaków w adresie URL, więc jest bardziej szczegółowa.

https://example.com/page.php5

allow: /page
disallow: /*.ph

Obowiązująca reguła: allow: /page, ponieważ w przypadku reguł sprzecznych Google stosuje regułę najmniej restrykcyjną.

https://example.com/

allow: /$
disallow: /

Obowiązująca reguła: allow: /$, bo jest bardziej szczegółowa.

https://example.com/page.htm

allow: /$
disallow: /

Obowiązująca reguła: disallow: /, ponieważ reguła allow odnosi się tylko do głównego adresu URL.