URL ako /produkty?cat=12&filter=novinky sa zle pamätajú, zle zdielajú a Google si s nimi v SEO zápasí. Pekné URL ako /produkty/elektronika/novinky/ sú jednoznačne lepšia voľba — pre používateľa aj pre vyhľadávač. Ukážeme, ako ich postaviť v Nette routeri vrátane filter stránok s viacerými hodnotami.
Prečo pretty URL záleží pre SEO
Google používa URL ako jeden zo signálov o obsahu stránky. Slovo v slug má len mierny prínos pre poradie vo vyhľadávaní, ale väčší benefit je v používateľskom správaní — ľudia kliknú častejšie na URL, ktorá vyzerá zrozumiteľne. Pre interné prelinkovanie a sociálne siete je to ešte výraznejšie.
Druhý dôvod je technický: filter stránky s rôznymi kombináciami query parametrov vytvárajú duplicitný obsah z pohľadu Google (rovnaký zoznam zoradený inak), čo robí správu canonical URL bolestivou.
RouterFactory v Nette 3
Nette router je deklaratívny — definujete URL vzor a presenter, framework sa postará o smerovanie aj generovanie URL cez n:href. Základ vyzerá takto:
$router->addRoute('produkty/<slug [a-z0-9-]+>', 'Produkty:detail');
Regex [a-z0-9-]+ vyžaduje, aby slug obsahoval len malé písmená, číslice a pomlčky — to chráni pred náhodnými URL útokmi a zaisťuje konzistentnosť.
Slugifikácia pre databázové entity
Pre slug je dobrá prax mať ho uložený priamo v databáze popri ID:
- ID: 12345 (interné)
- slug: elektronika (zobrazené v URL)
- title: „Elektronika" (zobrazené na stránke)
Keď klient zmení titulok kategórie, slug nemenete — inak by sa rozbili všetky existujúce odkazy. Slug nastavujete jednorazovo pri vytvorení a meníte iba ručne s premysleným redirectom.
Filtrovacie stránky s viacerými hodnotami
Tu to už začína byť zaujímavé. Predstavte si filter pracovných ponúk: kategória + región. Klasický prístup s query stringom by bol:
/ponuky?occupation[0]=200900005®ion_id[0]=206696
Ale my chceme:
/ponuky/doprava-logistika/stredocesky/
Riešenie v Nette: vlastná routa s dvomi slug parametrami a vlastný filter v presenteri:
$router->addRoute(
'ponuky/<occupation [a-z0-9-]+>/<region [a-z0-9-]+>/?',
'Ponuky:zoznam'
);
Presenter potom slugy preloží na ID kategórie/regiónu a filtruje. Pre kombinácie, ktoré nedávajú zmysel (napr. neexistujúca kombinácia), vrátiť 404 alebo presmerovať na nadradenú kategóriu.
Redirects zo starých URL
Keď meníte z query stringov na pretty URL, staré URL musia 301 presmerovať na nové, inak prídete o SEO hodnotu. V Nette to riešime jednoduchým záchytným presenterom, ktorý zachytí staré query parametre, preloží ich na nové slugy a urobí trvalé presmerovanie.
Canonical URLs
Bez ohľadu na pretty URL implementáciu nikdy nezabudnite na <link rel="canonical"> v hlavičke. Aj keď máte filter URL pekne navrhnutý, Google môže nájsť variantu s query stringom (z reklamy alebo nejakého starého odkazu), a canonical mu povie, ktorá je hlavná.
Záver
Pretty URL nie sú „nice to have" — sú základná hygiena moderného webu. Implementácia v Nette je premyslená a flexibilná, vďaka čomu zvládnete aj zložité filtrovacie scenáre bez kompromisov. Ak rozmýšľate o migrácii zo starých query stringov, vieme s tým pomôcť aj na bežiacom projekte.