Jeden a ten samý obsah na různých URL -- tedy duplicita -- je principiálně špatná věc, to už jsem vysvětloval. Některým duplicitám se ale vyhnout nedá, jsou to přirozené duplicity.
Přirozené duplicity - Kanonizace - Link rel="canonical" - Alternativní způsoby nastavení kanonického linku - Ignorované parametry v Google webmaster tools - Povídání o slově kanonizace - Nějaké závěry o přirozených duplicitách
Tato stránka je teoretičtější. Bude-li vás nudit, přeskočte ji. Hledáte-li jen zápis kanonického linku, tady je příklad:
<link rel="canonical" href="https://www.example.com/kanonicka-stranka.html">
Přirozenou duplicitou označuji stav, kdy se na různých adresách vyskytuje stejný obsah, aniž by to autor nějak "zavinil".
Nepřirozená duplicita nevznikne sama. K jejímu vzniku je potřeba buďto neznalost nebo zlý záměr autora webu.
Možná jste si všimli, že nepřirozená duplicita je vždycky na více doménách. Oproti tomu přirozená duplicita se vyskytuje na téže doméně.
Různé vyhledávače se s přirozenými duplicitami vyrovnávají různě. Používají na to soubor algoritmů obecně nazývaných kanonizace. V Googlu se kanonizuje jinak než v Seznamu nebo v Bingu. Téměř vždy jde o proces automatizovaný. Kanonizace se povede zejména v případě přirozených duplicit (z jedné domény) a většinou se nepovede u nepřirozených duplicit (tedy těch, které jsou přes víc domén).
V Googlu probíhá kanonizace pravděpodobně takto:
Jestliže mám tedy například stránku kreta.rovnou.cz/index.html a míří na ni nějaký odkaz, Google tento odkaz započítá pro URL kreta.rovnou.cz/, které chápe jako zástupce kanonické množiny. Stejně tak do této množiny patří i URL www.kreta.rovnou.cz (bez lomítka na konci).
Pokud jde o URL s přidáním nějakého parametru za otazníkem, který nemění obsah stránky, nevím, jak se k němu Google chová a jestli jej zahrne do kanonické množiny. Zdá se mi, že spíše ano, ale spíše jen u známých parametrů typu &phpsessid= apod. Do kanonické množiny padají i aliasové subdomény jedné domény. Pokud Google zvolil za zástupce kanonické množiny špatný doménový alias, lze mu domluvit vevnitř v Google Search Consoli (Preferred domain). V Google Search Consoli se dají také nastavit ignorované parametry URL (probírám níže).
V Seznamu se kanonické linky respektují od roku 2012. V roce 2018 nasazuje zcela nová kanonizace, která to bude dělat ještě lépe. Ještě dříve (před rokem 2012) se kanonizovalo trochu primitivněji a říkalo se tomu interně normalizace. Některá vyvolená jména souborů (například index.html, index.php) jsou považována za názvy startovních souborů adresářů. Pokud se mezi novými odkazy najde URL, které se od nějakého známého URL liší pouze tímto jménem souboru, považuje se tento odkaz na novou adresu za odkaz na tu známou adresu. Stejně tak pokud se najde varianta URL bez www a s www, vezme se jedna z nich a druhá se považuje za její kanonický obraz. V případě zbytečných parametrů je situace trochu složitější. Pokud přijde první URL s nějakým parametrem, o němž je známo, že je zbytečný (phpsessid), tak se URL zaindexuje i s tímto parametrem (občas bez něj stránka nefunguje), ale každé další nové URL, které se bude lišit jen tímto parametrem, se považuje za kanonický obraz. Když přijde URL s novým zbytečným parametrem, o němž robot neví, že je zbytečný, tak adresu založí jako novou. Většinou pak adresa neprojde filtrem duplicit (to už nepatří do kanonizace) každopádně vliv odkazu se ztratí.
Význam | můj název | googlí název anglicky | googláci překládají jako |
---|---|---|---|
více stránek se stejným obsahem | kanonická množina | canonical set | sada |
stránka z množiny stejných, která bude ve výsledcích vyhledávání | zástupce kanonické množiny | canonical version, canonical page | kanonická verze, kanonická stránka |
proces hledání podobností a jejich zástupců | kanonizace | canonisation | kanonizace |
Relativní novinka (psáno v únoru 2009, aktualizace 2010) zavádí možnost říct vyhledávačům přímo v HTML kódu, který zástupce z kanonické množiny má být považován za vyvoleného zástupce. Zápis tagu v hlavičce html stránky je například tento:
<link rel="canonical" href="https://www.jakpsatweb.cz/">
Tento zápis říká vyhledávači, že
Google zpočátku doporučoval, že by se takový link měl používat pouze v rámci jedné domény (L2 domény). To dává smysl, pokud tím chtěl řešit primárně přirozené duplicity. Potom to ale odvolal a od roku 2010 se běžně používá kanonizace napříč doménami.
Dále Google doporučoval, že se obsahy musí navzájem velmi podobat.
Za href se může použít relativní i absolutní adresa.
Třeba výpis diskuse. Normálně se řadí podle data. Ale když nějaký odkaz vede na seřazení podle názvu tématu, tak by si vyhledávač zařadil do databáze v podstatě tutéž stránku, jenom jinak seřazenou. Obě stránky by zvlášť sbíraly rank i odkazy, takže by spolu v podstatě soupeřily, místo aby si pomáhaly. Pokud na stránku řazenou podle tématu umístím kanonický link mířící na stránku řazenou podle data (což je ta, kterou chci, aby vyhledávač indexoval), tak vyhledávač bude indexovat jenom tu jednu a odkazy vedoucí na druhou bude počítat ve prospěch té první.
Dalším příkladem jsou různé termíny jednoho zájezdu, kterých bývá strašně moc. Jednotlivé stránky se liší pouze datem a cenou, tedy velmi málo. Tam je také dobré je spojit do jedné kanonické množiny.
Nebo když mám shop a prodávám mobily v různých barvách. Na všech je stejný text a liší se jen barvou. Ani tak mi nezáleží na tom, aby uživatel našel modrý mobil, spíš bych byl rád, kdyby našel hlavní stránku daného mobilu. V tom případě se na všechny stránky barevných variant vyplatí dát kanonický link vedoucí na hlavní stránku mobilu.
Mám tedy velmi podobné stránky, které chci spojit do kanonické množiny:
uzasny-mobil.php
uzasny-mobil.php?barva=vsechny
uzasny-mobil.php?barva=cervena
uzasny-mobil.php?barva=modra
uzasny-mobil.php?barva=zelena
a rozhodnu se, že zástupce kanonické množiny bude
uzasny-mobil.php?barva=vsechny
Na všechny tyto stránky tedy umístím kanonický link na to, co chci, aby byl zástupce kanonické množiny:
<link rel="canonical" href="uzasny-mobil.php?barva=vsechny">
(Samozřejmě je potřeba zkontrolovat cestu.). Vyhledávač potom bude uživatele posílat jenom na stránku, která je zástupcem kanonické množiny, a bude pro ni sčítat rank všech jednotlivých stránek množiny.
Když nemůžete nebo nechcete použít <link rel="canonical" ...> v HTML kódu, můžete ho zadat i jinak:
Proslýchá se, že Google bere ohled na <link rel="canonical" ...> zapsaný do stránky javascriptem. Pravděpodobně to bude platit pouze pro stránky, které Google javascriptem také renderuje. (Léto 2018.)
kanonický link se dá Googlu poslat přes http protokol. Pokud například udržujete složitou aplikaci, které nechcete nic přidávat do html kódu, může posloužit přidání hlavičky tak, aby ji posílal server. HTTP hlavička vypadá takto:
Link: <http://www.example.com/kanonicka-stranka.html>; rel="canonical"
Tuto hlavičku by měla posílat taková URL, která není kanonická. Když kanonická stránka ukáže http hlavičkou sama na sebe, nevadí to.
Obzvlášť užitečné je kanonizovat takto zdroje, které nejsou html stránka, například pdfka nebo wordovské dokumenty.
Nevíte-li, jak se nastavuje hlavička do HTTP protokolu, vězte, že to můžete udělat v nastavení serveru (Apache, Nginx) nebo skriptovacím jazykem (PHP, Python apod.).
Dávejte do sitemap kanonické stránky. Nedávejte do sitemap URL, které nepovažujete za kanonická. Google i Seznam berou při rozhodování, která stránka bude zastupovat daný obsah, ohled na různé signály. Umístění v sitemapě je jedním ze silných signálů (spolu s krátkostí URL, množství parametrů, interní odkazovou strukturou atd.).
Vlezte si to Google Search Console (dříve webmaster tools) a v menu Konfigurace stránek > Nastavení v oblasti Zpracování parametrů nastavte ignorované parametry.
Typicky se zde nastavují parametry jako SortBy, razeni apod., tedy způsob řazení, referer (stránka, ze které se přišlo) a podobně. Taky se jako ignorované nastavují parametry pro tisk nebo zobrazení. Když potom Google najde stránku, která má některý z uvedených parametrů, tak ji nebude indexovat, ale prohlásí si ji pro sebe za totožnou se stránkou bez onoho parametru.
Příklad: pokud nastavím v Google webmaster tools ignorovaný parametr "razeni", potom Google sloučí následující stránky do kanonické množiny, a bude je tedy chápat jako totožné:
http://www.example.com/stranka.php
http://www.example.com/stranka.php?razeni=datum
http://www.example.com/stranka.php?razeni=abeceda
Proč je to dobré nastavit: tohle přesně pomáhá Googlu stránky správně kanonizovat. Pokud náhodou vedou odkazy na různé členy kanonické množiny (třeba nějaký odkaz vede na tisk, protože na to prostě někdo odkázal), tak nastavení ignorovaného parametru způsobí, že se budou odkazy počítat pro celou kanonickou množinu. V praxi to potom je stejné, jako kdyby všechny odkazy vedly na kořen kanonické množiny.
Zmínil jsem dvě metody, jak kanonizovat přirozené duplicity. Kterou je lepší používat?
Je to asi jedno, obě metody se navzájem doplňují a nahrazují. Já raději používám Google webmaster tools. Na druhou stranu, až začne Seznam podporovat kanonický link (odhaduju to na rok 2011), bude univerzálnější pracovat s kanonickým linkem.
Když se dneska mluví o kanonizaci, myslí se tím obvykle svatořečení nějakého hodného mrtvého člověka. Kanonizace ale v jiném ze svých významů znamená ujednocení, tento význam používám v tomto článku. Původně řecké slovo κανών znamenalo rákosový prut, kterým se měřilo a který se stal standardem. Kánon tedy v přeneseném smyslu znamená standard nebo jednotnost. V ranném křesťanství vznikalo hodně povídek o různých super svatých křesťanech, ale začaly to být moc pohádky, a tak musel papež udělat ujednocení, tedy kanonizovat. Kdo potom nebyl kanonizován, už nebyl svatým, smůla.
Vyhledávače také potřebují různé stránky ujednocovat. Tedy kanonizovat.
(Protože se na rákos také hrálo, byl canon také název pro píšťalu. Když se začaly dělat pistole, říkalo se jim píšťaly, tedy kanóny. Ale to s kanonizací / ujednocováním nesouvisí.)
Jak psát web píše Yuhů, Dušan Janovský. Kontakt.