Programování

Technické SEO pro vývojáře: co musí web splňovat

Title a meta description, kanonické URL, robots.txt, sitemap, strukturovaná data, renderování JavaScriptu a hreflang. Technické SEO prakticky a s kódem.

12. 10. 2026 · 5 min čtení

O obsahu a klíčových slovech rozhoduje marketing. To, jestli vyhledávač stránky vůbec najde, pochopí a správně zaindexuje, je ale práce vývojáře. Tady je přehled technických věcí, které musí web splňovat, s konkrétním kódem.

Hlavička každé stránky

<!doctype html>
<html lang="cs">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Ruční kávovar V60 – návod na přípravu | Kavárna Zrnko</title>
  <meta name="description" content="Jak připravit kávu ve V60: poměr kávy a vody, hrubost mletí, teplota a postup krok za krokem.">
  <link rel="canonical" href="https://www.zrnko.cz/navody/v60">
</head>
  • <title> – unikátní pro každou stránku, nejdůležitější informace na začátku. Ve výsledcích se zobrazí zhruba 50–60 znaků.
  • meta description – Google ho nemusí použít, ale často ho zobrazí jako úryvek. Unikátní, kolem 150 znaků, vystihuje obsah.
  • lang – pomáhá s určením jazyka.
  • meta keywords Google ignoruje, nemusíte ho psát.

Kanonická URL

Stejný obsah bývá dostupný na více adresách: s www i bez, s lomítkem na konci i bez, s parametry ?utm_source=… nebo ?sort=price. rel="canonical" říká, která adresa je ta hlavní.

Kromě toho sjednoťte adresy přesměrováním 301 na serveru. Nginx – přesměrování na HTTPS a variantu s www:

server {
    listen 80;
    listen 443 ssl;
    server_name zrnko.cz;
    # ssl_certificate … (certifikát pro zrnko.cz)
    return 301 https://www.zrnko.cz$request_uri;
}

robots.txt

User-agent: *
Disallow: /admin/
Disallow: /kosik
Disallow: /*?sort=

Sitemap: https://www.zrnko.cz/sitemap.xml

Pozor na dvě časté chyby:

  1. Disallow nezabrání indexaci – zakáže jen procházení. Stránka se může ve výsledcích objevit, pokud na ni vedou odkazy. Pro vyřazení z indexu použijte <meta name="robots" content="noindex"> a stránku v robots.txt neblokujte, jinak robot noindex nikdy nepřečte.
  2. Zapomenuté Disallow: / z testovacího prostředí po nasazení do produkce. Kontrolujte to v deploy procesu.

Testovací prostředí raději chraňte heslem (HTTP Basic Auth) – je to spolehlivější než robots.txt.

Sitemap

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://www.zrnko.cz/navody/v60</loc>
    <lastmod>2026-09-30</lastmod>
  </url>
</urlset>

Generujte ji automaticky z databáze nebo seznamu stránek, uvádějte jen kanonické URL vracející 200 a lastmod měňte, jen když se obsah opravdu změnil. Google ignoruje priority a changefreq. Sitemapu odešlete v Google Search Console.

Stavové kódy

Situace Kód
Stránka existuje 200
Trvale přesunuto 301 (nebo 308)
Dočasně přesunuto 302 (nebo 307)
Neexistuje 404
Trvale smazáno 410
Chyba serveru 500/503

Klasická chyba SPA aplikací: neexistující URL vrátí hezkou stránku „Nenalezeno”, ale se stavem 200. Vyhledávač pak indexuje tisíce prázdných stránek (tzv. soft 404). Ověříte to příkazem:

curl -I https://www.zrnko.cz/neexistuje

JavaScript a renderování

Google umí JavaScript spouštět, ale renderování probíhá ve frontě a ne vždy zachytí vše. Ostatní vyhledávače a sociální sítě (náhledy odkazů) JavaScript často nespouští vůbec.

Pravidla:

  • Důležitý obsah, nadpisy, odkazy a meta tagy mají být v HTML odpovědi serveru. Použijte server-side rendering nebo statické generování (Next.js, Nuxt, Astro…).
  • Odkazy dělejte jako <a href="/cesta">. Robot neprochází onclick handlery ani <span> s routerem.
  • Nepoužívejte # routování (/#/produkty) – část za # se na server neposílá.

Co robot uvidí, ověříte v Search Console nástrojem Kontrola URL → Otestovat živou URL → Zobrazit testovanou stránku.

Strukturovaná data

JSON-LD podle schema.org pomáhá vyhledávačům pochopit obsah a může vést k rozšířeným výsledkům (hvězdičky, cena, FAQ, drobečková navigace):

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Ruční kávovar V60 – návod na přípravu",
  "datePublished": "2026-09-30",
  "author": { "@type": "Person", "name": "Jan Novák" },
  "image": "https://www.zrnko.cz/img/v60.jpg"
}
</script>

Data musí odpovídat viditelnému obsahu stránky. Validujte je nástrojem Rich Results Test od Googlu nebo validátorem na validator.schema.org.

Open Graph pro sdílení

<meta property="og:title" content="Ruční kávovar V60 – návod">
<meta property="og:description" content="Poměr, mletí, teplota a postup krok za krokem.">
<meta property="og:image" content="https://www.zrnko.cz/img/v60-og.jpg">
<meta property="og:url" content="https://www.zrnko.cz/navody/v60">
<meta name="twitter:card" content="summary_large_image">

Přímo pozice ve vyhledávání neovlivní, ale náhled při sdílení na sociálních sítích ano. Obrázek ideálně 1200 × 630 px, absolutní URL.

Vícejazyčný web

<link rel="alternate" hreflang="cs" href="https://www.zrnko.cz/navody/v60">
<link rel="alternate" hreflang="en" href="https://www.zrnko.cz/en/guides/v60">
<link rel="alternate" hreflang="x-default" href="https://www.zrnko.cz/navody/v60">

Každá jazyková verze musí odkazovat na všechny ostatní i na sebe. Nepřesměrovávejte automaticky podle IP nebo jazyka prohlížeče – robot by se k ostatním verzím nedostal.

Obrázky a sémantika

  • Popisné názvy souborů (kavovar-v60.jpg, ne IMG_2041.jpg) a smysluplný alt.
  • Jeden <h1> s hlavním tématem a logická struktura nadpisů.
  • Rychlost a Core Web Vitals – zejména na mobilu.

Kontrolní seznam před spuštěním

  • [ ] unikátní title a description na každé stránce
  • [ ] canonical a 301 přesměrování na jednu variantu domény
  • [ ] robots.txt neblokuje produkci, sitemap je odeslaná
  • [ ] neexistující stránky vrací 404
  • [ ] obsah je v HTML bez nutnosti JavaScriptu
  • [ ] strukturovaná data prošla validací
  • [ ] Search Console ověřená a bez chyb indexace