1   2   3   4   5   6   7   8  ...

Pliki robots.txt i sitemap.xml. Kontrola zachowania robotów internetowych

Roboty internetowe (ang. web spiders, web crawlers) przez cały czas przemierzają internet analizując, archiwizując oraz indeksując znalezione zasoby. Administrator serwisu WWW może w pewnym stopniu kontrolować zachowanie robotów odwiedzających jego witrynę. Umożliwiają to pliki robots.txt oraz sitemap.xml. Pierwszy z nich, robots.txt, pozwala na blokowanie dostępu do wybranych podstron serwisu dla konkretnych robotów. Drugi, sitemap.xml, zachęca roboty do szybszego i dokładniejszego indeksowania.

12/01/07

1. Roboty internetowe

Roboty internetowe, nazywane w anglojęzycznej literaturze web crawler, web spider czy web robot to programy komputerowe automatycznie przeszukujące zasoby sieci WWW. Wędrują one po sieci WWW, pobierając adresy kolejnych stron do odwiedzenia z hiperłączy znalezionych w dokumentach. Robot, który trafi na stronę główną witryny zawierającej kod:

<body>
  ...
  <ul id="menu">
    <li><a href="lorem.html">lorem</a></li>
    <li><a href="ipsum.html">ipsum</a></li>
    <li><a href="dolor.html">dolor</a></li>	        
    ...
  </ul>
  ...
</body>

pozna adresy podstron: lorem.html, ipsum.html i dolor.html. W następnym etapie pobierze wymienione trzy dokumenty i przeanalizuje je. Wyszuka wszystkie występujące w nich hiperłącza, a znalezione adresy doda do listy stron, które zostaną przeszukane w następnym etapie. W ten sposób robot internetowy, rozpoczynając wędrówkę od strony głównej, może wędrować po wszystkich podstronach serwisu, a także — w przypadku hiperłączy prowadzących do innych witryn — przemieszczać się pomiędzy różnymi domenami.

Każdy robot jest identyfikowany poprzez nazwę przekazywaną w parametrze User-Agent protokołu HTTP:

User-Agent: CERN-LineMode/2.15 libwww/2.17b3

Zatem dostęp do stron serwisu możemy blokować wybranym robotom na podstawie ich nazwy. (Obszerna baza danych z nazwami robotów jest dostępna pod adresem http://www.user-agents.org. Nazwy robotów Google są zawarte w ramce.)

Nazwy robotów Google:

  • Googlebot — przemierza strony uwzględniane w indeksie witryn internetowych i Google News
  • Googlebot-Mobile — przemierza strony uwzględniane w indeksie witryn komórkowych
  • Googlebot-Image — przemierza strony uwzględniane w indeksie grafiki
  • Mediapartners-Google — przemierza strony w celu ustalenia treści AdSense. Ten robot jest stosowany tylko do przemierzania witryn, w których wyświetlane są reklamy AdSense.
  • Adsbot-Google — przemierza strony w celu oceny jakości strony docelowej AdWords. Ten robot jest stosowany tylko do indeksowania witryn reklamowanych w programie Google AdWords. Dodatkowe informacje o tym robocie i sposobach blokowania mu dostępu do części witryny.

Zadania realizowane przez robota mogą być różne: od utworzenia kopii serwisu, przez audyt i walidację aż po utworzenie indeksu podstron na potrzeby wyszukiwarki. Bez wątpienia najważniejszą grupą są roboty wyszukiwarek internetowych, odpowiedzialne za indeksację witryny. Google, Onet, Yahoo, WP — wszystkie wyszukiwarki dysponują własnymi robotami, które bezustannie przeszukują internet i uaktualniają bazę danych wyszukiwarki. To, na ile witryna jest przyjazna robotom wyszukiwarek, może mieć wpływ na pozycjonowanie.

Dwie podstawowe techniki ułatwiania dostępu do podstron witryny robotom wyszukiwarek to czytelne hiperłącza i strona z mapą witryny. Metody te warto wzbogacić o pliki robots.txt oraz sitemap.xml. W ten sposób zyskamy dodatkowe możliwości poinformowania robotów o pełnej zawartości serwisu. Ułatwi to indeksację nowych podstron oraz aktualizację danych stron już zaindeksowanych.

2. Plik robots.txt

Plik robots.txt pozwala na zablokowanie dostępu do stron WWW robotom internetowym. Należy go umieścić w folderze głównym serwisu WWW. Na przykład dla witryny http://www.example.net plik robots.txt powinien być dostępny pod adresem http://www.example.net/robots.txt.

Brak pliku robots.txt lub plik robots.txt o pustej zawartości pozwalają wszystkim robotom na pełny dostęp do wszystkich dokumentów na serwerze.

W zależności od robota, plik robots.txt może być pobierany w różnych odstępach czasu. Na przykład roboty Google pobierają plik robots.txt raz na dobę. (Datę i godzinę ostatniego pobrania pliku robots.txt przez robota Google możemy sprawdzić w Narzędziach Webmastera dostarczanych przez Google http://www.google.com/webmasters/.) Ilustruje to rysunek 1.

Rysunek 1. Data i godzina ostatniego pobrania pliku robots.txt

Każda domena ma oddzielny plik robots.txt. Dla domen:

example.net
a.example.net
b.example.net

roboty będą szukały plików:

http://example.net/robots.txt
http://a.example.net/robots.txt
http://b.example.net/robots.txt

Należy pamiętać, że robot może nie stosować się do zaleceń zawartych w pliku robots.txt. Plik ten nie może być traktowany jako mechanizm zabezpieczania dostępu do tajnych danych.

Robots Exclusion Protocol

Protokół Robots Exclusion Protocol (nazywany również Robots Exclusion Standard lub robots.txt Protocol) pozwala na ochronę zawartości całości lub fragmentów publicznie dostępnego serwisu WWW przed robotami internetowymi.

Powstał w 1994 lecz pomimo powszechnego użycia aż do dzisiaj nie doczekał się oficjalnej specyfikacji czy dokumentu RFC. Najpełniejsze informacje dotyczące protokołu są zawarte na stronach The Web Robots Pages pod adresem http://www.robotstxt.org/wc/robots.html.

3. Składnia pliku robots.txt

Pierwotnie, pliki robots.txt mogły zawierać wyłącznie dwa rodzaje wpisów:

User-agent
Disallow

Błędem jest na przykład użycie Allow:

PRZYKŁAD BŁĘDNY
Allow

Co ciekawe, wpisy Allow występują w pliku http://www.google.com/robots.txt.

Pierwszy z wpisów, User-agent, ustala nazwę robota, np.:

User-agent: *
User-agent: Slurp
User-agent: Googlebot

Drugi wpis, Disallow, podaje nazwę pliku lub folderu, do którego dostęp ma być zablokowany, np.:

Disallow: /
Disallow: /tmp/
Disallow: /info.html
Disallow: /me.jpg

Wpis User-agent występuje jako pierwszy, a po nim następuje jeden lub kilka wpisów Disallow, np.:

User-agent: Googlebot
Disallow: /cgi/
Disallow: /tmp/
Disallow: /data/photos/
Disallow: /data/texts/

W pliku robots.txt mogą występować jednolinijkowe komentarze rozpoczynające się znakiem # (haszmark):

# Ogolne
User-agent: *
Disallow: /

Uwaga: znak * nie jest dozwolony w ścieżkach. Część robotów może go nie interpretować, przez co uzyskają dostęp do zasobów, które miały być zablokowane. Zamiast:

PRZYKŁAD BŁĘDNY
Disallow: /tmp/*

należy pisać:

Disallow: /tmp/

4. Przykładowe pliki robots.txt

4.1 Przykład 1

Wszystkie roboty mogą odwiedzać wszystkie pliki:

User-agent: *
Disallow:

Ten sam efekt da pusty plik robots.txt lub brak pliku robots.txt.

4.2 Przykład 2

Zakaz pobierania czegokolwiek przez kogokolwiek:

User-agent: *
Disallow: /

4.3 Przykład 3

Żaden robot nie może zaglądać do żadnego z trzech folderów:

User-agent: *
Disallow: /cgi/
Disallow: /private/
Disallow: /tmp/

4.4 Przykład 4

Konkretny robot ma zakazany wstępu do konkretnego folderu:

User-agent: Googlebot-Image
Disallow: /photos/

4.5 Przykład 5

Żaden robot nie powinien pobierać pliku file.html:

User-agent: *
Disallow: /directory/file.html

4.6 Przykład 6

Zakaz dostępu do serwisu dla pięciu wybranych programów kopiujących całe witryny WWW:

User-agent: WebStripper
Disallow: /

User-agent: WebCopier
Disallow: /

User-agent: TeleportPro
Disallow: /

User-agent: HTTrack
Disallow: /

User-agent: wget
Disallow: /

5. Rozszerzenia oryginalnej składni robots.txt

Najważniejszym rozszerzeniem składni pliku robots.txt jest dyrektywa Sitemap. Służy ona do wskazania pliku zawierającego mapę witryny. Parametrem dyrektywy jest adres URL mapy:

Sitemap: http://www.example.com/sitemap.xml

Dyrektywa Sitemap jest niezależna od dyrektywy User-agent i może być obecna w dowolnym miejscu pliku robots.txt. Na stronach wyszukiwarki Google znajdują się informacje mówiące o tym, że roboty Google respektują dyrektywę Sitemap.

Kolejnymi rozszerzeniami są dyrektywy Request-rate oraz Visit-time. Pierwsza z nich ustala maksymalne tempo, w jakim robot może przeszukiwać cały serwis, a drugi wskazuje godziny, w których robot może wędrować po serwisie. Na przykład wpis:

User-agent: *
Request-rate: 1/5       
Visit-time: 0600-0845

ogranicza tempo pobierania do jednej strony na pięć sekund w godzinach pomiędzy 6:00 a 8:45. Powyższe informacje pochodzą z Wikipedii. Na stronach wyszukiwarki Google nie znalazłem potwierdzenia, że powyższe dyrektywy są respektowane.

Ponadto niektóre roboty, na przykład Googlebot, wprowadziły interpretację znaków * oraz ? w nazwach plików i folderów.

lp. Dyrektywa Wartość Czy obsługiwane przez Google?
1. User-agent Nazwa robota Tak
2. Disallow Folder, do którego dostęp ma być zabroniony Tak
3. Sitemap Nazwa pliku z mapą witryny Tak
4. Request-rate Maksymalna prędkość wędrowania robota po witrynie ?
5. Visit-time Godziny, w których robot może odwiedzać witrynę ?

Tabela 1. Dyrektywy pliku robots.txt

6. Plik sitemap.xml

Plik sitemap.xml ułatwia indeksację witryny WWW. Zawiera on adresy URL podstron serwisu wraz z informacjami o dacie ostatniej modyfikacji. Dzięki temu roboty szybciej odnajdą i zaindeksują nowe podstrony, jakie pojawiły się w serwisie.

Plik sitemap.xml wykorzystuje format XML. Należy stosować kodowanie utf-8, zaś wszystkie wystąpienia znaków <>&'" należy zastąpić encjami:

<  -  &lt;
>  -  &gt;
&  -  &amp;
'  -  &apos;
"  -  &quot;

Pojedynczy plik sitemap.xml musi być mniejszy niż 10 MB i może zawierać co najwyżej 10 000 adresów URL.

Plik z mapą witryny nie może być umieszczony na innym serwerze ani wewnątrz drzewa katalogów. Plik:

http://www.example.net/art/new/sitemap.xml

może wyłącznie dotyczyć adresów URL zawartych wewnątrz:

http://www.example.net/art/new/

Nie może dotyczyć adresów z wyższego folderu, np.:

http://www.example.net/other/

ani tym bardziej z innej domeny.

7. Format pliku sitemap.xml

Plik sitemap.xml zawiera następujące elementy XML: urlset, url, loc, lastmod, changefreq i priority.

7.1 Element urlset

Element urlset jest wymagany. Zawiera on wewnątrz wszystkie adresy URL, jakie są zawarte w mapie witryny. Atrybut xmlns ustala wersję protokołu sitemap:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>...</url>
  <url>...</url>
  ...  
</urlset>

7.2 Element url

Element url jest wymagany. Występuje wyłącznie wewnątrz urlset. Opisuje on pojedynczy adres URL. Zawiera elementy: loc, lastmod, changefreq oraz priority.

<url>
  <loc>...</loc>
  <lastmod>...</lastmod>  
  <changefreq>...</changefreq>    
  <priority>...</priority>    
</url>

7.3 Element loc

Element wymagany. Występuje wyłącznie wewnątrz url. Ustala adres URL pojedynczego wpisu mapy. Podany adres musi rozpoczynać się od przedrostka (np. http://), np.:

<loc>http://www.gajdaw.pl/nowosci.html</loc>

W adresie należy stosować encje oraz kodowanie URL. Na przykład adres:

http://www.example.com/ümlat.php&q=name

należy zakodować jako:

http://www.example.com/%C3%BCmlat.php&q=name

Znak & zapisano w postaci encji &amp;, zaś literę ü zakodowano w utf-8 i przedstawiono w postaci %C3%BC.

Pojedynczy adres URL być krótszy niż 2048 znaków.

7.4 Element lastmod

Element opcjonalny. Występuje wyłącznie wewnątrz url. Ustala datę ostatniej modyfikacji dokumentu, którego adres URL jest podany w elemencie url. Data powinna być w formacie W3C opisanym w dokumencie http://www.w3.org/TR/NOTE-datetime. W skróconej postaci (tj. bez godziny) data jest zapisywana jako YYYY-MM-DD, np. 2007-11-02:

<lastmod>2007-11-02</lastmod>

Formatem pełnym daty jest YYYY-MM-DDTgg:mm:ss, np. 2007-11-02T18:50:24:

<lastmod>2007-11-02T18:50:24</lastmod>

7.5 Element changefreq

Element opcjonalny. Występuje wyłącznie wewnątrz url. Ustala częstotliwość zmian dokumentu. Poprawnymi wartościami są:

always
hourly
daily
weekly
monthly
yearly
never

Wartość always oznacza, że dokument podlega zmianom przy każdej próbie dostępu.

Przykładowy wpis:

<changefreq>daily<changefreq>

7.6 Element priority

Element opcjonalny. Występuje wyłącznie wewnątrz url. Ustala umowną ważność strony względem innych podstron serwisu. Wartość powinna być z zakresu od 0 do 1. Wartością domyślną jest 0.5.

<priority>0.8</priority>

7.7 Przykład pojedynczego pliku z mapą witryny

Przykładowy pojedynczy plik z mapą witryny jest przedstawiony na listingu 1, zaś tabela 2 zawiera pełne zestawienie elementów XML, które mogą wystąpić w pliku z mapą witryny.

<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>http://www.gajdaw.pl/nowosci.html</loc>
    <lastmod>2007-11-02</lastmod>    
    <changefreq>daily</changefreq>
    <priority>0.7</priority>
  </url>
  <url>
    <loc>http://www.gajdaw.pl/php/pear-auth/index.html</loc>
    <lastmod>2007-11-02</lastmod>    
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>  
  <url>
    <loc>http://www.gajdaw.pl/gimp/gimp-kurs-3/index.html</loc>
    <lastmod>2007-10-31</lastmod>    
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
  </url>    
  ...
</urlset>

Listing 1. Przykładowy pojedynczy plik z mapą witryny

lp. Element Może wystąpić w Może zawierać Wymagany/Opcjonalny Znaczenie
1. urlset - url wymagany Zawiera listę adresów URL.
2. url urlset loc, lastmod, changefreq, priority wymagany Opisuje pojedynczą stronę WWW.
3. loc url - wymagany Adres dokumentu.
4. lastmod url - opcjonalny Data ostatniej modyfikacji.
5. changefreq url - opcjonalny Informacje o tym, jak często dokument podlega zmianom.
6. priority url - opcjonalny Waga dokumentu względem innych stron (na tym samym serwerze).

Tabela 2. Elementy XML występujące w mapie witryny sitemap.xml

8. Lista map

Mapa witryny może być zapisana w jednym pliku lub może być podzielona na wiele plików. W przypadku podzielenia mapy witryny na wiele plików należy także przygotować indeks map witryny. Indeks map jest plikiem XML, w którym występują elementy: sitemapindex, sitemap, loc oraz lastmod.

Pojedynczy plik z indeksem może zawierać informacje o 1000 map.

Zatem wielkość mapy podzielonej na wiele plików jest ograniczona do:

1 000 * 50 000 = 50 000 000

adresów URL.

8.1 Element sitemapindex

Element sitemapindex jest wymagany. Zawiera on adresy map witryny. Atrybut xmlns ustala wersję protokołu sitemap:

<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>...</sitemap>
  <sitemap>...</sitemap>
  ...  
</sitemapindex>

8.2 Element sitemap

Element sitemap jest wymagany. Występuje wyłącznie wewnątrz sitemapindex. Opisuje on pojedynczy plik z mapą witryny. Zawiera elementy: loc oraz lastmod.

Element loc jest wymagany. Występuje wyłącznie wewnątrz sitemap i ustala adres URL pojedynczego pliku z mapą witryny.

Element lastmod jest opcjonalny. Ustala on datę ostatniej modyfikacji podanego pliku z mapą witryny:

<sitemap>
  <loc>http://www.example.pl/artykuly.xml</loc>
  <lastmod>2007-10-20</lastmod>
</sitemap>  
lp. Element Może wystąpić w Może zawierać Wymagany/Opcjonalny Znaczenie
1. sitemapindex - sitemap wymagany Zawiera listę adresów URL.
2. sitemap sitemapindex loc, lastmod wymagany Opisuje pojedynczą stronę WWW.
3. loc sitemap - wymagany Adres dokumentu.
4. lastmod sitemap - opcjonalny Data ostatniej modyfikacji.

Tabela 3. Elementy XML występujące w indeksie map

8.3 Przykład mapy z indeksem

Mapa stosująca indeks składa się z wielu plików XML. W przykładzie plikami tymi są: sitemapindex.xml, artykuly.xml oraz przyklady.xml. W pliku sitemapindex.xml wymieniamy wszystkie mapy, zaś w plikach artykuly.xml oraz przyklady.xml wymieniamy poszczególne podstrony. Przykładowa mapa witryny podzielona na dwa pliki jest przedstawiona na listingu 2.

sitemapindex.xml
----------------
<?xml version="1.0" encoding="utf-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>http://www.example.com/artykuly.xml</loc>
    <lastmod>2007-10-20</lastmod>
  </sitemap>
  <sitemap>
    <loc>http://www.example.com/przyklady.xml</loc>
    <lastmod>2007-11-01</lastmod>
  </sitemap>
</sitemapindex>


artykuly.xml
------------
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>http://www.gajdaw.pl/art1.html</loc>
    <lastmod>2007-11-02</lastmod>    
    <changefreq>daily</changefreq>
    <priority>0.7</priority>
  </url>
  ...
</urlset>


przyklady.xml
------------
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>http://www.gajdaw.pl/p1.html</loc>
    <lastmod>2007-10-25</lastmod>    
    <changefreq>daily</changefreq>
    <priority>0.7</priority>
  </url>
  ...
</urlset>

Listing 2. Przykładowa mapa witryny podzielona na dwa pliki

9. robots.txt + sitemap.xml = ułatwienie indeksacji witryny

Wykorzystując pliki robots.txt oraz sitemap.xml ułatwiamy indeksację zawartości serwisu robotom internetowym. W pliku robots.txt należy umieścić dyrektywę Sitemap wskazującą plik z mapą witryny (lub z indeksem map):

robots.txt
----------
Sitemap: http://www.example.net/sitemap.xml

Natomiast w pliku sitemap.xml umieszczamy mapę witryny:

sitemap.xml
----------
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  ...
</urlset>

Robot odwiedzający witrynę pobierze plik robots.txt. Na jego podstawie pozna adres pliku z mapą witryny. Po pobraniu mapy sitemap.xml, robot uzyska pełne informacje o podstronach witryny.

Najważniejszy z robotów, Googlebot, pobiera plik robots.txt raz na dobę.

lp. Przykład
1. Przykłady omówione w artykule

Tabela 4. Przykłady do pobrania

lp. Adres
1. Web crawler — hasło w Wikipedii
2. Nazwy robotów
3. Nazwy robotów Google
4. Robots Exclusion Standard — hasło w Wikipedii (en)
5. Robots Exclusion Protocol — hasło w Wikipedii (pl)
6. The Web Robots Pages
7. spiders.pl — Wszystko o robotach wyszukiwarek
8. Rozszerzenia składni robots.txt robota Google
9. Sitemaps — hasło w Wikipedii
10. Sitemaps.org

Tabela 5. Adresy

 1   2   3   4   5   6   7   8  ...