URL jako /produkty?cat=12&filter=novinky se špatně pamatují, špatně sdílejí a Google si s nimi v SEO zápasí. Hezké URL jako /produkty/elektronika/novinky/ jsou jednoznačně lepší volba — pro uživatele i pro vyhledávač. Ukážeme, jak je postavit v Nette routeru včetně filtrovacích stránek s více hodnotami.
Proč pretty URL záleží pro SEO
Čistá URL struktura je jednou ze součástí technického SEO. Google používá URL jako jeden ze signálů o obsahu stránky. Slovo ve slugu má jen mírný přínos pro pořadí ve vyhledávání, ale větší benefit je v uživatelském chování — lidé kliknou častěji na URL, která vypadá srozumitelně. Pro interní prolinkování a sociální sítě je to ještě výraznější.
Druhý důvod je technický: filtrovací stránky s různými kombinacemi query parametrů vytvářejí duplicitní obsah z pohledu Googlu (stejný seznam seřazený jinak), což dělá správu canonical URL bolestivou.
RouterFactory v Nette 3
Nette router je deklarativní — definujete URL vzor a presenter, framework se postará o směrování i generování URL přes n:href. Základ vypadá takhle:
$router->addRoute('produkty/<slug [a-z0-9-]+>', 'Produkty:detail');
Regex [a-z0-9-]+ vyžaduje, aby slug obsahoval jen malá písmena, číslice a pomlčky — to chrání před náhodnými URL útoky a zajišťuje konzistenci.
Slugifikace pro databázové entity
U slugu je dobrá praxe mít ho uložený přímo v databázi vedle ID:
- ID: 12345 (interní)
- slug: elektronika (zobrazený v URL)
- title: „Elektronika" (zobrazený na stránce)
Když klient změní titulek kategorie, slug neměníte — jinak by se rozbily všechny existující odkazy. Slug nastavujete jednorázově při vytvoření a měníte jen ručně s promyšleným redirectem.
Filtrovací stránky s více hodnotami
Tady to začíná být zajímavé. Představte si filtr pracovních nabídek: kategorie + region. Klasický přístup s query stringem by byl:
/nabidky?occupation[0]=200900005®ion_id[0]=206696
Ale my chceme:
/nabidky/doprava-logistika/stredocesky/
Řešení v Nette: vlastní routa se dvěma slug parametry a vlastní filtr v presenteru:
$router->addRoute(
'nabidky/<occupation [a-z0-9-]+>/<region [a-z0-9-]+>/?',
'Nabidky:seznam'
);
Presenter pak slugy přeloží na ID kategorie/regionu a filtruje. Pro kombinace, které nedávají smysl (např. neexistující kombinace), vrátit 404 nebo přesměrovat na nadřazenou kategorii.
Redirecty ze starých URL
Když měníte z query stringů na pretty URL, staré URL musí 301 přesměrovat na nové, jinak přijdete o SEO hodnotu. V Nette to řešíme jednoduchým záchytným presenterem, který zachytí staré query parametry, přeloží je na nové slugy a udělá trvalé přesměrování.
Canonical URL
Bez ohledu na implementaci pretty URL nikdy nezapomeňte na <link rel="canonical"> v hlavičce. I když máte filtrovací URL hezky navržené, Google může najít variantu s query stringem (z reklamy nebo nějakého starého odkazu) a canonical mu řekne, která je hlavní.
Závěr
Pretty URL nejsou „nice to have" — jsou základní hygiena moderního webu. Implementace v Nette je promyšlená a flexibilní, díky čemuž zvládnete i složité filtrovací scénáře bez kompromisů. Pokud přemýšlíte o migraci ze starých query stringů, umíme s tím pomoct i na běžícím projektu.