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
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:
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.
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.
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.
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/
Wszystkie roboty mogą odwiedzać wszystkie pliki:
User-agent: * Disallow:
Ten sam efekt da pusty plik robots.txt lub brak pliku robots.txt.
Zakaz pobierania czegokolwiek przez kogokolwiek:
User-agent: * Disallow: /
Żaden robot nie może zaglądać do żadnego z trzech folderów:
User-agent: * Disallow: /cgi/ Disallow: /private/ Disallow: /tmp/
Konkretny robot ma zakazany wstępu do konkretnego folderu:
User-agent: Googlebot-Image Disallow: /photos/
Żaden robot nie powinien pobierać pliku file.html:
User-agent: * Disallow: /directory/file.html
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: /
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
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:
< - < > - > & - & ' - ' " - "
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.
Plik sitemap.xml zawiera następujące elementy XML: urlset, url, loc, lastmod, changefreq i priority.
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>
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>
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 &, zaś literę ü zakodowano w utf-8 i przedstawiono w postaci %C3%BC.
Pojedynczy adres URL być krótszy niż 2048 znaków.
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>
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>
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>
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
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.
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>
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
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
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
Tabela 5. Adresy