Soubor .htaccess je mimořádně silný nástroj pro weby na Apache (a částečně na LiteSpeed). Umožňuje přesměrování, kanonizaci, řízení přístupu, cache či kompresi. Stejnou lehkostí, s jakou dokáže pomoci SEO, umí ovšem i napáchat škody – včetně vypadnutí klíčových URL z indexu Google.
Proč .htaccess rozhoduje o indexaci
- Ovlivňuje, které URL jsou dostupné a jak na ně prohlížeče i boti dorazí
- Určuje, zda je URL kanonická (www vs. non‑www, http vs. https, se/bez trailing slashe)
- Definuje typ přesměrování a jeho pořadí
- Může blokovat Googlebota i nechtěně, třeba na statických souborech potřebných k renderingu
Pět nejčastějších chyb, které bolí SEO
1) Redirect loop nebo špatný typ přesměrování
- Nekonečné přesměrování ⇒ Google stránku neprojde ani nezaindexuje
- 302 místo 301 ⇒ dočasné přesměrování nepředá signály cílové stránce
Správně – trvalé 301 a jasné pořadí kroků
# 1) Force HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# 2) Force non-www (nebo www – vyberte jednu variantu)
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
2) Kanonizace na špatnou stránku
- Canonical přesměruje produkt na kategorii, nebo variantu na špatnou základní URL
- Výsledkem je ztráta relevance a pád pozic
Tip: Kanonizujte jen na ekvivalentní obsah. Přesměrování „všechno na homepage“ je z pohledu Google špatná praxe.
3) Nechtěné blokování crawlerů
- Příliš široké bloky přístupu zamezí Googlebotovi vstup
- Blokace CSS/JS/assets ⇒ Google nedokáže vykreslit layout a chování stránky
Chybný vzor
# Nebezpečné: odepře úplně všechno
Deny from all
Bezpečnější přístup
# Omezte jen to, co opravdu nemá být veřejné
<FilesMatch "\.(ini|log|bak)$">
Require all denied
</FilesMatch>
A ujistěte se, že /assets/, /static/, /css/, /js/ nejsou blokované.
4) Řetězení přesměrování a zbytečné parametry
- 3–4 „skoky“ před cílovou URL zpomalují crawling a uživatele
- Přesměrování s přepisem query stringů může rozbít filtrování či trackování
Minimalizujte hop‑count na 1 a zachovejte query string, pokud je potřeba:
RewriteRule ^stare-url$ /nova-url? [R=301,L,QSD] # QSD = drop query string
# nebo
RewriteRule ^stare-url$ /nova-url [R=301,L,QSA] # QSA = append query string
5) Směšování pravidel bez kontroly pořadí
- Nejprve se má sjednotit protokol, až pak host (www), až pak trailing slash a teprve poté „byznys“ přesměrování
- Opačné pořadí často vytváří smyčky nebo více hopů
Doporučené pořadí
- HTTPS vs. HTTP
- www vs. non‑www
- Trailing slash politika
- Jazykové/verzovací/obsahové mapování
- Specifické jednorázové redirecty z migrací
Jak rychle zjistit problém
Ověření hlaviček
curl -I https://domena.cz/stare-url
Hledejte:
HTTP/1.1 301 Moved Permanently(ne 302)Location: https://domena.cz/nova-url- Ideálně jediný 301 hop
Prolezení vzorku URL
- Otestujte šablony stránek (homepage, kategorie, produkt, článek, 404, parametry) ve Screaming Frog / Sitebulb
- Sledujte redirect chains, blocked resources a rendered HTML
Kontrola vykreslení
- „View Source“ nestačí. Ověřte Rendered HTML v crawleru nebo v nástroji „URL Inspection“ v Google Search Console
Bezpečné šablony pro běžné scénáře
Sloučení http→https a www→non‑www (nebo opačně)
RewriteEngine On
# Force HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Force non-www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
Normalizace trailing slashe pro adresáře
# Přidat slash pro „adresářové“ cesty (bez přípony)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.[a-zA-Z0-9]{2,5}$
RewriteRule [^/]$ %{REQUEST_URI}/ [R=301,L]
Jemné omezení přístupu bez blokace botů
# Zakázat přístup do systémových složek, ne do veřejných assets
RedirectMatch 404 ^/(vendor|backup|tmp|private)/
# Povolte vše potřebné k renderingu
<FilesMatch "\.(css|js|png|jpe?g|webp|svg|gif|woff2?)$">
Require all granted
</FilesMatch>
Kontrolní checklist před nasazením
- Mám zálohu původního .htaccess
- Otestoval jsem klíčové URL přes
curl -Ia v crawleru - Přesměrování jsou 301 a mají max. 1 hop
- Statické zdroje (CSS/JS/obrázky/fonty) nejsou blokované
- Pořadí pravidel je HTTPS → host → slash → obsah
- Canonical vede na ekvivalentní cílovou URL
- V GSC zkontrolováno „URL Inspection“ a „Coverage“
Krátký „troubleshooting“ návod, když indexace padá
- Ověřte homepage a několik šablon URL přes
curl -I - Zprovozněte provizorní verzi s minimálním .htaccess (jen HTTPS a host)
- Přidávejte pravidla po jednom a sledujte hlavičky a rendrovaný obsah
- Zkontrolujte GSC: rychlé chyby se projeví ve Coverage a Page indexing
- Až po stabilizaci zapněte další vrstvy (slash, speciální redirecty, ochrany)
Pokud chcete, doplním i minimal‑.htaccess pro vaši konkrétní strukturu URL a pošlu sadu testovacích curl příkazů pro rychlé ověření všech šablon.