Robots.txt aneb jak se vypořádat s těmi zlými a usměrnit ty hodné

V rubrice: Tipy & Triky | Obtížnost:

Ačkoliv je internet doménou lidí, tak se na něm pohybuje stále větší a větší množství robotů. Ti navštěvují Vaše stránky především kvůli indexování obsahu, analyzování odkazů, případně třeba spamování. Soubor robot.txt vám tyto živly alespoň částečně umožní usměrnit.

Hodní roboti

Hodným robotem je pro nás hlavně Googlebot a Seznambot. Indexují naše webové stránky, zařazují je do vyhledávání a díky tomu nás mohou uživatelé jednoduše najít. Ale hlavně se ale řídí direktivami, jež naleznout v souboru robots.txt

Zkuste si představit robota, který chce navštívit vaše webové stránky. Nejdříve zaklepe, slušně pozdraví a podívá se do robots.txt na své jméno, kde definujeme pravidla návštěvy. Můžeme mu říct kam smí, kde ho naopak nechceme vidět a také za jak dlouho se na nás zase může podívat. Průběžně také kontroluje, jestli se stav souboru robots.txt nezměnil. To jsou hodní roboti.

Mechanických návštěvníků bohužel přibývá, přibývá, oni zbytečně zatěžují webové servery a nemají pro nás žádný význam. Opravdu nepotřebuji být zaindexován v čínském vyhledávač Baidu nebo nechci, aby mé stránky byly neustále procházeny nejrůznějšími SEO nástroji pro analýzu odkazů. Všechny tyto hodné roboty naštěstí můžeme bez problémů zakázat.

Jak s nimi jednat?

Ke každému požadavku na webovou stránku je připojen User-agent. Je to takový podpis návštěvníka. Ten od Google bota vypadá například takto:

Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

A jelikož má každý bot nějaký svůj unikátní podpis, můžeme jej poznat a následně usměrnit. Vytvořte si v kořenové složce soubor robots.txt (nebo použijte plugin WP Robots Txt) a vložte následující text:

User-agent: bingbot
Disallow: /

User-agent: Baiduspider
Disallow: /

User-agent: AhrefsBot
Disallow: /

User-agent: YandexBot
Disallow: /

User-agent: rogerbot
Disallow: /

User-agent: Slurp
Disallow: /

User-agent: Mail.RU
Disallow: /

User-agent: *
Disallow: /wp-admin
Disallow: /wp-includes
Crawl-delay: 2

Sitemap: SITEMAP_URL

Je zde použito hned několik direktiv. Pomocí Use-agenta rozpoznáme robota a pod ním uvedeme, kam smí (Allow) a nebo kam nesmí (Disallow). V uvedeném příkladu jsou zakázáni boti, kteří mi zatěžovali web, ale nic mi nepřinášeli.

Na úplném konci definuji pravidla pro všechny roboty. Zde si všimněte především direktivy Crawl-delay, která robotům sděluje minimální interval mezi requesty v sekundách, aby vás nezahlcovali požadavky (Google zná, ale ignoruje). Rovněž mohu doporučit zakázání wp-admin a wp-includes, protože tam pro roboty není nic k vidění.

Alternativou pro Crawl-delay je příkaz „Request-rate: 10/1m 0600-1459“ Tím říkáme robotovi, že může mezi 6 a 15 hodinou UTC ( u nás to je +1 hodina v zimě a +2 hodiny v létě) navštívit maximálně 10 stránek za minutu (Google nezná, Seznam zná).

A konci ještě uveďte pro indexovací roboty sitemapu.

Zlobiví roboti

Uličníci, malí Skyneti to jsou. Někteří roboti mohou váš soubor robots.txt zvesela ignorovat a bez servítek dál zatěžovat Vaše hroutící se servery. Někteří mají alespoň tolik slušnosti, že se podepíší. Vy je tak můžete jednoduše odhalit a zablokovat natvrdo.

Spamboti vám nic takového neřeknou, takže jich se nezbavíte jen tak.

Jak s nimi jednat?

Striktní blokování se provádí pomocí souboru .htaccess (váš hosting ho musí mít povolený). Do něj vložíte následující direktivy:

BrowserMatchNoCase bingbot evilBot
BrowserMatchNoCase Baiduspider evilBot
Order Deny,Allow
Deny from env=evilBot

User agent každého požadavku je testován a pokud obsahuje bingbot nebo Baiduspider (upravit, přidat můžete samozřejmě vlastní), odmítne se s ním server bavit a vrátí chybu 403. Velmi účinné.

Jací roboti k vám nejčastěji přistupují se dá nalézt v logu. Pokud Vám je hosting neposkytuje, tak můžete čerpat data rovněž z nějakého server-side měřiče návštěvnosti jako je AWStats.

V rubrice: Tipy & Triky | Obtížnost:

Komentáře

  1. „Neposlušné“ boty můžeme snadno zakázat. Na web vložíme skrytý odkaz na PHP script a přístup k tomuto scriptu zakážeme v souboru robots.txt. Každý robot, který ignoruje robots.txt se k tomuto PHP scriptu dostane a ten jeho user-agenta (případně i IP) uloží do databáze pokud tam ještě není a pokud tam je odešle mu hlavičku 403 Forbidden případně jej přesměruje někam do pekla :)) Je to jednoduché a hlavně účinné, protože tihle boti se rádi vracejí…

  2. Já využívám jenom
    User-agent: bingbot
    Disallow: /

    User-agent: Baiduspider
    Disallow: /

    User-agent: AhrefsBot
    Disallow: /

  3. Ahoj na wordpressu me bezi tri weby. A s roboty si nevim presne rady. Rad bych se zeptal. Myslite si ze ma tento soubor tak velkou vahu? Nemyslim to tak jestli vyhledavace ignoruji nebo se ridi podle parametru zde zapsanych. Ale muzete me nekdo napsat jak se chova co si asi mysli presne vyhledavac o webu kde zadny robots neni? Premyslim ze bych je odstgranil at si na webu prohlizec dela co chce a vyhnul se tak pripadnemu spatnemu nastaveni. Diky za koment

    1. Pokud soubor robots.txt neexistuje, tak to ničemu nevadí. Vyhledávače k tomu přistupují tak, že všechno mají povolené. Robots slouží pouze k tomu, aby se buď omezily některé sekce nebo např. Snížila/zrychlila rychlost indexace obsahu.

  4. Dobrý den.
    Váš plugin jsem vložil, ale nikde jsem ho po nainstalování nenašel, takže nejde ani vložit to co jste psal že se má vložit, takže zase odinstaluji. Smůla.

  5. A když se to dá přes htaccess tím pádem se každý požadavek kontroluje – nezpomaluje to poté návštěvníkovi zobrazení stránky o nějakou tu milisekundu?

    1. Pravidla pro htaccess se prodádí přímo na apache serveru, takže by měla být extra rychlá. Teoreticky by to opravdu zpomalovat mohlo. Nicméně kdyby například přišlo v jednu chvíli 5 robotů a jeden reální uživatel, tak by php muselo vykreslit 6 stránek najednou. Kdyby se těch 5 nežádoucích robotů utnulo v zárodku, tak php bude mít veškerý výpočetní výkon na renderování stránky.

      Nicméně je to všechno hypotetické, nějaké performance testy jsem nedělal a ani nenašel.

Comments are closed.