Jak měříme
Nejsem nezávislá autorita. Jsem člověk, který staví weby a zveřejnil, jak je měří. Stejným metrem měřím i ty svoje — a když některý propadne, opravuju web, ne pravidla.
// úsudek přiznaný narovinu
Váhy srážek jsou můj úsudek
Jiný dodavatel by je nastavil jinak a taky by to byl úsudek. Proto je zveřejňuju všechny — u každé kontroly i s důvodem a zdrojem — a nechávám na vás, ať si je zkontrolujete. Číslo, u kterého není vidět, jak vzniklo, působí svévolně, a to si nástroj hodnotící cizí práci nemůže dovolit.
Z 49 kontrol se 49 opírá o normu, doporučení tvůrců prohlížečů nebo rozhodnutí úřadu. U zbytku je ve sloupci napsané, že jde o můj úsudek. Radši to přiznám, než abych hledal zdroj na sílu.
Jak vzniká skóre
Skóre se skládá po oblastech. Každá oblast začíná na sto bodech a každý nález si z nich ukrojí svůj díl. Srážky se sčítají, takže pět problémů bolí víc než jeden a každá oprava se na čísle projeví.
Upozornění stojí polovinu toho co nález, protože „skoro v pořádku" nemá trestat stejně jako „vůbec". Sečtěte srážky u jedné oblasti a dostanete přesně to, o kolik klesla pod sto. Žádný bod nezmizí bez nálezu, který ho vysvětlí.
Celkové skóre je vážený průměr oblastí. Neváží se stejně — odpovídá to závažnosti kontrol, které v každé z nich jsou. Odhalená záloha databáze nemůže vážit tolik co chybějící ikona na záložce.
// počítáno z registru kontrol, ne psáno ručně
Čím se která oblast podílí na skóre
Jestli web najde Google a Seznam a jestli o firmě vědí, co mají. 12 kontrol.
Jestli je spojení chráněné a jestli web neprozrazuje víc, než má. 13 kontrol.
Z čeho je stránka postavená a co to dělá s rychlostí načtení. 9 kontrol.
Povinné údaje a nakládání s údaji návštěvníků. 5 kontrol.
Jestli web zvládne i ten, kdo nevidí na obrazovku nebo nemá myš. 6 kontrol.
Drobnosti, které dělají rozdíl mezi hotovým a rozdělaným webem. 4 kontrol.
Strop skóre
U 5 kontrol z 49 platí strop: skóre přes něj nemůže, ať je zbytek webu jakkoli vypiplaný. Jsou to případy, kdy by dobrá známka o webu lhala.
| Nález | Nejvyšší možné skóre |
|---|---|
| Na webu je veřejně stažitelný soubor, který tam nemá být | 20 |
| Stránka si zakazuje zobrazení ve vyhledávání | 30 |
| Web neběží na zabezpečeném spojení | 40 |
| Certifikát není platný | 40 |
| Stránka není nastavená pro mobil | 50 |
Co nikdy nevydám za chybu
U 6 kontrol z 49 umím nanejvýš upozornit. Zvenčí totiž nerozeznám rozdíl mezi vadou a jiným řešením téhož. Co neumím změřit, nevydávám za nález.
- Obrázky nemají zadané rozměry — Rozměry mohou být i v CSS — pak je tahle poznámka bezpředmětná.
- Všechny obrázky se načítají hned — První obrázek nahoře naopak nechat bez toho.
- Měřicí skript se spouští hned při načtení — Bez souhlasu měřit jen tím, co cookies nepotřebuje.
- K měřicím skriptům nevidíme lištu souhlasu — Nasadit lištu souhlasu, která měřicí skripty spustí až po kliknutí, a umožnit souhlas odvolat.
- Na webu nevidíme identifikační údaje firmy — Údaje mohou být i na podstránce s kontakty — pak je tahle poznámka bezpředmětná.
- Odkazy nejsou srozumitelné mimo kontext — Nahradit text odkazu tím, kam vede — místo „klikněte zde" napsat „ceník webových stránek".
Co neměřím vůbec
Jsem vzdálený nástroj. Vidím jen to, co vidí prohlížeč při jednom načtení stránky, na server nevidím. Přiznaná mez je poctivější než předstíraná úplnost.
- Cookies, které nasadí až JavaScript. Vidím jen ty, co přijdou ze serveru.
- Obsah za přihlášením. Měřím veřejnou stránku.
- Kvalitu designu a textů. To je názor, ne měření.
- Skutečnou návštěvnost. Na to jsou analytické nástroje.
- Barevný kontrast a ovládání klávesnicí. Bez skutečného prohlížeče by z toho byly falešné nálezy, a u přístupnosti bolí falešný nález nejvíc.
Kdy měření neplatí
Když se kontrola nedá provést, dostane stav přeskočeno a do skóre se nepočítá. Netvářím se, že je něco v pořádku, ani že to selhalo. Stává se to hlavně u webů, které se skládají až v prohlížeči, a u měření, které zablokuje ochrana serveru. Zablokované měření je „nezměřeno", ne špatné skóre.
Proč se výkon liší od Googlu
Obě čísla se jmenují výkon, ale měří každé něco jiného. Google měří skutečné načtení v jednom konkrétním okamžiku, takže při každém spuštění vyjde trochu jinak. Já se ptám na to, z čeho je stránka postavená — kolik souborů si vyžádá, jestli je server komprimuje, v jakém formátu jsou obrázky. To se opakovaným měřením nemění.
Číslo od Googlu se do mého skóre nepočítá. Ukazuju ho vedle jako informaci navíc. Kdyby vstupovalo do skóre, dvě měření hodinu po sobě by dala jiné číslo, přestože se na webu nic nezměnilo.
Jak se chovám k měřenému webu
- Hlásím se identifikovatelnou hlavičkou
TomasMikulaAudit/1.0s odkazem sem, aby mě firewall nemusel blokovat naslepo. - Posílám jen požadavky na čtení veřejných adres. Nic nezkouším odesílat, nehádám hesla a neobcházím ochrany.
- Jedno měření vyvolá řádově tolik požadavků jako jedna lidská návštěva.
- Bezpečnostní nálezy u jmenovaného webu nikdy nezveřejňuju. Vidí je jen ten, kdo měření spustil.
- Nechcete, abych váš web měřil? Napište mi a doménu vyřadím včetně historie měření. Platí to i preventivně.
// všech 49 kontrol i s vahami
Kompletní registr kontrol
Sloupec „srážka" říká, kolik ze sta bodů dané oblasti nález ukrojí. Čísla se mezi oblastmi nesčítají, každá má vlastní stovku.
Vyhledatelnost
| Kontrola | Srážka | Doloženo |
|---|---|---|
|
Stránka nemá použitelný titulek
Titulek je ten modrý řádek ve výsledcích vyhledávání. Bez něj si ho Google složí sám z náhodného textu na stránce a málokdy trefí to, čím se firma živí. |
−10 | zdroj |
|
Chybí popis stránky pro vyhledávače
Popis je text pod odkazem ve vyhledávání. Je to jediná reklama, kterou máte zdarma, a rozhoduje o tom, jestli návštěvník klikne na vás nebo na konkurenci o řádek níž. |
−8 | zdroj |
|
Stránka neurčuje svou hlavní adresu
Tatáž stránka bývá dostupná na víc adresách — s lomítkem i bez, s parametry z reklamy. Bez canonical je vyhledávač bere jako různé stránky a sílu odkazů dělí mezi ně místo aby ji sečetl. |
−8 | zdroj |
|
Web žije na dvou adresách zároveň
Adresa s www a bez www jsou pro vyhledávač dva různé weby. Google mezi ně rozdělí návštěvnost i sílu odkazů místo aby je sečetl na jedné, a web se umísťuje hůř, než by musel. |
−14 | zdroj |
|
Nezabezpečená adresa nevede na zabezpečenou
Když web odpovídá na http i https, existuje každá stránka dvakrát. Návštěvník navíc může skončit na nešifrované verzi, kde je vidět, co odesílá. |
−10 | zdroj |
|
Chybí soubor robots.txt
Vyhledávač si ho vyžádá jako první soubor na webu. Bez něj nemá kde najít odkaz na mapu stránek a nedá se mu říct, co procházet nemá. |
−5 | zdroj |
|
Stránka si zakazuje zobrazení ve vyhledávání
strop 30
Stránka říká vyhledávačům, ať ji vynechají. Ve výsledcích se nikdy neobjeví, ať je jakkoli dobrá. Nejčastěji je to pozůstatek z doby, kdy se web teprve stavěl a nikdo to po spuštění nesundal. |
−16 | zdroj |
|
Chybí mapa stránek
Mapa stránek je seznam všech adres webu. Bez ní musí vyhledávač stránky najít proklikáním a na ty, na které nevede odkaz z hlavní navigace, obvykle nedojde. |
−7 | zdroj |
|
Web neposílá vyhledávačům strukturované údaje o firmě
Strukturovaná data říkají vyhledávači strojově, že jde o firmu, kde sídlí, kdy má otevřeno a jaký má telefon. Bez nich si to musí dohadovat z textu a v bočním panelu se pak neobjeví nic. |
−6 | zdroj |
|
Stránka neurčuje, v jakém je jazyce
Bez určení jazyka prohlížeč nenabídne překlad, čtečka pro nevidomé přečte češtinu anglickou výslovností a vyhledávač si musí jazyk hádat z textu. |
−3 | zdroj |
|
Stránka nemá jeden hlavní nadpis
Hlavní nadpis říká vyhledávači i čtečce, o čem stránka je. Když chybí nebo jich je několik, není z čeho poznat hlavní téma stránky. |
−5 | zdroj |
|
Když někdo web sdílí na sítích, náhled bude prázdný
Facebook, LinkedIn i Messenger berou náhled z údajů og:. Když chybí, ukáže se holý odkaz bez obrázku a popisu — a na takový nikdo neklikne. |
−6 | zdroj |
Zabezpečení
| Kontrola | Srážka | Doloženo |
|---|---|---|
|
Web neběží na zabezpečeném spojení
strop 40
Bez https vidí každý na trase, co návštěvník na webu dělá a co odesílá ve formuláři. Prohlížeče takový web označují jako nezabezpečený a Google ho ve výsledcích upozaďuje. |
−19 | zdroj |
|
Certifikát není platný
strop 40
Prohlížeč před vstupem na web zobrazí červenou stránku s varováním. Drtivá většina návštěvníků se v tu chvíli otočí a odejde ke konkurenci. |
−15 | zdroj |
|
Certifikát brzy vyprší
Až certifikát vyprší, začne prohlížeč místo webu ukazovat varování. Stane se to obvykle v nejnevhodnější chvíli a majitel se to dozví od zákazníka. |
−4 | zdroj |
|
Prohlížeč si nepamatuje, že sem má chodit jen zabezpečeně
Bez této hlavičky se první návštěva vždy zkusí přes nezabezpečené http. V tom okamžiku jde spojení odposlechnout a přesměrovat jinam. |
−6 | zdroj |
|
Prohlížeč si smí domýšlet typ souborů
Bez této hlavičky si prohlížeč hádá, co mu server poslal. Nahraný obrázek, ve kterém je schovaný skript, tak může spustit jako skript. |
−4 | zdroj |
|
Web jde vložit do cizí stránky
Útočník může web zobrazit ve svém rámu, překrýt ho průhlednou vrstvou a nechat návštěvníka klikat na něco jiného, než si myslí. |
−6 | zdroj |
|
Web nemá určeno, odkud se smí načítat obsah
Bez pravidel může na stránce běžet skript odkudkoli. Když se někdo dostane do webu nebo do cizí knihovny, kterou web používá, nic mu nebrání spustit vlastní kód. |
−7 | zdroj |
|
Pravidla pro obsah mají otevřená zadní vrátka
Web sice určuje, odkud se smí načítat obsah, ale nechal si v tom výjimku. S 'unsafe-inline' u skriptů projde jakýkoli kód vepsaný do stránky — což je přesně to, co se při útoku podstrčí. Politika s takovou výjimkou chrání jen zdánlivě. |
−6 | zdroj |
|
Web prozrazuje cizím stránkám, odkud návštěvník přišel
Při odchodu na cizí web se ve výchozím nastavení posílá celá adresa včetně parametrů. Ty někdy nesou údaje, které cizí stránce nepřísluší. |
−2 | zdroj |
|
Server hlásí do světa svou verzi
Přesná verze softwaru je pro útočníka první informace, kterou hledá — podle ní vybere, který známý útok zkusit. Neříkat ji nic nestojí. |
−3 | zdroj |
|
Na webu je veřejně stažitelný soubor, který tam nemá být
strop 20
Zálohy databáze a konfigurační soubory obsahují hesla a údaje zákazníků. Kdokoli si je může stáhnout — stačí uhodnout název, a ty se hádají ze seznamu o pár desítkách položek. |
−17 | zdroj |
|
Formulář odesílá data nezabezpečeně
Co člověk napíše do formuláře, jde po síti otevřeně. Prohlížeče u takového formuláře zobrazují varování přímo u tlačítka Odeslat. |
−7 | zdroj |
|
Server domlouvá spojení zastaralým způsobem
Verze TLS 1.0 a 1.1 mají známé slabiny a od roku 2020 je hlavní prohlížeče odmítají. Návštěvník s novým prohlížečem se na takový web nemusí vůbec dostat. |
−4 | zdroj |
Výkon
| Kontrola | Srážka | Doloženo |
|---|---|---|
|
Stránka si vyžádá hodně samostatných souborů se styly a skripty
Každý soubor je samostatný požadavek na server. Na mobilním připojení stojí i prázdný požadavek desítky milisekund a načtení se natáhne dřív, než se stihne cokoli ukázat. |
−14 | zdroj |
|
Server neposílá stránku zabalenou
Text se komprimuje na pětinu až desetinu velikosti. Bez komprese se přenáší několikanásobek toho, co by musel, a na mobilních datech je to znát okamžitě. |
−14 | zdroj |
|
Prohlížeč si nesmí nechat styly a skripty v paměti
Bez pokynu ke kešování stahuje vracející se návštěvník tytéž soubory znovu při každé návštěvě. Druhé otevření webu je pak stejně pomalé jako první. |
−10 | zdroj |
|
Obrázky jsou ve starých formátech
Formát WebP je při stejné kvalitě zhruba o třetinu menší než JPEG. U webu s fotogalerií to dělá megabajty, které návštěvník na mobilu stahuje zbytečně. |
−10 | zdroj |
|
Obrázky nemají zadané rozměry
jen upozornění
Bez rozměrů prohlížeč neví, kolik místa má nechat, a při načtení obrázku obsah poskočí. Návštěvník v tu chvíli často klikne na něco jiného, než chtěl. |
— | zdroj |
|
Všechny obrázky se načítají hned
jen upozornění
Obrázky ze spodku stránky se stahují zároveň s tím, co je vidět nahoře, a berou jim přenosovou kapacitu. První obrazovka se tím zdrží. |
— | zdroj |
|
Stránka je na jedno otevření hodně těžká
Každý megabajt navíc je čekání na mobilních datech i účet za přenos. Návštěvníci odcházejí ještě dřív, než se první obrazovka vykreslí. |
−14 | zdroj |
|
Stránka stahuje hodně řezů písma
Každý řez je samostatný soubor o desítkách až stovkách kilobajtů. Písmo přitom blokuje vykreslení textu, takže než dorazí, kouká návštěvník na prázdno. |
−8 | zdroj |
|
Než se stránka vůbec ukáže, čeká na načtení souborů
Styly a skripty v hlavičce zastaví vykreslování, dokud se nestáhnou. Návštěvník mezitím kouká na bílou stránku, i když je obsah dávno na cestě. |
−12 | zdroj |
Zákony a soukromí
| Kontrola | Srážka | Doloženo |
|---|---|---|
|
Písmo se načítá ze serverů Googlu
Při načtení písma odejde IP adresa návštěvníka Googlu do USA bez jeho souhlasu. Zemský soud v Mnichově za to v roce 2022 přiznal odškodné a od té doby to řeší i české weby. |
−30 | zdroj |
|
Měřicí skript se spouští hned při načtení
jen upozornění
Analytika a reCAPTCHA nasazují cookies a posílají údaje o návštěvníkovi ještě dřív, než stačí cokoli odsouhlasit. Zákon o elektronických komunikacích přitom žádá souhlas předem. |
— | zdroj |
|
K měřicím skriptům nevidíme lištu souhlasu
jen upozornění
Když web nasazuje cookies pro měření, musí si nejdřív říct o souhlas. Bez lišty je to sběr údajů bez právního titulu. |
— | zdroj |
|
Chybí odkaz na zpracování osobních údajů
Každý web s formulářem nebo měřením musí návštěvníkovi říct, co s jeho údaji dělá. Bez toho nemá zpracování oporu a je to první věc, na kterou se při kontrole ptají. |
−18 | zdroj |
|
Na webu nevidíme identifikační údaje firmy
jen upozornění
Podnikatel musí na svých stránkách uvádět jméno, sídlo a IČO. Kromě zákonné povinnosti je to pro zákazníka první signál, že za webem stojí skutečná firma. |
— | zdroj |
Přístupnost
| Kontrola | Srážka | Doloženo |
|---|---|---|
|
Obrázky nemají popis pro čtečku
Nevidomý návštěvník slyší místo obrázku jen název souboru. Popis navíc čte vyhledávač — bez něj web přichází o pozice ve vyhledávání obrázků. |
−23 | zdroj |
|
Formulářová pole nemají popisek
Bez popisku čtečka řekne jen „textové pole" a návštěvník neví, co má vyplnit. Nápis uvnitř pole nestačí — po začátku psaní zmizí. |
−20 | zdroj |
|
Stránka není nastavená pro mobil
strop 50
Bez tohohle jednoho řádku zobrazí mobil stránku jako zmenšenou verzi pro počítač. Návštěvník musí přibližovat a posouvat do stran — a víc než polovina lidí chodí na weby z mobilu. |
−28 | zdroj |
|
Chybí odkaz na přeskočení menu
Kdo web ovládá klávesnicí — po úrazu ruky, se slabým zrakem, se čtečkou — musí před obsahem projít celé menu. Na každé stránce znovu. Jeden skrytý odkaz na začátku to řeší. |
−10 | zdroj |
|
Odkazy nejsou srozumitelné mimo kontext
jen upozornění
Čtečka umí přečíst seznam odkazů na stránce. Když je v něm pětkrát „zde", nemá návštěvník podle čeho vybírat. Vyhledávač z takového textu taky nic nevyčte. |
— | zdroj |
|
Nadpisy přeskakují úrovně
Nadpisy tvoří osnovu stránky, podle které se nevidomý návštěvník pohybuje. Když se z <h1> skočí rovnou na <h4>, vznikne v osnově díra a orientace se rozpadne. |
−12 | zdroj |
Doporučené postupy
| Kontrola | Srážka | Doloženo |
|---|---|---|
|
Webu chybí ikona na záložce
Ikona je to, podle čeho návštěvník najde web mezi dvaceti otevřenými panely a v záložkách. Bez ní je tam prázdný list papíru a web působí nedodělaně. |
−25 | zdroj |
|
Neexistující stránka se netváří jako neexistující
Když web na chybnou adresu odpoví „vše v pořádku", zaindexuje vyhledávač stovky prázdných stránek. Návštěvník navíc netuší, že se překlikl. |
−30 | zdroj |
|
Stránka neurčuje kódování textu
Bez určení kódování si ho prohlížeč hádá. Když se netrefí, zobrazí se místo háčků a čárek nesmyslné znaky — a je to první věc, které si návštěvník všimne. |
−20 | zdroj |
|
Odkazy v navigaci vedou na neexistující stránky
Rozbitý odkaz v hlavním menu je nejrychlejší způsob, jak návštěvníka poslat pryč. Vyhledávač si ho navíc přečte jako signál, že web není udržovaný. |
−25 | zdroj |