Eida.cz - Boj s Googlebotem

Boj s Googlebotem

19. listopadu 2013, 02:16 Eida

Kolikrát to už vypadalo, že největší noční můrou pro běžící web mohou být ošklivé crawlery z Číny, které slouží pro kdovíco a ve skutečnosti jen zatěžují celkový provoz, což kolikrát i končí naprostým zablokováním, když třeba pod náporem vyprší povolený počet SQL dotazů za hodinu. Bohužel se teď ukázalo, že daleko horší jsou potíže, které způsobí ti hodní roboti, jsou-li špatně navedeni.

Na začátku byla velmi jednoduchá myšlenka. Předělat celý a několik let zaběhnutý web takovým způsobem, aby byla jeho navigace i v URL logicky oddělena lomítky. Hezky se to řekne, pokud je k dispozici například framework, co všechno automaticky směřuje na jediný univerzální skript, který se stará o samotné routování a doplňování základní cesty před všechny odkazy. V případě opačném je to asi tisíckrát komplikovanější.

Je totiž potřeba ručně zajistit

  1. Zpětnou kompatibilitu starých odkazů s novými přesměrováním
  2. Zrušení vyhledávačem aktuálně indexovaných neplatných odkazů
  3. Správné vložení všech statických prvků s relativními cestami, tj. obrázků, stylů, skriptů…

Jako první bude vhodné promyslet strukturu, jak budou adresy vypadat a kam se budou požadavky z URL předávat. Pokud bych použil příklad přímo tady z blogu, pak adresa článku vypadá asi jako art-YYMM-title.html a novou bychom rádi, řekněme, v o něco čistším formátu /YYMM/title.html. Nic snazšího. Za předpokladu, že handler pro zobrazování článků zpracovává parametry data a názvu, pak pro novou adresu bude platit toto pravidlo:

 

RewriteRule ^([0-9]{4})/([0-9a-zA-Z-_]+).html$ reader.php?date=$1&url=$2

 

První regexp se stará o datum, druhý o název a oboje se předá jako GET požadavky skriptu reader.php. Tím sice vznikla krásná nová adresa, ale jak se vypořádat s tou starou, která je zahrabaná hluboko v indexech vyhledávačů? bylo by dobré všechny staré adresy vést v patrnosti a všem klikajícím návštěvníkům a procházejícím robotům slušně sdělit, že se adresa trvale změnila, totiž přesměrovat starou adresu na novou spolu se stavovým kódem HTTP 301 Moved Permanently.

 

RewriteRule ^art-([0-9]{4})-([0-9a-zA-Z-_]+).html$ $1/$2 [R=301]

 

Pokud nějakým nedopatřením vznikou neplatné odkazy, které už nebudou nikdy v tomto životě k dispozici, podobným způsobem je vhodné návštěvníkům a chytrým robotům sdělit, že je stránka pryč - HTTP 410 Gone. K velkému překvapení tomuhle Googlebot rozumí dobře a rychle a takto označené stránky skutečně začnou mizet z jeho indexu.

Lomítka v adrese jsou moc pěkná, ale primárně se používají pro oddělování cest mezi adresáři, není tedy možné na celém webu dále používat stejné relativní cesty - pokud se odkazy nedopočítávají samy. Asi nejsnazším způsobem je vycházet ze samotného kořene webu, všem stávajícím odkazům a nalinkovaným souborům prostě vnutit na začátek lomítko a doufat, že to nějak dopadne. Většinou je to v pohodě.

Tady nastává ten kouzelný háček a nekonečná bitva. Na začátku se zdálo, že projít celý rozsáhlý systém a upravit všechny možné cesty, kolikrát i generované, nebude úplně pohodlné. A že bude stačit nastavit tag pro celý web. Ach, to bylo ale naivní. Přestože je tento tag podporován snad všemi prohlížeči už pěknou řadu let, Googlebot, ač umí dokonce parsovat javascriptem generované cesty, tuto specifikaci bázového odkazu zcela ignoruje a neupravené odkazy považuje za lokání.

Všechno vypadalo ze začátku opravdu dobře, návštěvníci se bavili a stahovali obsah, v Analytics to blikalo jako splašené. Ale pak, jednoho rána, se v Nástrojích pro webmastery ukázalo přes 6000 chyb. Wtf, říkám si, nějaký skript špatně generuje odkazy… ale to není možné, musí tu být ještě jiné faktory.

You don't have any! (My Immortal 11p2, (c) ChazieBaka)

Nebyly. Googlebot prostě neuměl pracovat s bázovým tagem a začal procházet stránky rekurzivním způsobem, ve výše uvedeném případě článků to bylo třeba něco jako /1311/1310/nazev.html. Epic fail, stalo se, ale dá se to napravit - začít se kát a dát si tu práci s nahrazením všech možných odkazů v systému, kterých nakonec nebylo zas tolik - zvlášť, pomohla-li globálnímu nahrazení magie s regulárními výrazy.

O několik dní později se to ale bohužel stalo znovu, v hlášení bylo opět několik tisíc nedostupných dokumentů, přestože zevrubná kontrola vlastním robotem prokázala, že chyby už nikde nejsou a všechno zdánlivě funguje. Ona si totiž ta indexovací potvora postavila hlavu a nově si naindexovala a uložila všechny špatné cesty, které na základě hlášení o opravení kontrolovala znovu a znovu.

Nebylo zbytí, bylo nutné přidat další zbytečné pravidlo, aby se to nějak srovnalo.

 

RewriteRule ^([0-9a-zA-Z-_]+)/([0-9a-zA-Z-_]+)/([0-9a-zA-Z-_]+).html$ $2/$3.html [R=301]

 

To přesměruje všechny chybně naindexované stránky, naštěstí jen v jednom zanoření, na správnou cestu. Za několik dní se ukáže, jestli to skutečně zabralo, protože toto byl velmi krvavý boj s Googlebotem, který si nedal říct. Přitom by za trochu SEO šel i světa kraj, okres, území, stát, kontinent...

Eida
Tento článek přečetlo již 279 čtenářů (0 dnes).

Komentáře

Nový komentář