Sitemap

Sitemap je soubor nebo víc souborů, které robotům vyhledávačů říkají, jaké jsou na webu stránky. Roboti by si ty stránky sice měli umět najít sami pomocí odkazů, ale to je pro ně někdy moc pracné.

Co je sitemap

Sitemap nebo česky sitemapa je soubor s informací, na jakých URL adresách se na webu vyskytuje nějaký obsah, který autor webu považuje za hodnotný.

Sitemap je pro většinu webů zbytečnost. Používá se, až když je potřeba vyloučit chyby v crawlování webu robotem. U extrémně velkých webů je taky dobré sitemapu mít, ale pokud bude jenom tupě vyjmenovávat úplně všechna možná URL bez ohledu na kvalitu jejich obsahu, tak je taky asi na nic.

Sitemap je magie. Kvůli tomu, že se hrozně blbě testuje. Spousta lidí má na sitemap názor, ale jestli nějaké problémy sitemap řeší nebo naopak přidělává, se odpovědně skoro nedá zjistit. V případě Google lze něco vykoukat z Google Search Console.

Formáty sitemapy

Formáty sitemapy, které běžní roboti akceptují, jsou tři. Dva z nich jsou v XML, jeden textový:

  1. XML ve formátu sitemap
  2. RSS, což je XML ve formátu RSS, mRSS nebo Atom
  3. textový soubor

XML ve formátu sitemap

Jednoduchý příklad:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>https://www.example.com/prvni.html</loc></url>
<url><loc>https://www.example.com/druha.html</loc></url>
...
</urlset>

Důležité je, že adresy uvedené v <loc> musejí být absolutní, tedy včetně protokolu (https://) a domény. Nestačí třeba /prvni.html, musí se to napsat celé.

Složité příklady sitemap můžete najít na jiných webech, tady u mě ne. Přidávají tam pod tag <url> ještě tag <lastmod> ve formátu yyyy-mm-dd, což uznávám, že k něčemu může robotovi být, nebo tagy <changefreq> a <priority>, což je úplně k ničemu a nikdy to na nic nefungovalo.

RSS sitemap

To si někde najděte, pokud po tom toužíte. Vhodné asi jenom v případě, že už máte nějakým nástrojem RSS hotové a nechce se vám nic dalšího dělat.

Textový soubor

Příklad obsahu txt souboru se sitemapou:

https://www.example.com/prvni.html
https://www.example.com/druha.html
...

Prostě soupis URL adres. Jedna adresa na řádek. Hotovo facka, nic dalšího. Adresy musejí být absolutní a textový soubor musí být uložen v kódování UTF-8.

Případné ne-asci znaky v URL prý musejí být escapovány, což je obzvláště důležité pro znak &, protože ten bývá v URL často. Mám-li být upřímný, tak nevím, jestli se URL s neescapovaným & rozbijí.

Tvorba sitemapy

Jak přesně budete svou sitemapu vytvářet, strašně moc záleží na způsobu, jakým svůj web tvoříte.

Prostě si sitemap dělejte, jak chcete a umíte.

Hlavní myšlenka: měli byste vědět, jaké URL adresy na webu vlastně chcete mít. Je dobré to vědět přesně, mít to někde v datech a na základě těch dat tvořit sitemapy, které to uceleně řeknou i robotům.

Následující návod na tvorbu sitemap píšu hlavně pro sebe.

Jak dělám sitemapu já

Já jako formát většinou používám textový soubor, protože proč bych se trápil s XML.

Weby mám obvykle statické a na tvorbu jejich sitemap používám software Screaming Frog. To je instalovatelný software pro Windows, který umí bezplatně stáhnout 500 URL, což mi pro malé weby stačí. Seznam nalezených URL omezené na typ HTML si vyexportuji do CSV souboru.

Vyexportované CSV si otevřu třeba v Excelu nebo v jiném tabulkovém editoru a nalezené URL pečlivě zkontroluju. Pak sloupeček s URL překopíruju do textového souboru jmeno-webu-sitemap.txt, kterému nastavuju kódování UTF-8. Tenhle soubor si dám na web, robotovi sdělím jeho adresu a mám hotovo. Je blbé, že by se to muselo dělat znovu při každém přidávání stránky, což řeším tak, že ručně přidávám nové URL jenom na konec toho výsledného txt souboru.

Na co je potřeba ve Screaming Frogu dávat bacha: pokud na nějakou stránku nebo podčást webu nevedou žádné odkazy, Screaming Frog je z hlavní stránky nedohledá. Takové je potřeba přidat zvlášť (na oddělenou podsekci webu poslat Screaming Froga zvlášť).

Jak se sitemap sděluje robotům

Jsou zhruba tři způsoby, jak se prozrazuje robotům, kde sitemap leží:

  1. do souboru robots.txt se přidá řádek a do něj se napíše:
    Sitemap: https://example.com/jmeno-webu-sitemap.txt
    a robot si pro sitemapu časem přijde. Musí tam být absolutní adresa.
  2. sitemap se dá ručně zadat do rozhraní robotů. V případě Google je to Google Search Console, u Bingu je to Bing Webmaster Tools, u Seznamu Seznam webmaster tools a podobně.
  3. pingnutím s parametrem přes nějaký endpoint. To jsem nikdy nepotřeboval, tak to neumím.

Proč jsou všude absolutní URL

Proč se jak adresa na sitemap, tak adresy v sitemapě vždy zadávají jako absolutní adresy? Tedy celé i s https? A proč nikdy jako relativní, tedy nikdy ne jen ta část za lomítkem?

Jako robot to mám rád, protože když někdo omylem spustí kopii celého webu někde v pekle (což se stává často), tak bych jako robot crawloval zbytečně celé to peklo i s příslušenstvím a všemi jeho relativními adresami. To fakt nechci. Relativních adres se jako robot vždycky trochu bojím.

Když ale vidím v pekle odkaz na sitemapu, která se čte odněkud úplně odjinud, nebo vidím v sitemapě URL mířící na jiné hostname, řeknu si: super, tady jsem někde úplně v pekle, tohle crawlovat nemusím.

Bacha na kanonizaci, přesměrování a zákazy

Je úplně na nic dávat do sitemapy taková URL, která:

Takové adresy se stejně nezaloží do indexu vyhledávače. Když v sitemapě taková "chybná" URL budete mít, tak se sice svět nezhroutí, ale budete zbytečně hnát robota na nějaká nesmyslná místa.

Je blbost mít v sitemapě něco, co je zakázáno v robots.txt, a není ani moc chytrý nápad zakazovat indexaci stránek ze sitemapy přes meta robots noindex. Dost běžně se takové případy ale vyskytují, protože málokdo udržuje zároveň sitemapu a robots.txt.

Stejně tak nemá smysl dávat do sitemapy odkazy na jiné subdomény nebo na jiné domény. Dokonce by myslím robot neměl akceptovat ani URL s odlišným protokolem (http nebo https). Dnes samozřejmě prosím už dávejte vše na https.

Jak sitemapy testovat

Nejdůležitější vyhledávač je Google, takže v nástroji Google Search Console.

Kromě zadávání a kontrole sitemap, jestli se stahují, je důležitější koukat na jednotlivá URL v sekci Pages. Tam je třeba hlídat, jestli se do databáze robota nedostávají neexistující nebo chybná URL.

Krom toho se dají XML sitemapy validovat přes online validátory. Já to nedělám, Google Search Console mi stačí.

Seznam více sitemap a komprimování

Když máte URL moc a nevejdou se vám do jednoho souboru (Google tuším zvládne jen 50 tisíc URL v souboru), dají se dělat seznamy sitemap. Stejně tak je možné vytvořit více sitemap různými nástroji a pak je spojit dohromady. Tomu spojení se říká sitemap index. Příklad:

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap> <loc>http://www.example.com/prvni-sitemapa.xml.gz</loc> </sitemap>
  <sitemap> <loc>http://www.example.com/druha-sitemapa.xml</loc> </sitemap>
...
</sitemapindex>

V příkladu je vidět opět relativně jednoduchá struktura.

Všimněte si ale, že soubory můžou být komprimované. Na to se používá algoritmus gzip (v linuxu třeba příkaz gzip prvni-sitemapa.xml) a přípona gz. V praxi se doporučuje sekat to méně než na 50 tisíc URL, protože i po dekomprimování to musí být každá část menší než 50 MB. Komprimace se používat nemusí, ale vede to pak ke zbytečně velkým datovým přenosům (xml jsou ukecaný formát).

Jestli se do sitemap indexu dá vložit i odkaz na textovou sitemapu, nevím. Někdo to prosím zkuste a dejte mi vědět.

Sitemap s hreflang

Tohle asi přeskočte.

Za sebe říkám, že považuju hreflang za v praxi úplně nefunkční, mytickou a neověřitelnou věc, takže hreflang je ztráta času. Ale jestli si chcete vymazlit vícejazyčný web a převázat ho ozdobnou mašličkou, musíte si jednotlivé jazykové verze jednoho textu propojit přes hreflang, jinak nebudete moct ke svatému přijímání. Propojení se dělá buďto přes <link rel="alternate" hreflang="kód jazyka" href="https://example.com/adresa-překladu">, nebo se na to používají právě sitemapy s hreflang. Je to bejkárna, ale koukněte na příklad:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">

<url>
<loc>https://www.tunisko.com/jidlo.html</loc>
<xhtml:link rel="alternate" hreflang="sk" href="https://www.tunisko.com/sk/jedlo.html"/>
</url>
<url>
<loc>https://www.tunisko.com/sk/jedlo.html</loc>
<xhtml:link rel="alternate" hreflang="cs" href="https://www.tunisko.com/jidlo.html"/>
</url>

...

</urlset>

Je vidět známá struktura XML sitemapy, ale navíc tam je to xhtml:link. V <loc> uvádím postupně českou i slovenskou stránku, přičemž ke každé dávám propojení na jazykovou alternativu. Se dvěma jazyky je to pohoda, ale když je těch jazyků třeba pět, má se prý správně u každé jazykové verze odkázat na všechny další jazykové verze, takže pro pět jazyků by tam bylo dvacet propojení. No nevím, jak vy, ale mně to přijde blbě vymyšlené. To, že nevěřím, že hreflang nějak podstatněji funguje, je ještě úplně jiná problematika.  (Má občas smysl jenom pro geografické varianty téhož jazyka s různými nabídkami a měnami, např. Británie x USA, Švýcarsko x Německo.)

K čemu je sitemap

Sitemap je jen pomocný nástroj. S výjimkou opravdu velkých webů není zásadní.

Když chcete pochopit něco z oblasti vyhledávání, vždycky pomůže zkusit přemýšlet jako vyhledávač. Robot vyhledávače umí chodit po odkazech a hledat tak nové adresy. Musí to umět. Ale ne vždycky je takové hledání nových adres efektivní, proto pomáhají sitemapy. Představte si, co byste se sitemapou v roli robota udělali. Já bych si prostě ta URL, která v sitemapě vidím, zkusil založit do databáze a postupně si nasosat jejich obsah. Nic složitějšího. Pokud mi nějaké URL hodí chybu, budu se k tomu chovat jako k normálnímu chybnému odkazu: prostě si poznamenám u toho URL chybu a jedu dál.

Užitečný pojem je crawling budget. (Český překlad se nepoužívá, ale bylo by to něco jako sosací rozpočet.) Crawling budget vyjadřuje ochotu robota nějaký web crawlovat. Robot si tenhle crawling budget počítá pro každý web, protože je evidentní, že na některých webech nachází lepší věci a na jiných webech horší, pro které se vlastně nevyplácí chodit. Crawling budget je interně nějaké číslo, ale navenek je nejlepší interpretace toho čísla počet URL, které je ochoten robot z webu stáhnout a následně indexovat vyhledávačem. Celé je to složitější, ale pro začátek tahle představa stačí.

Malé weby se málokdy dostanou do situace, kdy svůj crawling budget vyčerpají. Ale může se to stát. Nejčastěji se to stává větším webům, na kterých jsou chyby, které dovolují tvořit nová nečekaná URL. Tam pak robot nasbírá milión URL a crawling budget je pryč.

Sitemap, když je udělaná dobře, pomáhá robotovi pochopit, co jsou důležité URL, na které chcete, aby robot chodil a indexoval je. Je zcela běžné, že na webech vznikají chyby, robot se zacyklí po odkazech a dokáže najít umělá URL, která autor webu vůbec neplánoval. Takové URL adresy by se v sitemapě vyskytovat neměly a jejich absence robotovi pomůže pochopit, že někam mohl zabloudit.

Při údržbě sitemap se nedá vyhnout chybám a není nutné se jimi trápit. Že se ve velké sitemapě potkávají občas kostlivci se zrůdičkami, je spíš normální než znepokojivé. Co je potřeba hlídat je jen to, aby jich tam nebylo moc.

 

Odkazy na téma sitemap:

specifikace sitemap: https://www.sitemaps.org/protocol.html

https://search.google.com/search-console/sitemaps Google Search Console, zadávání a přehled sitemap

Napsáno 23. srpna 2024 (to jsem si zase já blbec říkal, že si udělám jenom pár poznámek za deset minut, a už to píšu pět hodin, sluníčko v čudu)

 

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í

Články Katalog zdrojů SEM SEO

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