Z Next.js do Astra: kdy statický web nepotřebuje SPA
Portfolio jako client-side aplikace se špatně indexuje. Poznámky z migrace, obecná doporučení a co mi výměna frameworku dala.
Moje portfolio bylo dlouho celé v Next.js jako client-side aplikace. V devtools to vypadalo dobře, ve výsledcích vyhledávání podstatně hůř. Migraci na Astro jsem dělal poprvé, takže sepisuju kombinaci toho, co se obecně doporučuje, a toho, na co jsem narazil sám — rozhodnutí samotné bych ale zopakoval.
Nejnázornější test je stáhnout si vlastní stránku tak, jak ji vidí robot. Když v odpovědi uvidíte prázdné tělo dokumentu a všechno ostatní dorenderuje až JavaScript, je to u webu, který má přivádět lidi z vyhledávání, docela zásadní vada.
Problém nebyl framework, ale render
Next.js umí generovat statické stránky, moje portfolio z toho ale nevyužívalo nic — texty, projekty i překlady se skládaly až v prohlížeči. Vyhledávače dnes JavaScript zpracují, ale pomaleji a hůř předvídatelně. Poučka, kterou si z toho odnáším: obsah, který se mezi návštěvami nemění, nemá důvod potřebovat runtime.
Co migrace obnášela
- Obsah z TypeScript konstant do databáze a šablon.
- Interaktivní části — formulář a redakce — jako izolované ostrůvky.
- Jedna URL na jazyk místo přepínání jazyka za běhu.
Nejvíc práce nebylo v komponentách, ale právě v posledním bodě. Přepínač jazyka, který jen mění stav, se z pohledu vyhledávače chová, jako by druhá jazyková verze neexistovala.
Pokud má něco vlastní obsah, mělo by to mít vlastní adresu. Platí to pro jazyky stejně jako pro články.
Kdy bych migraci nedělal
Kdyby šlo o aplikaci za přihlášením. Tam je většina stránek stejně neindexovatelná a hlavní výhoda mizí. Astro dává smysl tam, kde je obsah převážně statický a interaktivních míst je pár.
Co mi to dalo
Stránka se vykreslí prakticky bez JavaScriptu, blog má vlastní URL i sitemapu a psaní článku znamená otevřít redakci místo commitu. Zpětně mi přijde, že jsem si původně vybíral framework podle toho, co znám nejlíp, ne podle toho, co ten web vlastně dělá.
Berte to prosím jako zkušenost z jednoho webu, ne jako srovnání frameworků. Můžu popsat, co se změnilo u mě — ne tvrdit, že to tak dopadne u každého.