Řízení přístupu vyhledávačům

zejména pomocí souboru robots.txt

Robots.txt - Rozšíření robots.txt - Poznámky v robots.txt - Meta robots - Zákaz sledování odkazu rel="nofollow" - Neodkazovat odkazem

Autoři stránek mohou nastavit, aby vyhledávače na jejich web nechodily nebo aby chodily jenom některé a někam. Nejčastějším důvodem pro tato opatření bývá velké zatížení linky nebo choulostivost informací. Existují tři základní způsoby, jak to udělat:

  1. Pro celý web najednou souborem robots.txt
  2. Pro každý soubor zvlášť pomocí meta tagu v hlavičce
  3. Pro konkrétní odkaz atributem rel="nofollow"

Pokud zde něčemu nerozumíte, přečtěte si napřed, jak fungují vyhledávače.

Robots.txt

Každý robot, který přijde prohledávat váš server, by se měl napřed podívat do souboru robots.txt, zda nemá zakázaný vstup.

Název souboru robots.txt musí být psán malými písmeny a soubor musí být umístěn v kořeni webu. To jest hned za .cz/ nebo .com/. Například na tomto webu má robots.txt adresu http://www.jakpsatweb.cz/robots.txt.

Soubor robots.txt je obyčejný textový soubor, dá se vytvořit třeba v poznámkovém bloku. Jednotlivé řádky souboru robots.txt říkají, který robot (User-agent) kam nesmí (Disallow).

Příklady zápisu robots.txt

User-agent: *
Disallow: /php/

Význam: všichni roboti (to je ta hvězdička) nesmějí do adresáře /php/, protože řetězcem "/php/" vlastně začíná cesta souborů v tomto adresáři). Nebo:

User-agent: Googlebot
Disallow:

User-agent: Gulliver
Disallow: /

Takový zápis říká, že Googlebot smí všude (to je to prázdné místo za disallow) a Gulliver nikam (to je to lomítko). Všimněte si povinného prázdného řádku mezi položkami. Nebo jiný příklad:

User-agent: *
Disallow: /cgi-bin/
Disallow: /in

Tento zápis zakázal všem robotům (hvězdička) vstupovat do adresáře /cgi-bin a načítat stránky, které začínají řetězcem "in". Takže třeba info.html, index.html, interni/ a podobně. To je mimochodem i přesná definice položky Disallow: zakazuje sledovat cesty, které začínají vypsaným řetězcem.

Všimněte si, že za jedním řádkem User-agent se může vyskytovat více řádků zákazů. Také dejte pozor na lomítko na začátku zakazované adresy -- musí tam být, protože lomítkem začínají všechny cesty k souborům. Proto zápis

User-agent: *
Disallow: /

znamená, že žádný robot nesmí nikam, protože každá cesta začíná lomítkem, a je tedy zakázaná.

Výchozí nastavení je vše povoleno

Pokud soubor robots.txt neexistuje, berou to roboti tak, že smějí všude. Neexistující nebo prázdný soubor robots.txt je totéž jako následující zápis:

User-agent: *
Disallow:

Čili všem robotům (hvězdička) je povoleno vše (prázdné místo). Takovýto soubor robots.txt nemá cenu zakládat.

Přesto doporučuji soubor robots.txt založit, i kdyby měl zůstat prázdný. Pokud totiž na serveru funguje nějaká hezká chybová stránka 404, může vyhledávač místo robots.txt dostat tuto chybovou stránku, kterou špatně pochopí, a z toho může být problém.

Pokud na váš web vyhledávací roboti nechodí, tak si nastavením robots.txt moc nepomůžete. Robots.txt umí zakazovat; ale neumí žádným způsobem roboty přivolávat.

Hvězdička se nedědí

Mějme následující zápis:

User-Agent: *
Disallow: /en/

User-Agent: Googlebot
Disallow: /cs/

Zápis říká, že žádný robot nesmí do adresáře /en/ a že GoogleBot nesmí do adresáře /cs/. Teď přijde kontrolní otázka: může GoogleBot do adresáře /en/?

Ačkoli by se mohlo zdát, že GoogleBot patří do množiny všech robotů, a tedy do adresáře /en/ nesmí, je to jinak. Tím, že v robots.txt GoogleBot někde zmíníte, přestávají pro GoogleBot platit pravidla platící pro * (pro všechny User-Agenty).

Takže GoogleBot ve výše uvedeném příkladu do adresáře /en/ smí! Má-li to fungovat tak, jak by to fungovalo při dědění hvězdičky, musí se napsat:

User-Agent: *
Disallow: /en/

User-Agent: Googlebot
Disallow: /en/
Disallow: /cs/

Pravda, je to trochu ukecanější, ale tak to je.

User-agent

Co se za User-agent dá psát kromě hvězdičky? Jméno robota. Ale nemusí se podobat jménům služby a já těch jmen moc neznám. Informace se dají najít na stránce http://www.robotstxt.org/db.html  (anglicky).

Pro český web má smysl psát pravidla pro následující user-agenty:

Pro anglicky nebo německy psaný web je dobré ještě přidat Yahoo a MSN search:

např. zakázání cgi skriptů pro robota Yahoo:

User-agent: Slurp
Disallow: /cgi-bin/

Subdomény a protokoly

Jestliže máte na své doméně 2. úrovně nějaké subdomény, je potřeba na každou subdoménu nahrát vlastní nový robots.txt (tedy samozřejmě jen pokud na těch subdoménách chcete něco zakazovat). Neznám žádný způsob, jak víc subdomén řídit jedním souborem robots.txt.

Jestliže máte stránky zpřístupněné na protokolu https i na protokolu http, pamatujte, že roboti chápou stránky za https tak, jako by to byla jiná subdoména. V takovém případě je tedy potřeba mít také dva různé soubory robots.txt, i když chcete, aby se roboti k oběma stavům chovali stejně.

Problémy

Zpřístupnění offline

Když Internet Explorer stahuje soubory pro prohlížení offline, tak se dívá na robots.txt a zdá se, že jeho omezení také respektuje. Pokud chcete, aby si vás čtenáři mohli číst offline na notebooku v autobuse (jako to dělám já), tak nedělejte robots.txt moc restriktivní. Nevím, jestli to ještě platí, kontroloval jsem to naposledy asi ve verzi 5.

Rozšíření robots.txt

Konstrukce Allow

Novější návrhy robots.txt (zatím nikoli standard ani specifikace) dovoluje nějaké zakázané URL opět povolit. Pokud chcete  například zakázat JyxoBotu procházení celého webu, ale povolit mu adresář /stranky/, zapíše se to takto:

User-Agent: Jyxobot
Disallow: /
Allow: /stranky/

Konstrukci Allow podporuje Google, Seznam a možná i další roboti (nevím), nepatří ale do původní specifikace.

Jako-regulární znaky v robots.txt

Googlebot i Seznam chápe v konstrukci Disallow hvězdičku * jako zástuný znak, který nahrazuje libovolný počet znaků. Dolar $, který znamená konec adresy. Příklad:

User-Agent: *
Disallow: /*.php$

Zakážete stahování všech souborů, jejichž adresa končí na ".php" (a začíná jakkoliv). Nebo

User-Agent: Seznambot
Disallow: /*12

Zakáže Seznamu stahovat stránku, jejíž URL kdekoliv obsahuje dvanáctku. Uvědomte si, že základní robots.txt jakoby obsahuje hvězdičku na konci vždy.

Nebo

User-Agent: Googlebot
Disallow: /komentare/$

Zakáže stahování výchozího dokumentu v adresáři /komentare/, ale všechny ostatní soubory v adresáři /komentare/ mohou být stahovány.

Asi nejlepší informace o zpracování robots.txt v Googlebotovi.

Poznámky v robots.txt

Každý řádek v robots.txt, který začíná křížkem (znakem #), se považuje za poznámku a bude kompletně ignorován. Nepočítá se ani jako prázdný řádek.

# Tohle je komentář a bude ignorován
User-Agent: *
Disallow: /asdf

Proč zmiňuji takovou blbost, jako je komentář? Protože zápisy v robots.txt dopočuji podrobně komentovat. Když to neuděláte, nebudete za pár měsíců vědět, proč se do některých adresářů vyhledávače nesmějí dívat. Je sice pravda, že robots.txt jsou soubory veřejně dostupné, a tak byste tam neměli psát žádná tajemství, ale lepší je jeden řádek komentáře než budoucí nejistota. Když nekomentujete svoje skripty, tak můžete jejich funkci pochopit přečtením kódu. Pokud si ale nedáte komentář k robots.txt, nemáte absolutně šanci později pochopit, proč tam který zákaz je.

Meta robots

Meta tag v hlavičce HTML stránky umožňuje zakázat robotům jednak indexování obsahu, jednak sledování odkazů. Důvody pro takové zákazy jsou dosti řídké, leda snad má smysl zakázat indexování vnitřku některých rámů (typicky stránka s menu: noindex, follow).

Do hlavičky se v HTML napíše tag:

<meta name="robots" content="noindex, nofollow">

Přípustné hodnoty:

noindex
Obsah stránky nebude indexován
index
Obsah stránky bude indexován (normální hodnota)
nofollow
Odkazy nebudou sledovány
follow
Odkazy budou sledovány (normál)
all
vše povoleno, tedy jako index, follow

Musí se to psát do každé stránky znova (na hromadné zákazy je určen robots.txt).

Další možnou hodnotou, kterou respektuje Google, je hodnota noarchive. Zabrání poskytnutí stránky z cache Google. Sice se do ní uloží, ale pouze pro účely indexace (nenabídne se archiv).

Ještě musím zmínit, že opět ne všichni roboti to berou na vědomí. Např. Jyxo.cz meta tagy robots, dokud fungovalo, nerespektovalo.

Zákaz sledování odkazu rel="nofollow"

Google počátkem roku 2005 oznámil, že při vyhodnocování důležitosti stránek nebude brát v úvahu odkazy, které obsahují atribut rel="nofollow". Mějme modelovou situaci, kdy budete chtít někoho pomluvit, ale přitom byste zároveň museli odkázat na jeho stránky. Tím by se jeho stránkám zvyšoval rank. Takže takhle:

<a href="http://pavlova-stranka" rel="nofollow">Pavel je debil</a>

V praxi jsem ověřil, že Google tento zápis respektuje minimálně tím, že odkazující stránku neuvádí mezi odkazujícími cílové stránky (operátor link:).

Měl by to respektovat i MSN a Yahoo. Důvod pro zavedení byl údajně komentářový spam. Seznam nofollow respektuje.

Otázka je, jak se implementace mění časem. Google v minulosti prohlásil, že ačkoli odkaz s nofollow nesleduje a nepočítá ve prospěch cílové stránky, zároveň ho zcela neignoruje a nějak ho zahrnuje do výpočtů. Chcete-li si dohledat podrobnosti, hledejte termín "pagerank sculpting".

Neodkazovat odkazem

Tohle už je pro pokročilé, takže to případně přeskočte.

Níže uvedené informace platily přibližně do roku 2015, dokud Google neinterpretoval javascript. V roce 2017 se má za to, že Google interpretuje veškerý javascript, takže tahle metoda pravděpodobně nebude fungovat. Těžko říct, jak je to s formuláři.

Odkaz se dá zapsat javascriptem. Pokud odkaz není zapsaný přímo v HTML zdroji, robot ho nevidí, protože javascript neinterpretuje.

Vyhledávače si (zjednodušeně řečeno) sáhnou pro obsah každého URL, na které někde najdou odkaz. Pro provozovatele větších webů občas nastávají problémy toho typu, že vyhledávače na jejich webu znají sice hodně URL, ale obsah těchto URL je stejný nebo hodně podobný. Konkrétně mám na mysli třeba stovky variant různě setříděných, ale jinak stejných výpisů z databáze apod. Potom jsou tyto stránky z vyhledávání kvůli podobnostem vyřazovány nebo se jim tříští rank. V takovém případě je dobré různá taková URL vyhledávačům nějak znepřístupnit.

To ale často nejde. Zakázání přes robots.txt nejde použít kvůli složitým URL (parametry za otazníkem se do robots.txt špatně vypisují, některé vyhledávače je ignorují) a metatagy moc užitečné nejsou. Pro takové případy se hodí javascriptové odkazy nebo ještě lépe odkazy tvořené postem formuláře.

Celý vtip spočívá tedy v tom, že se URL nezakáže, ale utají.

Javascriptový odkaz

Jak vypadá javascriptový odkaz:

<a href="#" onclick="location.href='skutecna-adresa.html'">javascriptový odkaz</a>

nebo

<span style="color: blue; text-decoration: underline;" onclick="location.href='skutecna-adresa.html'">javascriptový jako-odkaz</span>

Javascriptové odkazy jsou obecně velmi pitomá věc, takže to používejte fakt až v krajní nouzi. Mezi nevýhody patří nemožnost použít pravé tlačítko, nefunkčnost při vypnutém javascriptu nebo špatná údržba takové stránky. Nejčastěji citovaná nevýhoda je to, že přes takový odkaz neprojde robot vyhledávače. To je ale přesně důvod, proč zde tento postup zmiňuji!

Přibližně od roku 2009 tato metoda není zcela spolehlivá, protože roboti ve snaze najít co nejvíc obsahu interpretují javascript. Dělají to kvůli tomu, aby našly stránky, jejichž autoři nezamýšleli nic utajit. Naneštěstí to má ale vliv i na ty, kteří utajovat chtěli.

Dejte si pozor, ať se odkazování pomocí javascriptu nedá ze strany vyhledávačů chápat jako zakázaná praktika (pokud použijete ten <span>, tak to je vcelku v klidu).

Odkaz tvořený postem formuláře

<form action="cil-odkazu.php" method="post">
<input type="hidden" name="parametr" value="hodnotaParametru">
... případné další skryté inputy
<input type="submit" value="text odkazu" class="jakoodkaz">
</form>

Všechny parametry odkazu se předávají ve skrytých (hidden) inputech. Metoda post zaručí, že se parametry odešlou odděleně od http požadavku, nebudou tedy vidět v adrese. Možná si říkáte, k čemu je ten post dobrý -- vyhledávače přece formuláře neodesílají. Obecně vzato ano, dá se použít i metoda get, ale při použití postu je jistější, že na cílovou stránku nikdo neodkáže.

Z celého formuláře je vidět pouze odesílací (submit) tlačítko, které se dá ostylovat tak, aby vypadalo jako odkaz (což většinou ani není nutné). Nebo se namísto type="submit" dá použít obrázkové odesílání:

<input type="image" src="obrazek.gif">

 

Reklama

www.webhosting-c4.cz, extra rychlý SSD webhosting s doménou v ceně
o tvorbě, údržbě a zlepšování internetových stránek

Návody HTML CSS JavaScript Články Ostatní

Základy Prvky stránek Tvorba webu

Jak psát web píše Yuhů, Dušan Janovský. Kontakt.