Měřeno na lokální kopii webu v web-sources/site (513 HTML stránek, 81,5 MB značkování) a na metadatech z crawlu v web-sources/meta. Každé číslo níže bylo spočítáno, ne odhadnuto. Datum měření: 2026-09-14.
| Vrstva | Důkaz |
|---|---|
| Ruby on Rails | meta/headers-home.txt:19 x-runtime: 0.560492, :18 x-request-id, cookie _session_id ve stylu Rails |
| Asset pipeline Sprockets | jediný balík s otiskem assets/auctea_application-e7c46753…js, sha256 v názvu souboru, žádné části manifestu |
| Devise + OmniAuth | formuláře v index.html odesílají na /users/sign_in, /users/invitation, /users/auth/google_oauth2, /users/auth/twitter2, /users/auth/apple |
| simple_form | class="simple_form" na každém formuláři |
| Cloudflare (jen HTML) | server: cloudflare, cf-ray: …-PRG, cf-cache-status: DYNAMIC; cdn-cgi/scripts/.../email-decode.min.js na 199 stránkách, 325 zamaskovaných adres |
| Amazon S3, bez CDN | s3.eu-central-1.amazonaws.com je v kopii webu zmíněn 17 818krát; starý bucket acb-cz.s3-eu-west-1.amazonaws.com stále obsluhuje 4 iframy |
auctea_application-*.js, 585 625 B nekomprimovaně / 149 373 B gzip, 17 řádků)| Knihovna | Výskytů | Poznámky |
|---|---|---|
| Stimulus | 202 | 99 registrovaných controllerů, 43 použitých v kopii webu |
| Turbolinks 5 | 34 (Turbolinks.controller, Turbolinks.visit, turbolinks:before-cache) | zastaralé, nejde o Hotwire Turbo |
| message_bus (Discourse) | 82 odkazů na MessageBus.* | přenos v reálném čase — viz §2 |
| PhotoSwipe | 216 pswp | lightbox |
| Dropzone | 17 / 122 dz- | nahrávání souborů |
| Tempus Dominus | 21 | výběr data a času |
| Popper | 53 | tooltipy, rozbalovací nabídky |
| jQuery | 15 | vyžaduje jej message_bus ("Either jQuery or the ajax adapter must be loaded") |
| Chart | 21 | controller a-ui-chart, 15 připojení |
| ActionCable / WebSocket | 0 | viz §2 |
Načítáno za běhu z cdnjs, verze připnuté, bez Subresource Integrity (window.Folio.RemoteScripts.Data): Bootstrap 5.3.1 (bootstrap.bundle.js — neminifikovaná verze), js-cookie 3.0.5, cleave.js 1.0.2, intl-tel-input 23.5.0, html5sortable 0.14.0. Zavaděč nastavuje crossorigin a referrerpolicy, ale balík obsahuje 0 výskytů integrity.
GTM GTM-WXXKTKZT · Facebook Pixel 345862143285023 · retargeting Seznam Sklik (c.seznam.cz/js/rc.js, rtg id 21435) · Cloudflare Turnstile (site key 0x4AAAAAAAiLyofYdEpczt0F, 460 připojení) · controller pole reCAPTCHA (5 odkazů) · Folio CookieConsent · YouTube (52 vložení) · Issuu (4) · Matterport (13 odkazů).
f-modal-toggle 1420 · f-tooltip 1026 · f-modal-close 755 · a-sales-card 480 · f-captcha-turnstile 460 · f-modal 453 · f-devise-modal-form 302 · a-ui-menu 302 · f-lightbox 185 · f-newsletter-subscriptions-form 151 · a-ui-up-arrow 151 · a-ui-settings-island 151 · a-ui-pagehide-reload 151 · a-ui-notifications 151 · a-ui-mode-switch 151 · a-ui-menu-toolbar-header-search 151 · a-ui-menu-toolbar-dropdown 151 · a-ui-header 151 · a-ui-footer 151 · a-sklik-retargeting 151 · a-sensitive-content-modal 151 · a-sales-packs-livestream-embed-overlay 151 · a-sales-packs-live-overlay 151 · a-sales-packs-live-notification-popup 151 · a-ui-clipboard 150 · a-sales-cards 91 · a-ui-bidding-now-label 79 · a-atom-images-gallery 43 · a-item-categories-card 34 · a-ui-chart 15 · a-features-submissions-loader 8 · f-leads-form 7 · a-ui-scroll-list 7 · a-ui-input-select 4 · a-artists-prices 3 · a-ui-mini-select 2 · a-ui-list 2 · a-ui-index 2 · a-ui-header-search 2 · a-sales-cards-layout-switch 2 · a-molecule-cards-full-width 2 · a-artists-alphabet-list 2 · a-site-theme-acb-ui-hero-carousel 1.
Registr obsahuje dalších 56 controllerů, které se ve veřejném HTML nikdy neobjeví — jde o backendovou část: a-operator-sales-show, a-operator-sales-show-keyboard-shortcuts, a-operator-sales-show-sound-notifier, a-auctioneer-sales-packs-show, a-presenter-sales-packs-show, a-checkout-*, a-bidder-registrations-show, a-user-verifications-show. Anonymní návštěvník si stahuje konzoli dražebníka.
Stránky jsou plně vykreslené na serveru pomocí Rails ERB. cache-control: max-age=0, private, must-revalidate znamená, že Cloudflare HTML nikdy neukládá do cache (cf-cache-status: DYNAMIC); každé zobrazení stránky je vykreslení na origin serveru trvající ~560 ms (x-runtime). Turbolinks 5 pak při vnitřní navigaci vymění <body> a znovu spustí 12,5 vložených bloků <script>, které každá stránka nese; <meta name="turbolinks-cache-control" content="no-cache"> na titulní stránce vypíná náhledovou cache, takže jediným viditelným přínosem je ušetřené opětovné parsování CSS/JS.
Cesta pro reálný čas není ActionCable. Balík neobsahuje jediný výskyt ActionCable, createConsumer, WebSocket ani /cable. <meta name="action-cable-url" content="/cable"> je pozůstatek. Živé přihazování běží na HTTP long-pollingu přes message_bus, nastaveném v balíku jako enableLongPolling:!0, enableChunkedEncoding:!0, callbackInterval:15e3, backgroundCallbackInterval:6e4, minPollInterval:100, maxPollInterval:18e4, firstChunkTimeout:3e3 — POST na baseUrl + "message-bus/" + clientId + "/poll" (jediná cesta, kterou robots.txt blokuje).
Sběrnice se spouští podmíněně: window.Auctify.ConditionalMessageBus ji zapne jen tehdy, když je přítomen [data-auctify-message-bus-required="true"]. Napříč kopií webu jde o 145 elementů proti 6 133 nastaveným na false. Cíle aktualizací jsou třídy sloužící jako háčky — a-js-message-bus-sale-update (5 458) a a-js-message-bus-live-sales-pack-update (1 018) — obnovované stažením JSON partialů z 11 endpointů window.Auctify.API_URLS a výměnou značkování.
Spodní hranice 100 ms udržuje živý dražební sál responzivní, ale jde o návrh postavený na HTTP pollingu, který nese zátěž typickou pro WebSocket: jeden otevřený požadavek na dražitele a aukci, plus opětovné stažení partialu při každém příhozu.
| Asset | Nekomprimovaně | Gzip |
|---|---|---|
| CSS (1 soubor) | 763 473 B | 96 716 B |
| JS (1 soubor) | 585 625 B | 149 373 B |
| Fonty (11 woff2) | 265 200 B | — |
| HTML titulní stránky | 221 535 B | 31 523 B |
Žádné dělení kódu. 1 JS soubor, 1 CSS soubor, 0 __webpack, 0 source map. Návštěvník, který si čte článek na blogu, stahuje konzoli operátora, Dropzone, Tempus Dominus a PhotoSwipe.
Skutečnou zátěží je značkování. Napříč 513 stránkami: 81 459 682 bajtů HTML nesoucích 3 313 264 bajtů viditelného textu — poměr značkování k textu 24,6 : 1; obsah tvoří 4,1 % bajtů. Nejhorší jsou katalogové stránky, například cs/ceny-umeni/stanislav-vajce.html s 205 KB HTML na 3 875 znaků textu (54 : 1). Průměrná stránka: 155 KB.
Rozložení bajtů titulní stránky: atributy class= 59 063 B (27 %), atributy data-* 45 068 B (20 %), 73 vložených elementů <svg> 26 449 B (12 %), vložené skripty 18 775 B (8 %). Napříč webem: 58 355 připojení data-controller (114 na stránku), 35 530 vložených SVG, 37 771 atributů style=.
Požadavky. Zhruba 60 na titulní stránce, 64 na cs/ceny-umeni.html, 57 na výpisu aukce: 1 HTML + 1 CSS + 1 JS + 1 sprite s ikonami + 2 fonty + GTM + dekodér e-mailů od Cloudflare + 47–51 obrázků, každý obrázek z s3.eu-central-1.amazonaws.com.
Obrázky. 13 893 <img> v kopii webu, 12 354 uvnitř <picture> se <source> ve WebP a záložním JPEG. Ale:
sizes. Každý srcset pracuje jen s hustotou (1x, 2x). Telefon se šířkou 360 px stahuje obrázek pro desktop.loading="lazy" — včetně hlavních obrázků nad ohybem stránky, což zdržuje LCP.width i height. Zbývajících 10 815 obrázků způsobuje posun rozvržení.fetchpriority="high".<picture> obsahující dva potomky <img> (světlý + tmavý), což je neplatné a na každé stránce se stahují obě loga.Kritická cesta. CSS blokuje vykreslení a je přednačítáno přes hlavičku odpovědi link:; JS má defer. Fonty jsou v pořádku: woff2 na vlastním serveru, font-display: swap na všech 11 řezech, dva používané řezy přednačtené. Chybí ale preconnect i dns-prefetch na s3.eu-central-1.amazonaws.com, takže první obrázek po parsování HTML platí plné DNS + TLS handshake. Nasazeno je deset statických souborů Figtree tam, kde by stačil jeden variabilní font (DMSans už variabilní je: font-weight:100 1000).
controllerů v data-* u každého elementu a 35 530 vložených SVG (použít <use> proti jednomu sprite, který už je nasazený) by odstranilo zhruba polovinu bajtů na každé stránce.
w a sizes k 10 815 responzivním obrázkům. Objem přenesených dat namobilu okamžitě klesne několikanásobně.
preconnect. Každý obrázek na webu je dnes necachovanéstažení z originu.
width/height u zbývajících 77,8 % obrázků a přestat odloženě načítat obrázekpro LCP.
must-revalidate, privatevynucuje 76 000 vykreslení na originu.
Vzorkováno v plném rozsahu na všech 513 zrcadlených stránkách, s podrobným pročtením index.html, cs/aukce.html, cs/kontakty.html, cs/nabidka-dila.html, cs/blog.html, cs/zive-aukce.html, en/auctions.html, en/contacts.html.
Orientační body. <main> se objevuje na 143 z 513 stránek (28 %) — pouze v článcích blogu Folio. Titulní stránka, každá stránka aukce a každá stránka katalogu obalují obsah do <div class="a-layout-main">. role="main" není použit ani jednou. <header role="banner"> a <footer> jsou na každé stránce; <nav> je 569krát na 513 stránkách, ale hlavní nabídka v index.html je holý <ul> bez <nav> a bez aria-label.
Odkazy pro přeskočení obsahu: 0. Uživatel klávesnice musí na každé stránce projít sedmipoložkovou nabídkou s podnabídkami, vyhledávacím formulářem a nastavovacím ostrůvkem, než se dostane k obsahu.
Nadpisy. Titulní stránka nemá <h1> — osnova dokumentu začíná na <h4> (šest titulků slidů karuselu) a pak skáče na <h2>. Napříč kopií webu 159 z 513 stránek (31 %) přeskakuje úroveň nadpisu; pozorované skoky jsou h1→h3 (24), h1→h4 (12), h2→h4 (4) v prvním vzorku a každý článek blogu začíná h1→h3.
Alternativní text. 13 893 <img>, 100 % má atribut alt, 86,7 % neprázdný. Prázdné patří obsahovým obrázkům, ne dekoracím: cs/blog.html vykresluje náhledy článků jako <img alt="" class="a-ui-image__img"> — 19 obrázků, 6 se skutečným alternativním textem (32 %).
Formuláře. 4 212 <label>, 3 355 s for= (79,7 %). Ve sdílené kostře webu je 6 id vstupních polí proti 6 hodnotám label for=, ale jen 4 odpovídající dvojice. Každý formulář nese novalidate="novalidate" (9 874 výskytů) — nativní validace je vypnutá a nahrazená JavaScriptem, přesto je v celé kopii webu 0 aria-invalid, 0 aria-describedby, 0 aria-required. Uživatel odečítače obrazovky nedostane žádné programové provázání s chybou.
ARIA. Celý použitý slovník je aria-label (2 480) a aria-hidden (30). Nula výskytů: aria-live, aria-expanded, aria-current, aria-controls, aria-modal, aria-labelledby, aria-describedby, aria-atomic, aria-selected, aria-pressed. Důsledky:
aria-live. Nevidomý dražitel se nedozví, že se cena pohnula.role="dialog" bez aria-modal a bez aria-labelledby.role="document" uvnitř těchto dialogů — zastaralý vzor, který potlačuje čtecí kurzor.data-action="click->a-ui-menu#onExpandableClick" bez aria-expanded, takže její stav není nikde vidět.Iframy. 653 celkem, 56 s atributem title (8,6 %). 51 vložení YouTube má název; rámy Matterport, Issuu a GTM ne.
Fokus. Nikde žádný kladný tabindex (dobře). :focus-visible se objevuje 4krát proti 115 pravidlům :focus; 37 deklarací outline:0 pochází z vlastního resetu Bootstrapu, který místo toho dává prstenec přes box-shadow, takže fokus je vidět, ale jeho kontrast závisí na motivu.
Jazyk. <html lang> je na 100 % stránek, cs na 273 a en na 66 ve snímku. Správně. Ale české řetězce se objevují uvnitř stránek s lang="en" (en/topicuv-salon.html obsahuje 144 českých diakritických znaků) bez vnořeného přepnutí lang.
Barevný kontrast (vypočtený, relativní jas podle WCAG 2.1):
| Dvojice | Poměr | AA běžný text (4,5) | AA velký text / UI (3,0) |
|---|---|---|---|
Značková zlatá #B18839 na bílé | 3,26 : 1 | ✗ NEPROŠLO | ✓ prošlo |
Bílá na značkové zlaté #B18839 | 3,26 : 1 | ✗ NEPROŠLO | ✓ prošlo |
Značková zlatá #B18839 na #191919 | 5,40 : 1 | ✓ prošlo | ✓ prošlo |
Tmavá zlatá #8F6B24 na bílé | 4,89 : 1 | ✓ prošlo | ✓ prošlo |
#191919 na bílé | 17,58 : 1 | ✓ | ✓ |
Odkaz #4c84fd na bílé | 3,48 : 1 | ✗ NEPROŠLO | ✓ prošlo |
Stav chyba #f0655d na bílé | 3,12 : 1 | ✗ NEPROŠLO | ✓ |
Stav úspěch #219d70 na bílé | 3,43 : 1 | ✗ NEPROŠLO | ✓ |
Stav upozornění #ff9a52 na bílé | 2,10 : 1 | ✗ NEPROŠLO | ✗ NEPROŠLO |
Tato chyba je navržená, ne náhodná: motiv deklaruje --auctify-color-over-brand-200: #ffffff a váže ji na --bs-btn-color, takže každé primární tlačítko je bílé na zlaté v poměru 3,26 : 1. A zlatá se používá jako text s natvrdo zapsaným hexem: .text-link-100{color:#B18839}, .a-brand-links a{color:#B18839}, .a-blog-articles-show-header__author{color:#B18839}. Přístupná varianta #8F6B24 v sadě tokenů existuje a k tomuto účelu se nepoužívá.
Tmavý režim převrací neutrální barvy, ale zlatou nechává beze změny — --auctify-brand-200: #B18839 je deklarována shodně v :root, [data-bs-theme="light"] i [data-bs-theme="dark"].
Hodnocení: 3 / 10. Kostra webu je dosažitelná klávesnicí a alt je vždy přítomen. Všechno ostatní selhává: žádný odkaz pro přeskočení obsahu, žádný <main> na 72 % stránek, žádný <h1> na titulní stránce, 31 % rozbité pořadí nadpisů, značková barva nesplňující AA jako text i jako text tlačítka a živé přihazování bez živých oblastí.
Strukturovaná data: nula. application/ld+json se objevuje 0krát napříč 513 stránkami. Aukční dům se 72 578 záznamy uměleckých děl a 3 772 umělci nepublikuje žádné značkování Product, Offer, Event, Organization, BreadcrumbList ani VisualArtwork.
Meta robots: nula. robots.txt uvádí, že indexace katalogu „se řídí přes rel=canonical / meta robots (ne Disallow)“. <meta name="robots"> se objevuje 0krát. Deklarovaná politika není implementována — nic neomezuje 152 702 katalogových URL. rel="next" / rel="prev" na stránkovaných stránkách umělců rovněž chybí.
Canonical. Přesně jednou na každé stránce, odkazuje sám na sebe. V rámci svého rozsahu správně.
hreflang. Přítomen na 112 z 513 stránek — jen ve větvi /cs/ceny-umeni/ a v jejím rozcestníku. 30 českých a 30 anglických redakčních stránek, všech 143 článků blogu a všech 99 stránek aukcí jej nemají. hreflang="x-default" je použit 0krát.
Meta popisky. Chybí na 280 z 483 testovaných stránek (58 %), včetně 85 z 86 katalogových stránek a 79 z 99 stránek aukcí. Z 203 přítomných jich 77 přesahuje 160 znaků.
Tituly. 375 unikátních na 483 stránkách; 192 stránek nese duplicitní titul, přičemž 16 stránek aukcí sdílí „Aukce - Exkluzivní výběr klasického a moderního umění. | 1. Art Consulting“. 162 titulů přesahuje 60 znaků; nejdelší má 236.
Open Graph. Kompletní sada značek (title, description, url, site_name, image + rozměry, twitter:card summary). Ale og:image je na 158 stránkách stále stejný statický https://www.acb.cz/fb-share.png; skutečný katalogový obrázek používají jen detailní stránky aukcí.
Politika robots.txt. Blokuje OpenAI (GPTBot, OAI-SearchBot) a každého větší SEO robota — AhrefsBot, SemrushBot, MJ12bot, DotBot, DataForSeoBot, RankActive, SeokicksBot, BLEXBot, AspiegelBot, PetalBot. Blokovat SEO nástroje je obhajitelné rozhodnutí proti scrapingu, ale zároveň to oslepí vlastní agenturu majitele a blokace GPTBot/OAI-SearchBot odstraní web z výsledků AI vyhledávání. Pro User-agent: * je zakázán pouze /message-bus/.
Návrh URL. Čisté, malými písmeny, bez diakritiky, ve všech 153 245 URL v sitemapě žádné query stringy, hloubka omezená na 4. Dobré.
Katalog a riziko obsahově chudých stránek. Sitemapa uvádí 153 245 URL (148 007 unikátních — 5 238 duplicit). 152 702 z nich (99,6 %) je cenový katalog: 3 772 stránek umělců + 72 578 stránek děl, zdvojených mezi /cs/ceny-umeni/ a /en/art-prices/. České a anglické sady URL sdílejí 73 718 z 73 731 slugů (99,98 %) — anglická větev používá české slugy.
Tyto stránky jsou obsahově chudé už ze své podstaty. Zrcadlené stránky umělců mají 129–254 KB HTML na 3 000–15 500 znaků textu a tím textem je seznam názvů děl. Ceny jsou uzamčené — vlastní popis katalogu říká, že se zobrazí „po registraci zdarma“ — a stránka umělce se seznamem 30 a více děl vykreslí řetězec „Kč“ 3krát. Dosažené ceny, jediný důvod existence katalogu, v HTML, které dostane Google, chybí. 76 000 téměř shodných stránek bez popisu, bez strukturovaných dat a bez cen na jazyk je 99,6 % indexové stopy webu a přesně ten vzor, který systémy Google pro užitečný obsah znevýhodňují.
Anglický obsah. 12 z 30 anglických stránek má mimo sdílenou kostru méně než 600 znaků obsahu. en/current-exhibition.html má 28 znaků; en/exhibition-archive.html má 23 proti 44 775 na české obdobě; en/blog.html má 0 — a přitom sitemapa uvádí 143 anglických URL blogu. Prázdné stránky jsou odkazované z hlavní nabídky a jsou indexovatelné.
Hodnocení: 3 / 10.
Přítomné (meta/headers-home.txt): x-frame-options: SAMEORIGIN, x-content-type-options: nosniff, referrer-policy: strict-origin-when-cross-origin, x-xss-protection: 0 (správná moderní hodnota), x-download-options, x-permitted-cross-domain-policies: none.
Chybějící: Content-Security-Policy, Strict-Transport-Security, Permissions-Policy, Cross-Origin-Opener-Policy, Cross-Origin-Resource-Policy.
Chybějící HSTS je podstatné u webu, který drží registrace dražitelů s osobními údaji. Chybějící CSP je strukturální věc, ne opomenutí: stránky nesou 6 418 vložených bloků <script> (12,5 na stránku) a 37 771 vložených atributů style=, takže jakákoli CSP by potřebovala unsafe-inline a nic by nepřinesla. Skutečná CSP vyžaduje přestavbu šablon.
Cookies. _session_id je secure; HttpOnly; SameSite=Lax; path=/ s platností 12 hodin. Správně.
CSRF. Meta značky Rails csrf-param / csrf-token na každé stránce, 1 831 vstupů authenticity_token. Správně.
Řízení souhlasu. Výchozí hodnoty Consent Mode v2 jsou nastaveny na denied pro všech šest signálů ještě před načtením GTM a Facebook Pixel je zneškodněn pomocí type="text/plain" data-cookiecategory="analytics", dokud jej Folio CookieConsent neuvolní. Sklik retargeting se načte až po Folio.RemoteScripts.run. Samotný kontejner GTM se načítá bez podmínky, což je běžný vzor Consent Mode. Toto je nejsilnější část souladu webu s předpisy.
Veřejný S3 bucket. Každý obsahový obrázek je obsluhován z s3.eu-central-1.amazonaws.com/auctea/ s cestou, která prozrazuje čas nahrání na sekundu přesně a UUID: /auctea/production/files/2026/09/14/12/17/57/37b4b835-…/filla_uvod.webp. Žádné podepsané URL, žádná CDN, žádná kontrola originu. Kdokoli může scrapingem projít a hotlinkovat celou knihovnu obrázků na náklady klientova datového přenosu.
Uniklé interní informace.
window.Auctify.API_URLS doručuje anonymním návštěvníkům na každé stránce mapy endpointů pro operátora, dražebníka i prezentujícího — /auctify/api/operator/sales/ID/bids.json, /auctify/api/operator/sales/SALE_ID/messages.json, /auctify/api/auctioneer/sales_packs/ID.json. Autorizace je zřejmě na straně serveru, ale útočná plocha backendu je zveřejněná.https://doader.com/ a https://doader.s3.amazonaws.com/.x-runtime a x-request-id se vracejí veřejně a prozrazují framework a časování.Dodavatelský řetězec. Pět knihoven se za běhu stahuje z cdnjs.cloudflare.com bez SRI hashů a bez CSP, která by je omezila. Jedna z nich, bootstrap.bundle.js, je neminifikovaná verze. Kompromitace cdnjs spustí libovolný kód v relaci přihlášeného dražitele.
Hygiena odkazů. 5 034 odkazů target="_blank", 0 s rel="noopener" nebo noreferrer. Moderní prohlížeče noopener implicitně doplní, takže reverse tabnabbing zmírňuje prohlížeč, ale plný referrer stále uniká do každého odchozího cíle.
Hodnocení: 4 / 10. Rails dává základy zdarma a implementace souhlasu je skutečně dobrá. Chybějící CSP/HSTS, nepodepsaný veřejný bucket a závislosti z CDN bez hashů jsou reálné problémy.
Pojmenování. Dva konzistentní jmenné prostory: a- = Auctify (aukční platforma) a f- = Folio (CMS). Oba používají důsledný BEM — 1 430 z 1 592 tříd a-* obsahuje __ nebo --. Komponenty dodržují atomické pojmenování (a-atom-text, a-atom-image-and-content, a-molecule-cards-large) a JavaScriptové háčky jsou oddělené od stylovacích tříd (a-js-message-bus-sale-update není definován v žádném CSS pravidle). Jde o ukázněný systém a je to nejsilnější signál v celé kódové základně.
Mrtvé CSS. 763 473 bajtů, 10 363 bloků pravidel, 11 370 selektorů, 8 225 různých tříd. Napříč všemi 513 zrcadlenými stránkami se používá 698 — 8,5 %. 91,5 % stylopisu je mrtvá váha při každém požadavku.
sm 586, md 586, lg 588, xl 586, xxl 586).Specificita a !important. 6 503 deklarací !important proti 10 363 blokům pravidel — 0,63 na pravidlo. 1 832 selektorů řetězí 2 a více tříd; nejhlubší mají 5 (.tempus-dominus-widget.light .time-container-second div.active.today:not(.no-highlight):before). Kódová základna, která potřebuje !important téměř ve dvou třetinách pravidel, ztratila kontrolu nad kaskádou.
Designové tokeny, zapojené jen napůl. 298 vlastních vlastností (192 --bs-, 45 --auctify-, 11 --acb-, 3 --folio-), 1 546 odkazů var(). Ale var(--auctify-brand-200) není odkazován ani jednou — značková zlatá je místo toho natvrdo zapsaná jako #B18839 na 24 místech. Vrstva tokenů existuje a obchází se, což je horší, než kdyby neexistovala: rebranding musí sáhnout na obě místa.
Responzivní systém. 490 bloků @media napříč 28 různými hodnotami breakpointů. Pět jich je od Bootstrapu; zbývajících 23 zahrnuje jednorázové hodnoty 518px, 642px, 688px, 766px, 890px, 1014px, 1138px, 1262px, 1386px. Neexistuje žádná dohoda o breakpointech.
Tmavý režim. prefers-color-scheme se objevuje 0krát. Tmavý režim je ruční přepínač ([data-bs-theme], 17 selektorů) a neřídí se operačním systémem.
Prosakování mezi tenanty. CSS s motivem ACB obsahuje **13 tříd a 2 642 bajtů pravidel a-site-theme-sypka-*** — motiv jiného tenanta Auctify, z nichž se zde nepoužívá ani jedna. Sdílený JS registruje a-site-theme-acb-ui-hero-carousel, controller specifický pro ACB, pro všechny tenanty. Izolace motivů není vynucena ani v jednom směru.
Stáří přístupu. Turbolinks 5 nahradilo Turbo v roce 2021. jQuery zůstává jen jako AJAX adaptér pro message_bus. Jediný balík Sprockets předchází rozdělení na importmap/jsbundling, které Rails 7 zavedlo v roce 2021. role="document" uvnitř dialogů je vzor z doby před rokem 2016. Nic není rozbité; všechno je o jednu generaci pozadu.
Klady, řečeno přímo: konzistentní BEM, atomický slovník komponent, skutečná vrstva tokenů (byť obcházená), JS háčky oddělené od stylů, 42 pravidel @media print, 10 bloků prefers-reduced-motion, 4 kontejnerové dotazy, žádný kladný tabindex, žádný debugger, žádné uniklé source mapy, správné příznaky CSRF a cookies.
Auctify/Auctea jako platforma: 7 / 10. Skutečný multi-tenant aukční produkt, ne motiv: 99 Stimulus controllerů pokrývajících role dražitele, operátora, dražebníka, prezentujícího a pokladny; podmíněná sběrnice pro reálný čas s rozumným backoffem; 11 JSON API endpointů podle rolí; motivovatelná vrstva tokenů; serverově vykreslovaná lokalizace cs/en; Turnstile, Devise, OmniAuth a implementace Consent Mode v2 v souladu s předpisy. Její slabiny jsou stáří (Turbolinks, jQuery, Sprockets, polling) a hygiena (91,5 % mrtvého CSS, 6 503 !important, prosakování mezi tenanty), ne schopnosti.
Konkrétní instance tenanta acb.cz: 3 / 10. Škoda je v práci specifické pro tenanta. Nula strukturovaných dat. Nula meta robots navzdory psané politice. 58 % stránek bez popisu. 192 duplicitních titulů. hreflang na 22 % stránek, žádný x-default. Dvanáct indexovatelných anglických stránek, které jsou prázdné skořápky, včetně archivu výstav a celého anglického blogu. Značková barva nesplňující WCAG AA jako text i jako text tlačítka. Žádný <h1> na titulní stránce. Katalog o 76 000 stránkách, jehož ceny v HTML nejsou.
Tento rozdíl je důležitý pro rozhodnutí o přestavbě: nahradit Auctify by znamenalo znovu postavit funkční aukční engine. Nahradit prezentační vrstvu tenanta by opravilo většinu toho, co je změřeno výše. Zjištění, která na úrovni tenanta opravit nelze, jsou poměr značkování k textu 24,6 : 1, stylopis o velikosti 763 KB, pollingový přenos a chybějící CSP — to jsou rozhodnutí platformy.
| Oblast | Hodnocení | Zdůvodnění |
|---|---|---|
| Aktuálnost technologií | 4 | Turbolinks 5 (nahrazeno 2021), jQuery ponechané kvůli message_bus, monolit Sprockets, žádné dělení kódu, polling přes message_bus místo WebSocketů (0 odkazů na WebSocket v 585 KB). Bootstrap 5.3.1 je aktuální. |
| Výkon | 2 | Poměr značkování k textu 24,6 : 1, obsahová hustota 4,1 %, průměrná stránka 155 KB, 763 KB CSS s využitím 8,5 %, 0 popisovačů w u 10 815 responzivních obrázků, 22,2 % s width/height, žádná CDN ani preconnect pro S3, ~60 požadavků na stránku. |
| Přístupnost | 3 | 0 odkazů pro přeskočení obsahu, <main> na 28 % stránek, žádný <h1> na titulní stránce, 31 % stránek přeskakuje úrovně nadpisů, 0 aria-live na webu s živým přihazováním, názvy iframů na 8,6 %, značková zlatá 3,26 : 1 na bílé. |
| SEO | 3 | 0 JSON-LD na 513 stránkách, 0 meta robots navzdory deklarované politice, hreflang na 22 % bez x-default, 58 % chybějících popisků, 192 duplicitních titulů, 152 702 obsahově chudých katalogových URL s cenami chybějícími v HTML. |
| Zabezpečení | 4 | Žádná CSP (6 418 vložených skriptů ji činí nepraktickou), žádné HSTS, žádná Permissions-Policy, 5 závislostí z cdnjs bez SRI, veřejný nepodepsaný S3 bucket, odhalená mapa API operátora a dražebníka. Cookies, CSRF a řízení souhlasu jsou správné. |
| Mobil a responzivita | 5 | Správný viewport, 490 media queries, mobilní nabídka i přepínání rozvržení fungují — ale 28 nahodilých breakpointů, srcset jen podle hustoty, takže telefony stahují obrázky pro desktop, 51 iframů s pevnou šířkou 1140 bez boxu s poměrem stran, 0 využití kontejnerových dotazů nad rámec 4 pravidel. |
| Vizuální design | 6 | Soudržná identita zlatá/téměř černá, Figtree + DMSans na vlastním serveru s font-display: swap, skutečný tmavý režim. Sráží to karusel v hlavičce titulní stránky, akcentní barva nesplňující kontrast a nikdy nepoužitý prefers-color-scheme. |
| UX a informační architektura | 5 | Čisté URL, smysluplná nabídka, funkční překryv živé aukce a štítky probíhajícího přihazování. Ale hodnota cenového katalogu je schovaná za registrací bez náhledu a položky nabídky vedou na prázdné anglické stránky. |
| Kvalita obsahu | 4 | 143 obsažných českých článků na blogu a skutečný archiv se 76 000 záznamy. Proti tomu: 12 prázdných anglických stránek, 0 vykreslených anglických článků blogu proti 143 URL v sitemapě a katalogové stránky, které jsou seznamy názvů bez textu a bez cen. |
| Udržovatelnost kódu | 4 | Ukázněný BEM s jmennými prostory a-/f- a JS háčky oddělenými od stylů — a proti tomu 91,5 % mrtvého CSS, 6 503 !important (0,63 na pravidlo), vrstva tokenů obcházená 24 natvrdo zapsanými #B18839 a motiv jiného tenanta v balíku. |
| Internacionalizace | 2 | Dvě jazykové verze zapojené na serveru a lang správně na 100 % stránek, ale hreflang na 22 %, žádný x-default, anglické URL používající české slugy (73 718 z 73 731 shodných) a 12 anglických stránek s méně než 600 znaky obsahu. |
| Analytika a konverze | 6 | GTM, Consent Mode v2 se všemi šesti signály ve výchozím stavu odmítnutými, správně řízený Facebook Pixel, Sklik retargeting, formuláře newsletteru a poptávek s Turnstile. Žádné serverové tagování, žádné viditelné měření konverzí v samotné dražební cestě. |
Celkové vážené hodnocení: 3,8 / 10.
Váhy: Výkon 15 %, SEO 15 %, Přístupnost 12 %, Udržovatelnost kódu 10 %, UX a IA 10 %, Kvalita obsahu 8 %, Zabezpečení 8 %, Aktuálnost technologií 8 %, Mobil a responzivita 6 %, Internacionalizace 4 %, Vizuální design 2 %, Analytika a konverze 2 %.
Hodnocení je nízké, protože čtyři nejsilněji vážené oblasti jsou zároveň čtyři nejslabší. Web, jehož HTML je z 95,9 % značkování, který publikuje 152 702 obsahově chudých URL bez strukturovaných dat a bez direktiv pro roboty a jehož značková barva nesplňuje kontrast jako text, nepotřebuje doladit. Platforma pod ním je v pořádku. Vrstva nad ní ne.