Kompletní SEO checklist pro rok 2025

Kompletní SEO checklist 2025 – SeoLabs.cz
SEO Checklist 2025 · Kompletní průvodce

Kompletní SEO checklist pro rok 2025

Praktický, extrémně podrobný checklist pokrývající technické SEO, on-page a obsah, Core Web Vitals, JavaScript SEO, indexaci, E-E-A-T, schema.org, mezinárodní a lokální SEO, off-page & digitální PR, migrace, analytiku, monitoring a governance. Políčka se ukládají automaticky do prohlížeče.

Exportovat .json Exportovat .pdf Exportovat .xlsx Rozbalit vše Sbalit vše Vymazat stav

doporučení s vysokým dopadem střední priorita riziko/chyba

1) Technické SEO & infrastruktura

0/0 hotovo

1.1 Základy (HTTP, indexace, sitemap)

0/0
high impact
V GSC mít jen https verzi; zkontrolovat smyčky/řetězení 301.
medium
high
high
highduplication
medium
risk
medium

1.2 Core Web Vitals & performance

0/0
highCWV
Optimalizuj hero média, critical CSS, preconnect/preload.
highCWV
highCWV
medium
high
medium
medium

1.3 JavaScript SEO

0/0
high
medium
perf
high

2) On-page, obsah, IA

0/0 hotovo

2.1 Základy on-page

0/0
high

2.2 Informační architektura & clustery

0/0
high
risk

2.3 Obsah & záměr vyhledávání

0/0

3) Crawl & indexace

0/0 hotovo

3.1 Řízení procházení

0/0

3.2 Logy & stavové kódy

0/0

4) Obrázky, video a další média

0/0 hotovo

4.1 Obrázky

0/0

4.2 Video

0/0

5) E-E-A-T, schema.org a přístupnost

0/0 hotovo

5.1 E-E-A-T

0/0

5.2 Strukturovaná data

0/0

5.3 Přístupnost (a11y)

0/0

6) Mezinárodní a lokální SEO

0/0 hotovo

6.1 International

0/0

6.2 Local SEO

0/0

7) Analytika, GSC & monitoring

0/0 hotovo

7.1 Měření

0/0

7.2 Google Search Console

0/0

7.3 Alerty a SLA

0/0

8) E-commerce specifika

0/0 hotovo

8.1 Katalog & produktové stránky

0/0

8.2 Interní vyhledávání

0/0

9) Migrace, redesign, domény

0/0 hotovo

9.1 Před migrací

0/0

9.2 Po spuštění

0/0

10) Off-page, linkbuilding & digitální PR

0/0 hotovo

10.1 Získávání odkazů

0/0

10.2 PR & obsahové kampaně

0/0

11) Governance, bezpečnost a soukromí

0/0 hotovo

11.1 Bezpečnost & právní

0/0

11.2 Procesy a odpovědnosti

0/0

Celkový progres

0/0 hotovo

Tip: Kliknutím na nadpis skupiny ji rozbalíš/sbalíš. V horní liště můžeš filtrovat jen „to-do“ položky, vyhledávat a exportovat stav jako JSON.

© SeoLabs.cz — Kompletní SEO checklist 2025
`; const blob = new Blob([html], {type:'text/html'}); const url = URL.createObjectURL(blob); window.open(url, '_blank'); }); // Export XLSX – pomocí SheetJS, fallback na CSV $('#exportXlsxBtn').addEventListener('click', async ()=>{ const rows = collectChecklistRows(); try { const XLSX = await loadXLSX(); const data = rows.map(r=>({ Sekce:r.section, Skupina:r.group, ID:r.id, Položka:r.title, Stav:r.status, Štítky:r.tags.join(' '), Poznámka:r.note||'' })); const wb = XLSX.utils.book_new(); const ws = XLSX.utils.json_to_sheet(data); XLSX.utils.book_append_sheet(wb, ws, 'Checklist'); XLSX.writeFile(wb, 'seo-checklist.xlsx'); } catch(e){ console.warn('XLSX load failed, falling back to CSV', e); const csvHead = 'Sekce;Skupina;ID;Položka;Stav;Štítky;Poznámka\n'; const csv = csvHead + rows.map(r=>[ r.section, r.group, r.id, r.title, r.status, r.tags.join(' '), (r.note||'') ].map(s=>`"${String(s).replace(/"/g,'""')}"`).join(';')).join('\n'); const blob = new Blob([csv], {type:'text/csv;charset=utf-8'}); const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = 'seo-checklist.csv'; a.click(); } }); function escapeHtml(s){ return String(s||'').replace(/[&<>]/g, c=>({"&":"&","<":"<",">":">"}[c])); } function computeSummary(rows){ let all=0, done=0, na=0; rows.forEach(r=>{ if(r.status!=='na'){ all++; if(r.status==='done') done++; } else na++; }); return {all,done,na}; } function collectChecklistRows(){ const rows = []; $$('.item').forEach(item=>{ const cb = $('input[type="checkbox"]', item); if(!cb) return; const id = cb.id || ''; const label = $('label', item)?.innerText?.trim() || ''; const tags = $$('.tag', item).map(t=>t.textContent.trim()); const note = $('.note-input', item)?.value || notes[id] || ''; const group = cb.closest('[data-group]')?.querySelector('.group-h h3')?.innerText?.trim() || ''; const section = cb.closest('section.sec')?.querySelector('.sec-title')?.innerText?.trim() || ''; const isNA = item.classList.contains('na'); const isDone = item.classList.contains('checked'); const status = isNA? 'na': (isDone? 'done':'todo'); const statusSymbol = isNA? '—' : (isDone? '✓' : '□'); rows.push({section, group, id, title: label, status, statusSymbol, tags, note}); }); return rows; } function loadXLSX(){ return new Promise((resolve, reject)=>{ if(window.XLSX) return resolve(window.XLSX); const s = document.createElement('script'); s.src = 'https://cdn.jsdelivr.net/npm/xlsx@0.18.5/dist/xlsx.full.min.js'; s.onload = ()=> resolve(window.XLSX); s.onerror = reject; document.head.appendChild(s); }); } $('#resetBtn').addEventListener('click', ()=>{ if(confirm('Opravdu smazat uložený stav všech položek?')){ state = {}; saveState(); $$('.item').forEach(item=> item.classList.remove('checked','na')); $$('input[type="checkbox"]').forEach(c=>{ c.checked=false; c.indeterminate=false; }); refreshProgress(); } }); // init // Help content mapping (title/body). Keys = checkbox ids const helpContentById = { https: { title: 'HTTPS vynucen + HSTS', body: `

Co to znamená: Všechny požadavky na http jsou přesměrovány 301 na https a je zapnutý HSTS.

Jak na to:

  • Nastav 301 z http → https na úrovni webserveru (Apache/Nginx/Cloudflare).
  • Povol HSTS (např. Strict-Transport-Security: max-age=31536000; includeSubDomains; preload).
  • Otestuj směrování a certifikát v nástroji Security Headers a SSL Labs.
` }, robots: { title: 'robots.txt – správná konfigurace', body: `

Co to znamená: Soubor neblokuje indexaci důležitých částí a obsahuje odkaz na sitemapu.

Jak na to:

  • Zkontroluj, že neobsahuje Disallow: / pro produkci.
  • Přidej Sitemap: https://domena.cz/sitemap.xml.
  • Ověř v Google Search Console > Robots.txt tester.
` }, sitemap: { title: 'sitemap.xml – pouze indexovatelné URL', body: `

Co to znamená: Sitemap obsahuje jen kanonické adresy vracející 200 a není přebujelá parametry.

Jak na to: Generuj sitemap dynamicky, validuj v GSC a sleduj stav „Success“.

` }, lcp: { title: 'LCP < 2.5s (75. percentil)', body: `

Co to znamená: Největší viditelný prvek se načte rychle pro většinu uživatelů.

Jak na to: Optimalizuj hero obrázek/video, preload fontů a critical CSS, použij fetchpriority.

` }, title: { title: 'Title – unikátní a krátký', body: `

Co to znamená: Každá stránka má jedinečný title do ~60 znaků s klíčovým slovem na začátku.

Jak na to: Zkontroluj duplicity, dodej USP a CTA pro vyšší CTR.

` }, meta: { title: 'Meta description – lákavé CTA', body: `

Co to znamená: Stručný popis do ~155 znaků podporující proklik.

Jak na to: Vlož benefity, čísla a výzvu k akci; neplést si s klíčovými slovy.

` }, h1: { title: 'H1 + hierarchie nadpisů', body: `

Co to znamená: Na stránce je právě jeden H1, pod ním logicky H2/H3.

Jak na to: Zkontroluj šablony a komponenty, oprav vícečetné H1.

` }, url: { title: 'URL – krátké a bez diakritiky', body: `

Co to znamená: Čitelné URL bez parametrů a diakritiky, oddělené pomlčkami.

Jak na to: Nastav transliteraci a canonical pro alternativy.

` }, alt: { title: 'ALT texty obrázků', body: `

Co to znamená: Popisují význam obrázku, necpou klíčová slova.

Jak na to: Použij srozumitelný popis kontextu obrázku; dekorativní mají prázdný ALT.

` }, breadcrumbs: { title: 'Breadcrumbs + schema', body: `

Co to znamená: Ukazují hierarchii a jsou značeny BreadcrumbList.

Jak na to: Implementuj navigaci v šablonách a přidej JSON-LD schema.

` }, hreflang: { title: 'hreflang – párované jazykové verze', body: `

Co to znamená: Vzájemné odkazy mezi jazykovými variantami v hlavičce/sitemapě.

Jak na to: Použij konzistentní kódy (např. cs-CZ) a x-default pro výchozí.

` } }; // Overwrite with detailed, step-by-step guides per item Object.assign(helpContentById, { www: { title: 'www vs. non‑www – kanonická varianta (detail)', body: `

Co to znamená

Stejný web může být dostupný na www.domena.cz i na domena.cz. Pro vyhledávače a link‑signály je však důležité mít jednu kanonickou host variantu a všechny ostatní vést 301 na tu preferovanou. Tím konsolidujete crawl, signály a zamezíte duplicitám.

Postup

  1. Zvolte preferovanou variantu (www nebo bez www) – držte se firemního standardu a existujících odkazů.
  2. Nastavte 301 přesměrování na úrovni webserveru/CDN/DNS proxy (Apache/Nginx/Cloudflare) pro všechny cesty.
  3. Ověřte, že 301 je jednosměrná, bez řetězení a platí i pro subcesty a assety.
  4. V GSC mějte „Domain property“ a sledujte jen kanonickou variantu v reportech.

Validace

  • Ruční kontrola: http→https a www↔non‑www varianty vrací 301 na cílovou host variantu a tu samou cestu.
  • Crawler: žádná smyčka, žádné 302/307/308 pro trvalé směry.

Tipy

  • Řešte současně s vynucením https a HSTS – přesměrování slaďte do jedné 301.
  • U subdomén (app, cdn) nastavujte pravidla odděleně, ať neovlivníte interní routy.

Časté chyby

  • 301 jen na domovské URL (musí platit pro všechny cesty).
  • Řetězení 301 (např. http→https→www) místo jedné cílené 301.
` }, https: { title: 'HTTPS vynucen + HSTS (detailní postup)', body: `

Kroky

  1. Na produkčním serveru/CF/CDN nastav 301 přesměrování z http → https pro všechny cesty a hosty.
  2. Vynucuj https i aplikačně (např. v Next.js/NGINX/Apache, v .htaccess nebo server blocku).
  3. Povol HSTS na 12+ měsíců: Strict-Transport-Security: max-age=31536000; includeSubDomains; preload.
  4. Požádej o preload na hstspreload.org (po otestování, že vše běží na https).
  5. Zkontroluj smyčky řetězení 3xx a smíšený obsah (mixed content) ve stránkách a šablonách.

Validace

  • SSL Labs: hodnocení A/A+ bez slabých protokolů.
  • Security Headers: HSTS přítomné, žádný mixed content v DevTools Console.
  • Ruční kontrola 5–10 URL (domovská, kategorie, detail, 404, sitemap) → http varianta vrací 301 na https.

Časté chyby

  • 301 jen na domovské URL (musí platit pro všechny cesty a hosty).
  • Zapomenuté subdomény bez https nebo bez HSTS.
` }, robots: { title: 'robots.txt – správná konfigurace (detail)', body: `

Co to znamená

robots.txt řídí, co mohou boti procházet. Není to nástroj pro „noindex“, ale pro řízení crawl budgetu a ochranu interních cest/assetů. Kritické CSS/JS nesmí být blokovány, jinak Google nepochopí layout.

Postup

  1. Vytvoř/zkontroluj /robots.txt na kořeni domény.
  2. Odstraň globální blokace (Disallow: /) pro produkci.
  3. Přidej odkaz na sitemapu: Sitemap: https://domena.cz/sitemap.xml.
  4. Blokuj pouze skutečně zbytečné cesty (interní admin, technické endpoints) – neblokuj CSS/JS.

Validace

  • Ověř v GSC > robots tester (URL Inspection).
  • Crawler (Screaming Frog/ahrefs) nehlásí blokované klíčové zdroje.
` }, sitemap: { title: 'sitemap.xml – jen indexovatelné URL (detail)', body: `

Kroky

  1. Generuj pouze kanonické URL s HTTP 200; vynech parametrické, filtr, vyhledávání a 3xx/4xx/5xx.
  2. Rozděl sitemapy po 50k URL/50 MB; vytvoř index sitemap.
  3. Odešli v GSC a kontroluj stav „Success“ + počty Discovered/Indexed.

Validace

  • Náhodný vzorek 50 URL vrací 200 a obsah se shoduje s kanonickou verzí.
  • Žádné duplicitní/paginated/parametrické URL.
` }, canon: { title: 'Kanonické tagy (detailní implementace)', body: `

Co to znamená

Kanonický tag rel="canonical" říká vyhledávačům, která URL je „hlavní“ pro daný obsah. Slouží k konsolidaci duplicit (parametry, varianty, stránkování) a k přenosu signálů.

Kroky

  1. Na každé stránce generuj <link rel="canonical" href="..."> na preferovanou URL.
  2. U variant (parametry, filtry, stránkování) odkazuj na hlavní kanonickou URL.
  3. Zajisti shodu mezi kanonickou URL, interními odkazy a sitemapou.

Validace

  • Žádný self‑referencing canonical na URL, které se přesměrovávají.
  • V nástroji Inspect URL (GSC) vidíš stejnou kanonickou jako ve zdrojáku.
` }, noindex: { title: 'Noindex jen tam, kde má být (detail)', body: `

Kroky

  1. Na interních/košík/admin stránkách přidej <meta name="robots" content="noindex,follow">.
  2. Nepoužívej blokaci v robots.txt pro stránky, které mají být noindex – jinak se meta neprojeví.
  3. Ujisti se, že indexovatelné šablony nemají noindex.

Validace

  • GSC > Pages: nevyskytují se důležité stránky v „Excluded by noindex“.
` }, errors: { title: '4xx/5xx pod kontrolou + kvalitní 404 (detail)', body: `

Kroky

  1. Zřiď monitoring 5xx (uptime) a logování chyb v aplikaci.
  2. Vytvoř přívětivou 404 se vyhledáváním a odkazy na klíčové sekce.
  3. Staré URL přesměruj 301 na nástupnické, jinak používej 410 pro zaniklé.

Validace

  • Crawler nehlásí masivní 404/5xx; 404 šablona má navigaci a je indexovatelná jako 404 (status 404).
` }, pag: { title: 'Paginace – kanonizace a navigace (detail)', body: `

Kroky

  1. Stránky 2+ nech self‑canonical (každá na sebe), první stránka je kanonická pro kolekci.
  2. Přidej navigaci „další/předchozí“ odkazy v HTML (rel=prev/next je již legacy, ale interní odkazy jsou nutné).
  3. Vyvaruj se indexace nekonečné paginace; omez počet stránek nebo nabídni přechod na filtrování.
` }, lcp: { title: 'LCP < 2.5s – detailní návod', body: `

Optimalizace

  • Identifikuj LCP prvek (většinou hero obrázek/heading) pomocí CrUX/Pagespeed/Lighthouse.
  • Preloaduj LCP asset (<link rel="preload" as="image" href="..." imagesrcset="..." imagesizes="...">).
  • Critical CSS inlinuj; odlož neklíčové styly (media, loadCSS pattern).
  • Self‑host fonty, display: swap, preconnect na CDN.

Validace

  • Field data (CrUX) – 75. percentil < 2.5s na hlavních stránkách.
` }, inp: { title: 'INP < 200ms – detailní návod', body: `
  • Rozděl velké bundly (code-splitting), odlož těžké event handlery, používej pasivní posluchače.
  • Vynech synchronní práce v hlavním vlákně, optimalizuj třetí strany (tagy, chaty, analytika).
  • Pro těžké výpočty použij Web Workers.
` }, cls: { title: 'CLS < 0.1 – detailní návod', body: `
  • Vždy definuj šířku/výšku pro obrázky a sloty reklam.
  • Nezasahuj do layoutu nad fold po načtení (lazy obsah pod fold).
  • Použij font-display: swap a metriky kompatibilní fonty.
` }, images: { title: 'Obrázky: WebP/AVIF, srcset/sizes, fetchpriority (detail)', body: `
  1. Pro každý obrázek dodej srcset a sizes podle layoutu; hero doplň o fetchpriority="high".
  2. Exportuj WebP/AVIF, fallback JPEG/PNG jen kde je nutné.
  3. Lazy load pro offscreen (loading="lazy"), u hero ne.
` }, fonts: { title: 'Fonty – detailní optimalizace', body: `
  • Self‑host fonty, preconnect na hosta, preload hlavní řezy.
  • Subsetting (jen potřebné glyfy), font-display: swap.
` }, jsbloat: { title: 'Redukce JS – praktický postup', body: `
  1. Audit závislostí (bundle analyzer): odeber nepoužívané balíky, nahraď těžké lehčími.
  2. Zapni tree‑shaking a lazy‑load částí UI; defer/async pro neblokující skripty.
  3. Minimalizuj CSS a kritické styly inlinuj.
` }, rendering: { title: 'Základní obsah bez JS – SSR/SSG', body: `
  1. Pro klíčové šablony použij SSR/SSG: obsah a odkazy musí být ve výsledném HTML bez JS.
  2. Hydration načítej až po interakci (islands/on‑demand).
  3. Ověř pomocí „View Source“ a GSC URL Inspection (Rendered HTML).
` }, routes: { title: 'Router s unikátní URL + 200 odpovědi', body: `
  • Každá stránka má vlastní route bez hash; server vrací 200 s HTML (ne jen shell).
  • Nastav fallback pro SPA na serveru, aby boti dostali HTML.
` }, 'meta-ssr': { title: 'Meta tagy generované na serveru (detail)', body: `
  1. Title/description/OG/Twitter generuj na serveru pro každou route; žádné klientské přepisování.
  2. Ověř pro 5–10 typů stránek přes „View Source“ a URL Inspection.
` }, title: { title: 'Title – konkrétní tvorba', body: `
  1. Získej hlavní klíčové slovo a USP; sestav 50–60 znaků s klíčem na začátku.
  2. Odlišení pro stránky (šablona s proměnnými), kontrola duplicit v crawleru.
` }, meta: { title: 'Meta description – konkrétní tvorba', body: `
  1. Napiš 130–155 znaků se silným benefitem a CTA; přizpůsob podle typu stránky.
  2. Neopakuj title, nepřeplňuj klíčová slova.
` }, h1: { title: 'H1 + hierarchie – konkrétně', body: `
  • Jeden H1 na stránku, H2/H3 logicky pod ním; nekonfliktní se značkou loga.
  • Šablony: zkontroluj, že kategorie/články nevytváří více H1 bloků.
` }, url: { title: 'URL – standardizace', body: `
  • Malá písmena, pomlčky, bez diakritiky; krátké a stálé.
  • Parametry jen pro filtry/sledování, nikoli pro základní obsah.
` }, alt: { title: 'ALT texty – praxe', body: `
  • Popiš význam v kontextu (např. „Detail černých běžeckých bot…“), ne cpát klíčová slova.
  • Dekorativní obrázky nech s prázdným alt="".
` }, breadcrumbs: { title: 'Breadcrumbs + schema (detail)', body: `
  1. Vlož breadcrumbs do UI (odkazováno nahoru v hierarchii).
  2. Přidej JSON‑LD BreadcrumbList s pořadím a URL.
` }, hreflang: { title: 'hreflang – implementační návod (detail)', body: `

Co to znamená

hreflang říká vyhledávačům, že více URL představuje týž obsah v různých jazykových/regionálních variantách (např. cs-CZ, en-GB). Pomáhá doručit uživateli správnou verzi výsledku a konsoliduje signály mezi ekvivalenty.

Kdy použít

  • Máte samostatné URL pro jazyky/regiony (subfoldery, subdomény, ccTLD).
  • Obsah je významově ekvivalentní (ne odlišná témata).

Struktura tagů

<link rel="alternate" hreflang="cs-CZ" href="https://example.com/cs/..." />
<link rel="alternate" hreflang="en-GB" href="https://example.com/en-gb/..." />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />

Postup

  1. Nakresli mapu ekvivalentů: pro každou stránku vyjmenuj všechny jazykové/regionální verze. Zapiš přesné ISO kódy (např. cs-CZ, en-GB, nikoli volné zkratky).
  2. Implementuj: buď v <head> všech ekvivalentů, nebo v jazykových sitemapech. Vždy uveď kompletní sadu všech jazyků + x-default.
  3. Zajisti obousměrnost: každý ekvivalent musí odkazovat na všechny ostatní včetně sebe (symetrické páry).
  4. Kanonika + URL: kanonické tagy směřují v rámci jazyka na sebe; hreflang nikdy neukazuje na nekanonickou nebo 3xx URL.

Validace

  • Crawlerem zkontroluj, že pro každý jazyk VRACÍŠ celou sadu hreflang tagů a že href existují a vrací 200.
  • V GSC (Search Console) sleduj „Jazykové verze“ – chyby typu „no return tag“ nebo „neplatný kód“ oprav.

Tipy

  • Pro verzi „výchozí“ použij x-default – typicky homepage nebo směrovací landing.
  • Regionální varianty angličtiny rozlišuj (en-US, en-GB), ne jen en, pokud máš rozdíly v měně/ceně/dopravě.
  • Preferuj absolutní URL, ne relativní.

Časté chyby

  • Chybějící obousměrnost (A odkazuje na B, ale B nevrací A).
  • Nesprávné kódy (např. cz místo cs-CZ), odkazy na 3xx/404 a mix s kanonikami.
  • Hreflang na úplně odlišný obsah (není ekvivalent, ale jiná stránka).
` }, canonicalsitemap: { title: 'Sitemap jen s kanoniky – detail', body: `
  • Generuj výhradně 200 kanonické URL; odstraň 3xx/4xx/parametry.
  • Automatické čištění při změně kanoniky.
` }, blocked: { title: 'Nezablokovat kritické JS/CSS (detail)', body: `
  • V robots.txt neblokuj složky s CSS/JS; jinak Google nevyhodnotí layout a může snížit indexaci.
  • Ověř Inspekcí URL (Rendered HTML) a Coverage v GSC.
` } }); // === Rozšířené nápovědy pro všechny body (FALLBACK) === // DŮLEŽITÉ: Tento blok je fallback – použije se jen tam, kde neexistuje podrobná verze. const HELP_FALLBACK = { www: { title: 'www vs. non-www – kanonická varianta', body: `

Co to znamená: Web je dostupný jen na jedné host variantě (www nebo bez www) a ostatní 301 přesměrovávají na tu kanonickou.

Jak na to: Nastav 301 na úrovni webserveru/CDN a ověř smyčky/řetězení. V GSC měj jen kanonickou variantu.

` }, canon: { title: 'Kanonické tagy', body: `

Co to znamená: link rel="canonical" ukazuje na preferovanou URL u duplicit/variant.

Jak na to: Přidej canonical na kanonickou verzi, dbej na shodu s interními odkazy a sitemapou.

` }, noindex: { title: 'Noindex jen kde je to vhodné', body: `

Co to znamená: Noindex brání indexaci stránkám, které nemají být ve výsledcích (admin, košík, interní).

Jak na to: Přidej <meta name="robots" content="noindex"> nebo HTTP hlavičku, neblokuj v robots.txt.

` }, errors: { title: 'Chybové stavy 4xx/5xx pod kontrolou', body: `

Co to znamená: 404/410/5xx jsou monitorované a 404 stránka pomáhá uživateli najít obsah.

Jak na to: Vytvoř užitečnou 404 s navigací/vyhledáváním, sleduj 5xx alerty a oprav příčiny.

` }, pag: { title: 'Paginace bez rel next/prev (legacy)', body: `

Co to znamená: Paginované stránky jsou kanonizované a mají jasnou interní navigaci.

Jak na to: Nastav canonical na sebe sama, zajisti stránkování s odkazy a případně indexuj jen první stránku kolekce.

` }, inp: { title: 'INP < 200ms – rychlé interakce', body: `

Co to znamená: Rychlá odezva na kliky/gesta u 75% návštěv.

Jak na to: Rozděl JS (code-splitting), odlož skripty, minimalizuj práci v hlavním vlákně.

` }, cls: { title: 'CLS < 0.1 – stabilní layout', body: `

Co to znamená: Stránka se během načítání „neskáče“.

Jak na to: Rezervuj rozměry obrázků/ads, nepřidávej obsah nad již vykreslené prvky.

` }, cache: { title: 'HTTP cache & CDN', body: `

Co to znamená: Správné cache hlavičky a doručování přes CDN.

Jak na to: Použij Cache-Control s dlouhými časy pro statická aktiva + fingerprinting, brotli a HTTP/2/3.

` }, images: { title: 'Moderní formáty a načítání obrázků', body: `

Co to znamená: WebP/AVIF, správné srcset/sizes, lazy-loading a fetchpriority pro hero.

Jak na to: Exportuj více rozlišení, definuj sizes, lazy pro offscreen a preload klíčových.

` }, fonts: { title: 'Optimalizace fontů', body: `

Co to znamená: Rychlé vykreslení textu bez FOIT/FOUT.

Jak na to: font-display: swap, subsetting, preconnect na CDN/font host, případně self-host.

` }, jsbloat: { title: 'Redukce JavaScriptu', body: `

Co to znamená: Méně kódu ke stažení/spuštění = lepší výkon.

Jak na to: Tree-shaking, code-splitting, defer/async, audit závislostí, minimalizace CSS.

` }, rendering: { title: 'Obsah bez JS (SSR/SSG/hydration)', body: `

Co to znamená: Základní obsah/odkazy jsou dostupné i bez spuštění JS.

Jak na to: Použij SSR nebo SSG pro kritické stránky, u interaktivity aplikuj on-demand hydration.

` }, routes: { title: 'Router s unikátní URL a 200 odpověďmi', body: `

Co to znamená: Každá stránka má vlastní URL (ne hash-only) a server vrací 200 s obsahem.

Jak na to: Nastav server-side routy a fallback pro SPA, aby bot dostal HTML.

` }, 'meta-ssr': { title: 'Meta tagy generované na serveru', body: `

Co to znamená: <title>, description, OG/Twitter se renderují na serveru.

Jak na to: Propaguj data do šablon/SSR, nečekej na klientský JS.

` }, links: { title: 'Interní prolinkování', body: `

Co to znamená: Kontextové odkazy, breadcrumbs a související obsah zlepšují procházení.

Jak na to: Přidej odkazy z klíčových stránek na podpůrné a naopak, používej smysluplné anchor texty.

` }, ext: { title: 'Externí odkazy a rel atributy', body: `

Co to znamená: Odkazuješ na kvalitní zdroje a správně používáš rel (nofollow/sponsored).

Jak na to: Dbej na důvěryhodnost zdrojů; komerční/uživatelské odkazy označ.

` }, clusters: { title: 'Topic clustery', body: `

Co to znamená: Pilířové stránky a podpůrný obsah pokrývají téma do hloubky.

Jak na to: Navrhni pilíře, vytvoř obsahové clustery a prolinkuj je dohromady.

` }, thin: { title: 'Thin/duplicate kategorie/tagy', body: `

Co to znamená: Odstranění slabých/duplicitních listingů.

Jak na to: Konsoliduj do silnějších stránek, převeď zbytek 301/410, sjednoť tagy.

` }, facets: { title: 'Fasetové filtrování a indexace', body: `

Co to znamená: Indexují se jen hodnotné kombinace filtrů.

Jak na to: Whitelist hodnotných facetů, canonical/param rules pro ostatní, interní odkazy na ty důležité.

` }, intent: { title: 'Search intent', body: `

Co to znamená: Obsah odpovídá záměru dotazu (informational, commercial…).

Jak na to: Analyzuj SERP, mapuj dotazy na typ stránek a doplň chybějící sekce.

` }, eeat: { title: 'E‑E‑A‑T signály', body: `

Co to znamená: Důvěryhodnost autora/webu, citace a transparentnost.

Jak na to: Přidej bio autora, reference, zdroje, kontakty, informace o firmě.

` }, faq: { title: 'FAQ sekce', body: `

Co to znamená: Zodpovídá časté dotazy v rámci stránky.

Jak na to: Vycházej z „People Also Ask“, přidej strukturovaná data FAQPage, kde dávají smysl.

` }, fresh: { title: 'Aktualizace evergreen obsahu', body: `

Co to znamená: Pravidelně obnovuješ klíčové stránky.

Jak na to: Naplánuj čtvrtletní revize, aktualizuj data, příklady, odkazy a schema.

` }, cta: { title: 'CTA a mikro-konverze', body: `

Co to znamená: Stránka má jasné výzvy k akci a měření.

Jak na to: Definuj cíle, přidej CTA v obsahu a měř události v analytice.

` }, crawlbudget: { title: 'Crawl budget', body: `

Co to znamená: Boti netráví čas na zbytečných stránkách.

Jak na to: Omez nekonečné kalendáře, session parametry, duplicitní facet kombinace; využij robots.txt a noindex.

` }, canonicalsitemap: { title: 'Sitemap jen s kanonickými URL', body: `

Co to znamená: Sitemap neobsahuje 3xx/4xx/5xx ani nekanonické adresy.

Jak na to: Generuj pouze 200 kanoniky, průběžně validuj a čistě loguj chyby.

` }, blocked: { title: 'Nezablokovat kritické JS/CSS', body: `

Co to znamená: Boti mají přístup k assetům nutným pro pochopení layoutu/obsahu.

Jak na to: Nepoužívej Disallow na složky s CSS/JS, otestuj v GSC „URL inspection“.

` }, logs: { title: 'Analýza serverových logů', body: `

Co to znamená: Sleduješ crawling botů a odhaluješ plýtvání.

Jak na to: Exportuj logy, segmentuj user-agenty, hledej 404/500 a nekonečné sekvence.

` }, redirects: { title: '301 mapy a bez řetězení', body: `

Co to znamená: Přesměrování jsou krátká a bez smyček.

Jak na to: Udržuj redirect mapu, testuj 3xx řetězení, oprav cíle na kanoniky.

` }, '410': { title: '410 pro trvale odstraněné stránky', body: `

Co to znamená: Zjevně zaniklé URL vrací 410 (Gone), ne 404.

Jak na to: Nastav pravidla na serveru, používej 301, pokud existuje nástupnická stránka.

` }, srcset: { title: 'srcset/sizes, rozměry a komprese', body: `

Co to znamená: Obrázky se servírují v adekvátním rozlišení.

Jak na to: Definuj srcset a sizes, optimalizuj rozměry a kompresi, zapni loading="lazy".

` }, cdnimg: { title: 'Image CDN / on‑the‑fly transformace', body: `

Co to znamená: Automatická změna velikosti/formatu podle zařízení.

Jak na to: Využij Cloudinary/ImageKit/Cloudflare Images nebo vlastní proxy vrstvu.

` }, altdecor: { title: 'Dekorativní vs. významové obrázky', body: `

Co to znamená: Dekorativní mají prázdný ALT, významové popisný.

Jak na to: Nastav alt="" pro dekorace, pro klíčové obrázky napiš sémantický ALT.

` }, lazyvideo: { title: 'Lazy‑load videí', body: `

Co to znamená: Iframe/players se načtou až při interakci/viditelnosti.

Jak na to: Použij „lite-youtube-embed“, poster image a parametr „nocookie“.

` }, videoschema: { title: 'VideoObject + video sitemap', body: `

Co to znamená: Strukturovaná data pro videa a jejich mapu.

Jak na to: Přidej JSON‑LD VideoObject, generuj video sitemap a odešli do GSC.

` }, author: { title: 'Autoři a důvěryhodnost', body: `

Co to znamená: Viditelní autoři s bio a kvalifikací.

Jak na to: Profil autora, odkazy na zdroje/práce, stránka O nás/Kontakt.

` }, reviews: { title: 'Recenze a citace', body: `

Co to znamená: Důkazy spokojenosti/autority z externích zdrojů.

Jak na to: Zobraz recenze, odkazuj na zdroje, použij Review/AggregateRating kde relevantní.

` }, policies: { title: 'Zásady a právní dokumenty', body: `

Co to znamená: Transparentní GDPR, podmínky, reklamace, cookies.

Jak na to: Udržuj aktuální dokumenty a odkazy v patičce, měj kontaktní kanály.

` }, org: { title: 'Organization/LocalBusiness', body: `

Co to znamená: Správné údaje o firmě v JSON‑LD.

Jak na to: Přidej logo, adresu, telefon, sameAs na profily; validuj v Rich Results Test.

` }, article: { title: 'Article/BlogPosting', body: `

Co to znamená: Články se značkou autora, datem a headline.

Jak na to: Přidej JSON‑LD, uveď autora, datum publikace/aktualizace.

` }, product: { title: 'Product + Offer + AggregateRating', body: `

Co to znamená: Kompletní značka pro produktové stránky.

Jak na to: Přidej cenu, dostupnost, měnu v Offer, recenze a průměry v AggregateRating.

` }, faqschema: { title: 'FAQPage/HowTo', body: `

Co to znamená: Strukturovaná data pro FAQ/návody, kde dávají smysl.

Jak na to: Dbej na konzistenci s viditelným obsahem, validuj v Rich Results Test.

` }, contrast: { title: 'Přístupnost: kontrast a ovladatelnost', body: `

Co to znamená: Splnění WCAG pro kontrast, velikost písma a focus.

Jak na to: Otestuj Lighthouse/axe, přidej focus styly a ARIA labely.

` }, kbd: { title: 'Ovládání z klávesnice', body: `

Co to znamená: Web lze projít bez myši.

Jak na to: Zajisti tab index, „skip to content“, viditelný focus a správné role.

` }, ccTLD: { title: 'Struktura pro trhy (ccTLD/subdomain/subfolder)', body: `

Co to znamená: Správná volba rozvržení pro lokalizaci.

Jak na to: Zvaž SEO/technické dopady; pro začátek často stačí subfoldery.

` }, currency: { title: 'Lokalizace měny, dopravy, daní a jazyka', body: `

Co to znamená: Obsah a nabídky respektují region.

Jak na to: Implementuj skutečnou lokalizaci (ne strojový překlad), hlídej měnu a dopravce.

` }, hreflang2: { title: 'Konzistentní hreflang + sitemapy', body: `

Co to znamená: Všechny jazykové verze se vzájemně odkazují.

Jak na to: Generuj jazykové sitemapy a páruj ekvivalenty včetně x-default.

` }, gbp: { title: 'Google Business Profile', body: `

Co to znamená: Plně vyplněný a spravovaný profil.

Jak na to: Doplň kategorie, fotky, příspěvky, Q&A, sbírej recenze.

` }, nap: { title: 'Konzistence NAP', body: `

Co to znamená: Stejné jméno, adresa a telefon ve všech citacích.

Jak na to: Audituj citation zdroje a oprav nesrovnalosti.

` }, localpages: { title: 'Místní landing pages', body: `

Co to znamená: Pro jednotlivá místa máš unikátní, hodnotný obsah.

Jak na to: Přidej lokální prvky (mapa, NAP, nabídka, recenze) a interní prolinkování.

` }, ga4: { title: 'GA4 / alternativy a značkování kampaní', body: `

Co to znamená: Měříš čistě a konzistentně.

Jak na to: Nastav zdroje/medium/utm, vyluč interní traffic, definuj konverze.

` }, gtm: { title: 'Google Tag Manager governance', body: `

Co to znamená: Řízené nasazování skriptů se správnými souhlasy.

Jak na to: Používej workspace, verzování, schvalování a vazbu na CMP/Consent Mode.

` }, events: { title: 'Události měření', body: `

Co to znamená: Sledování interakcí (scroll, CTA, formuláře, hledání, video, 404).

Jak na to: Definuj eventy a parametry, implementuj přes GTM/SDK, validuj v Realtime/DebugView.

` }, goals: { title: 'Konverze a atribuční modely', body: `

Co to znamená: Jasně definované cíle a vyhodnocování přínosu kanálů.

Jak na to: Nastav conversions v GA4, porovnej atribuční modely a asistované konverze.

` }, 'gsc-verify': { title: 'Ověření domény v GSC', body: `

Co to znamená: Vlastníš všechny varianty (http/https, www/non-www, subdomény) přes DNS.

Jak na to: Přidej „Domain property“ a ověř přes TXT záznam.

` }, 'gsc-coverage': { title: 'Pokrytí indexu', body: `

Co to znamená: Řešíš chyby, vyloučené URL a měkké 404.

Jak na to: Sleduj report Coverage/Pages v GSC a oprav příčiny po dávkách.

` }, 'gsc-queries': { title: 'Dotazy s nízkým CTR', body: `

Co to znamená: Zlepšuješ title/description pro lepší proklik.

Jak na to: V reportu Performance filtruj nízké CTR a uprav meta prvky a obsah.

` }, 'gsc-sitemaps': { title: 'Sitemapy v GSC', body: `

Co to znamená: Sitemapy mají stav „Success“ a neobsahují chyby.

Jak na to: Oprav 404/500, drž jen 200 kanoniky, přegeneruj a znovu odešli.

` }, alerts: { title: 'Alerty a SLA', body: `

Co to znamená: Máš notifikace na kritické změny (traffic, 5xx, robots, sitemap, CWV).

Jak na to: Nastav alerting v GA4/GSC/uptime monitoringu a incident workflow.

` }, uptime: { title: 'Uptime monitoring a SSL expirace', body: `

Co to znamená: Dostupnost webu a platné certifikáty.

Jak na to: Použij UptimeRobot/StatusCake a alerty na expirační datum SSL.

` }, plp: { title: 'Kategorie (PLP)', body: `

Co to znamená: Kategorizace s unikátním textem a rozumnými filtry.

Jak na to: Přidej úvodní text, omez indexaci zbytečných filtrů, interně prolinkuj.

` }, pdp: { title: 'Produkt (PDP)', body: `

Co to znamená: Detail produktu s parametry, variantami a FAQ.

Jak na to: Zahrň specifikace, dostupnost, recenze a strukturovaná data.

` }, reviewschema: { title: 'Recenze a AggregateRating pravidla', body: `

Co to znamená: Správné použití schema pro recenze.

Jak na to: Dodrž zásady Google, neznačuj self‑serving recenze tam, kde jsou zakázány.

` }, 'canon-vari': { title: 'Varianty a kanonizace', body: `

Co to znamená: Řešení duplicit mezi variantami (barva/velikost).

Jak na to: Zvaž samostatné URL pro významné varianty nebo canonical/param pro ostatní.

` }, searchindex: { title: 'Interní vyhledávání není indexované', body: `

Co to znamená: Vyhledávací výsledky nejsou ve vyhledávačích.

Jak na to: Přidej noindex na výsledky vyhledávání a zamez jejich odkazování v sitemapě.

` }, zerostate: { title: 'Zero‑result stavy', body: `

Co to znamená: Když nic nenajdeme, pomůžeme uživateli.

Jak na to: Doporuč kategorie/produkty nebo zobraz tipy pro vyhledávání.

` }, crawlold: { title: 'Plný crawl starého webu', body: `

Co to znamená: Máš inventář URL/metadat před migrací.

Jak na to: Projeď Screaming Frog/ahoj crawler, ulož titles/H1/schema/odkazy.

` }, redirectmap: { title: 'Redirect mapa', body: `

Co to znamená: Jasné mapování old → new bez smyček.

Jak na to: Připrav 301 pravidla, otestuj na stagingu, oprav kolize.

` }, parity: { title: 'Obsahová parita', body: `

Co to znamená: Nový web zachovává klíčový obsah/meta/schema.

Jak na to: Porovnej titles, H1, schema, interní odkazy; doplň chybějící.

` }, 'gsc-change': { title: 'Change of address v GSC', body: `

Co to znamená: Při změně domény informuješ Google.

Jak na to: Spusť Change of address v GSC pro původní doménu po nasazení 301.

` }, 'redirects-live': { title: 'Kontrola 301 v produkci', body: `

Co to znamená: Po spuštění ověříš přesměrování bez řetězení.

Jak na to: Projeď vzorek v crawleru, oprav vícenásobné 3xx a dead ends.

` }, monitoring: { title: 'Monitoring po migraci', body: `

Co to znamená: Sleduješ 404/5xx, indexaci, CWV a pozice.

Jak na to: Nastav dashboard/alerty, kontroluj GSC reporty.

` }, prospecting: { title: 'Prospecting na odkazy', body: `

Co to znamená: Vyhledáváš relevantní stránky pro získání odkazů.

Jak na to: Broken link building, unlinked mentions, tematické katalogy a média.

` }, anchors: { title: 'Profil anchor textů', body: `

Co to znamená: Vyvážený mix brand/URL/partial/exact match.

Jak na to: Audituj odkazový profil, omez rizikové exact anchory.

` }, dr: { title: 'Kvalita domén', body: `

Co to znamená: Priorita kvalitních a tematicky relevantních webů.

Jak na to: Posuzuj autoritu, návštěvnost, topical relevance a historii domény.

` }, studies: { title: 'PR: studie a kampaně', body: `

Co to znamená: Tvoříš linkable assets (data, průzkumy, interaktivní obsah).

Jak na to: Př bere PR pitch, originální data, vizualizace a distribuce do médií.

` }, newsjacking: { title: 'Newsjacking a komentáře expertů', body: `

Co to znamená: Reaguješ na aktuální témata s odborným komentářem.

Jak na to: Sleduj trendové dotazy, připrav rychlé citace a outreach do médií.

` }, csp: { title: 'Bezpečnostní hlavičky', body: `

Co to znamená: CSP, X-Frame-Options, HSTS a bezpečné cookies.

Jak na to: Nastav CSP s whitelistem, HSTS a Secure; HttpOnly; SameSite cookies.

` }, consent: { title: 'Consent mode / CMP', body: `

Co to znamená: Zpracování měření v souladu s GDPR.

Jak na to: Implementuj CMP, mapuj souhlasy do GTM/Consent Mode v2.

` }, backups: { title: 'Zálohy a verzování', body: `

Co to znamená: Obnova při incidentu je reálně možná.

Jak na to: Pravidelné zálohy, test restore, verzování infra i obsahu.

` }, owners: { title: 'Vlastnictví a SLA', body: `

Co to znamená: Každá sekce má vlastníka a dohody o reakčních časech.

Jak na to: Definuj RACI, backlog a reporting.

` }, retro: { title: 'Měsíční retro a prioritizace', body: `

Co to znamená: Pravidelné vyhodnocení a plán další práce.

Jak na to: Sleduj dopad × náročnost, aktualizuj roadmapu a backlog.

` } }; for(const [k,v] of Object.entries(HELP_FALLBACK)){ if(!helpContentById[k]) helpContentById[k] = v; } // statické help buttony: posluchače kliknutí const HELP_SVG = ''; const helpModal = document.getElementById('helpModal'); const helpModalTitle = document.getElementById('helpModalTitle'); const helpModalBody = document.getElementById('helpModalBody'); const helpCloseBtn = document.getElementById('helpCloseBtn'); let elementFocusedBeforeOpen = null; function buildFallbackHelp(itemId, fallbackTitle){ const cb = document.getElementById(itemId); const item = cb?.closest('.item'); const labelEl = item ? item.querySelector('label') : null; const labelText = (labelEl?.innerText || fallbackTitle || '').trim(); const tags = item ? $$('.tag', item).map(t=>t.textContent.trim()).join(', ') : ''; const hint = item ? ($('.hint', item)?.innerText || '') : ''; const specific = buildKeywordSpecificGuide(labelText.toLowerCase(), itemId); return `

Co to znamená

${labelText}. V praxi jde o konkrétní pravidla/konfiguraci, která mají zajistit správnou indexaci, pochopení obsahu a bezchybnou uživatelskou zkušenost. Štítky (např. priority/risk/tema) u položky: ${tags || '—'}.

${hint ? `

Kontext z checklistu: ${hint}

` : ''} ${specific}

Proč na tom záleží

  • Zlepšení zjistitelnosti (discovery) a správné indexace ve vyhledávačích.
  • Snížení duplicit a chyb (soft 404/5xx, zbytečné procházení, ztráty signálů).
  • Lepší výkon/UX (Core Web Vitals), vyšší CTR a konverze.

Kroky implementace

  1. Zjištění stavu: Zkontrolujte aktuální chování/konfiguraci pro tento bod (prohlížeč, DevTools, crawler, GSC/GA4, serverové logy).
  2. Návrh řešení: Upřesněte cílový výsledek v šablonách/konfiguraci (CMS, server, CDN) a připravte konkrétní změny.
  3. Implementace: Upravte šablony, metadata, směrování, performance nastavení nebo infrastrukturní pravidla dle potřeby.
  4. Test na stagingu: Ověřte funkcionalitu, SEO signály a neexistenci regresí (CWV, indexace, odkazy).
  5. Nasazení + kontrola: Po release proveďte znovu měření a krátkodobý monitoring chyb/alertů.

Validace

  • Ruční kontrola 5–10 typových URL, kontrola zdrojového HTML a síťových odpovědí.
  • Crawler (Screaming Frog, Ahrefs/SEMrush) – výpis relevantních polí k tomuto bodu.
  • GSC/GA4/DevTools – metriky, chybové stavy a pokrytí.

Tipy

  • Připravte checklist pro reviews a rollback; změny dělejte iterativně.
  • Dokumentujte důvody nastavení, ať je jasné „proč“ i za půl roku.

Časté chyby

  • Provedení změn jen v jedné šabloně – ostatní typy stránek zůstanou nekonzistentní.
  • Chybějící validace po nasazení nebo ignorovaná varování v nástrojích.
`; } function buildKeywordSpecificGuide(label, id){ const b = (html)=>`
${html}
`; if(/\btitle\b/.test(label)) return b(`

Co to znamená

Title je viditelný název stránky ve výsledcích vyhledávání. Ovlivňuje proklik (CTR) i pochopení tématu.

Postup

  1. Vytvoř seznam šablon pro typy stránek (home, kategorie, článek, produkt).
  2. Sestav formát: {Hlavní klíč} – {USP/brand} (50–60 znaků). Omez oddělovače a zbytečná slova.
  3. Implementuj v šablonách/SSR. Pro PDP přidej klíčové parametry (značka, model, hlavní vlastnost).
  4. Audit duplicit crawlerem a oprav kolize. Měj fallback pro prázdná pole.

Tipy

  • Testuj variace na dotazech s nízkým CTR (GSC).
  • Neopakuj doménu, pokud je na konci v šabloně.
`); if(/meta.*description/.test(label)) return b(`

Co to znamená

Meta description je stručný popis zobrazený pod title. Přímé hodnocení SEO nemá, ale zásadně ovlivňuje CTR.

Postup

  1. Napiš 130–155 znaků s benefitem a výzvou k akci. Přizpůsob každému typu stránky.
  2. Generuj programově ze strukturovaných dat (atributy produktu, shrnutí článku).
  3. Vyhýbej se opakování title a umělému shlukování klíčových slov.

Tipy

  • Průběžně sleduj GSC – nízké CTR = kandidát na přepis.
`); if(/\bh1\b/.test(label)) return b(`

Co to znamená

H1 je hlavní nadpis na stránce; má vyjadřovat téma obsahu.

Postup

  • Na stránce právě jeden H1.
  • Komponenty/šablony nesmí generovat další H1.
  • H2/H3 tvoří logickou strukturu obsahu.
`); if(/url|permalink|slug/.test(label)) return b(`

Co to znamená

URL by měla být krátká, čitelná a stabilní. Slouží jako identifikátor i signál relevance.

Postup

  • Malá písmena, pomlčky, bez diakritiky a parametrů.
  • Nastav 301 mapy při změně struktury a canonical konzistenci.
`); if(/alt\b|obrázk/.test(label)) return b(`

Co to znamená

ALT zpřístupňuje význam obrázku (a11y) a pomáhá vyhledávačům pochopit kontext.

Postup

  • Popiš význam v kontextu scény, ne „klíčová slova“.
  • Dekorativní obrázky mají alt="".
`); if(/breadcrumbs?|breadcrumblist/.test(label)) return b(`

Co to znamená

Navigace drobečků ukazuje uživateli i robotům umístění stránky v hierarchii.

Postup

  • Implementuj do UI a přidej JSON‑LD BreadcrumbList.
  • Poslední prvek bez odkazu; ostatní klikatelné.
`); if(/hreflang/.test(label)) return b(`

Specifický postup pro hreflang

  1. Mapuj ekvivalenty URL.
  2. Vlož tagy pro všechny jazyky + x‑default.
  3. Validuj páry (obousměrnost).
`); if(/robots\.txt|robots txt/.test(label)) return b(`

Specifický postup pro robots.txt

  • Ne blokovat CSS/JS, přidej Sitemap.
  • Odstraň Disallow: / v produkci.
`); if(/sitemap/.test(label)) return b(`

Co to znamená

Sitemapy jsou strojové seznamy URL, kterými navádíte vyhledávače na preferované (kanonické) stránky. Neslouží k vynucení indexace, ale k efektivnímu procházení a validaci stavu.

Postup

  1. Vygenerujte pouze URL s HTTP 200, bez parametrů a duplicit; vše musí odpovídat kanonické verzi.
  2. Pro velké weby rozdělte do více souborů a používejte sitemap index; aktualizujte po změnách.
  3. Odešlete v GSC a používejte jako referenci při auditech pokrytí (Coverage/Pages).

Tipy

  • Zachovejte stabilní pořadí a velikost; změny diffujte při deployi.
  • Neindexovatelné stránky do sitemap nepatří.
`); if(/canonical|kanonick/.test(label)) return b(`

Specifický postup pro Canonical

  • Self‑canonical pro paginaci, hlavní canonical pro kolekce.
  • Shoda se sitemapou a interními odkazy.
`); if(/lcp|largest contentful paint/.test(label)) return b(`

Co to znamená

LCP měří, jak rychle se načte největší prvek viewportu (často hero obrázek).

Postup

  • Preload LCP assetu + správné rozměry a komprese.
  • Critical CSS inline, self‑host fonty a preconnect.
`); if(/inp|interaction to next paint/.test(label)) return b(`

Co to znamená

INP hodnotí odezvu UI na akce uživatele (klik, vstup, interakce).

Postup

  • Rozdělení bundlů, lazy handlery, odstranění synchronních blokací.
  • Workers pro těžké výpočty, optimalizace třetích stran.
`); if(/cls|cumulative layout shift/.test(label)) return b(`

Co to znamená

CLS měří míru poskakování layoutu. Cílem je stabilní rozvržení.

Postup

  • Rezervace rozměrů obrázků/reklam.
  • Žádný dodatečný obsah nad fold po načtení.
  • font-display: swap.
`); if(/video|youtube/.test(label)) return b(`

Specifický postup pro Video

  • Lite embed, poster, nocookie.
  • JSON‑LD VideoObject + video sitemap.
`); if(/ga4|analytics/.test(label)) return b(`

Specifický postup pro GA4

  • Definice měřených událostí a konverzí.
  • Ověření přes DebugView a Realtime.
`); if(/gsc|search console/.test(label)) return b(`

Specifický postup pro GSC

  • Ověření domény přes DNS.
  • Monitoring Coverage a Queries (CTR).
`); if(/plp|pdp|produkt|kategorie/.test(label)) return b(`

Specifický postup pro e‑shop stránky

  • PLP: unikátní text, prolinkování, řízení indexace filtrů.
  • PDP: parametry v title, skladovost, FAQ/recenze + schema.
`); if(/redirect|301|410/.test(label)) return b(`

Specifický postup pro přesměrování

  • Bez řetězení, mapy old→new.
  • 410 pro definitivně zaniklé.
`); return ''; } function openHelpModal(itemId, fallbackTitle){ elementFocusedBeforeOpen = document.activeElement; const content = helpContentById[itemId]; helpModalTitle.textContent = content?.title || (fallbackTitle?.trim() || 'Nápověda'); // Preferuj podrobnou verzi; pokud je pouze stručná (bez sekcí), automaticky ji rozšiř fallbackem const raw = content?.body || ''; const hasSections = /

${fallbackHtml}` : fallbackHtml); helpModal.classList.add('open'); helpModal.setAttribute('aria-hidden', 'false'); helpCloseBtn.focus(); } // simple version marker for cache‑busting diagnostics console.debug('[SEO modal] help system v3.2 loaded'); function closeHelpModal(){ helpModal.classList.remove('open'); helpModal.setAttribute('aria-hidden', 'true'); if(elementFocusedBeforeOpen){ elementFocusedBeforeOpen.focus(); } } helpCloseBtn.addEventListener('click', closeHelpModal); helpModal.addEventListener('click', (ev)=>{ if(ev.target === helpModal) closeHelpModal(); }); document.addEventListener('keydown', (ev)=>{ if(ev.key === 'Escape' && helpModal.classList.contains('open')) closeHelpModal(); }); // navázání událostí na staticky vložené buttony // Delegované navázání – jistota pro všechny buttony (statické i případně dynamické) document.addEventListener('click', (ev) => { const t = ev.target; if(!(t instanceof Element)) return; const btn = t.closest('.help-btn'); if(!btn) return; ev.preventDefault(); ev.stopPropagation(); let id = btn.getAttribute('data-help-id'); if(!id){ const item = btn.closest('.item'); const cb = item ? item.querySelector('input[type="checkbox"]') : null; id = cb ? cb.id : ''; } const item = btn.closest('.item'); const labelEl = item ? item.querySelector('label') : null; const labelText = labelEl ? labelEl.innerText : 'Nápověda'; openHelpModal(id, labelText); }); // Přímé navázání (pro jistotu ve starších prohlížečích nebo pokud by delegace selhala) function bindHelpButtons(){ $$('.help-btn').forEach(btn => { if(btn.__helpBound) return; btn.__helpBound = true; btn.addEventListener('click', (ev)=>{ ev.preventDefault(); ev.stopPropagation(); let id = btn.dataset.helpId; if(!id){ const item = btn.closest('.item'); id = item && item.querySelector('input[type="checkbox"]').id || ''; } const item = btn.closest('.item'); const labelEl = item && item.querySelector('label'); const labelText = labelEl ? labelEl.innerText : 'Nápověda'; openHelpModal(id, labelText); }); }); } // Fallback pro prostředí, která odstraní SVG z buttonu: doplní znak „?“ pokud je button prázdný function ensureHelpButtonIcons(){ $$('.help-btn').forEach(btn => { // Vynutíme viditelný znak otazníku ve všech buttonech – spolehlivé i bez SVG btn.textContent = '?'; }); } // Notes UI: add textarea to each item, persists per checkbox id function addNotesUI(){ $$('.item').forEach(itemEl => { const checkboxEl = $('input[type="checkbox"]', itemEl); if(!checkboxEl || !checkboxEl.id) return; if($('.note-box', itemEl)) return; // avoid duplicates const box = document.createElement('div'); box.className = 'note-box'; const ta = document.createElement('textarea'); ta.className = 'note-input'; ta.placeholder = 'Poznámka k bodu (uloží se automaticky)…'; ta.value = notes[checkboxEl.id] || ''; ta.addEventListener('input', () => { notes[checkboxEl.id] = ta.value; saveNotes(); }); box.appendChild(ta); // vložit před .tags/.hint, jinak na konec const tagsEl = $('.tags', itemEl); const hintEl = $('.hint', itemEl); if(tagsEl){ itemEl.insertBefore(box, tagsEl); } else if(hintEl){ itemEl.insertBefore(box, hintEl); } else { itemEl.appendChild(box); } }); } loadState(); bindHelpButtons(); ensureHelpButtonIcons(); addNotesUI(); applySectionCollapse();