Payload CMS v praxi: kedy po ňom siaham a kedy radšej nie
Payload je headless CMS pre Node.js postavené na TypeScripte. Obsah sprístupňuje cez API a frontend si riešiš po svojom (Next.js, čokoľvek). Schémy píšeš v TS, z ktorých sa automaticky skladá admin rozhranie. Dáta bežia na Postgresse alebo Mongo a celé je to self-host. Máš plnú kontrolu nad kódom, prístupmi (ACL), migráciami aj seedom. Nie je to klikací svet pluginov ako WordPress—je to dev-first nástroj, ktorý dáva slobodu aj zodpovednosť.
Kedy po Payload siaham
Keď potrebujem programátorské CMS, nie krabicové riešenie. Konkrétne:
Custom obsahový model & atypické blokyModulárne sekcie, zanojené bloky, polymorfné polia, vlastné validácie. Žiadne obchádzky cez pluginy, všetko v schémach.
Jeden jazyk pre celý tím (JS/TS)Shared typy medzi frontom a backendom, jedna codebase/monorepo, menej chýb, lepší DX.
Plná kontrola a vlastníctvo dátSelf-host (Docker), Postgres/Mongo, migrácie a seed skriptmi, bez vendor lock-inu a SaaS limitov.
Výkon/SEO riešim na fronte, CMS je len APINext.js (RSC, ISR/SSG), čisté routy, vlastné OG generovanie, štruktúrované dáta. Payload len spoľahlivo servuje obsah.
Bezpečnosť a granularita prístupovRole, field-level/row-level access, guards v kóde, webhooks. Presne určím, kto čo vidí a môže upraviť.
(Typické use-casy: landing builder s blokmi, komplexné case studies, multijazyčný web s rozdielnymi layoutami, privátne sekcie podľa rolí.)
Kedy ho neodporúčam
„Marketingový web na zajtra“ s plug-and-play ekosystémomKeď potrebuješ hotové moduly (formuláre, galérie, A/B testy, SEO boxy, buildery) a stovky pluginov, rýchlejšie ťa tam dostane WordPress (resp. Webflow/Wix) s hotovými šablónami.
Tím bez vývojára / bez kapacity na infraPayload je dev-first a self-hosted. Ak nechceš riešiť Docker, aktualizácie a CI/CD, siahnite po hostovanom CMS (Sanity, Contentful, Storyblok) alebo WordPress Managed hosting.
Projekt závislý od komunitných ekosystémovŠiroké e-commerce (WooCommerce), LMS, „form builder“ ekosystém, membership pluginy… Tu má WordPress/Shopify výrazný náskok v dostupných rozšíreniach.
Ultra krátky čas / malý rozpočetAk ide hlavne o rýchle spustenie a nízku cenu, jednoduchá šablóna vo WP/Webflow bude efektívnejšia než stavať Payload schémy a frontend od nuly.
Editor-first obsah s pokročilým WYSIWYG workflowKeď je kľúčové, aby si obsaháci skladali layouty na pixel presne bez zásahu devov, zváž Storyblok/Sanity/Webflow, ktoré majú editor-centrické UI.
Nie je to hejt na Payload—len voľba správneho nástroja pre konkrétny use-case.
Rýchle porovnanie (prakticky, nie akademicky)
Payload vs WordPress
Kedy WP: chceš hotové pluginy, šablóny, formuláre, e-shop a „klikacie“ riešenia ASAP.
Kedy Payload: potrebuješ čistý kód, typovanie v TS, custom schémy a headless front (Next.js/SSR/ISR).
Trade-off: WP = rýchly štart a ekosystém, no plugin-hell a ťažšie typovanie; Payload = viac práce na začiatku, zato kontrola, performance a DX.
Payload vs Strapi
Kedy Strapi: rýchly onboarding, veľa návodov, slušný marketplace doplnkov.
Kedy Payload: TS-first DX, presné ACL (field/row level), veľmi flexibilné schémy bez „mágie“.
Trade-off: Strapi = pohodlné „štartujem a idem“, Payload = viac low-level kontroly a typovej istoty.
Payload vs Sanity
Kedy Sanity: skvelý editor-first zážitok, real-time spolupráca, hostované „bez starostí“.
Kedy Payload: potrebuješ mať infra a dáta u seba (on-prem/self-host), bez vendor lock-inu.
Trade-off: Sanity = pohodlie a UX pre obsahákov (za cenu závislosti na cloude), Payload = plné vlastníctvo infra a dát, dev-first prístup.
Referenčný stack (ako by som to skladal)
Frontend – Next.js (App Router, RSC, ISR/SSG, edge OG)
Pre SEO a rýchlosť: ISR/SSG na public stránky, SSR len kde treba.
RSC zníži JS na klientovi; generateMetadata() + edge handler na OG obrázky.
next/image + CDN = lacná optimalizácia médií.
CMS – Payload + Postgres
Schémy v TypeScripte (shared typy medzi FE/BE), verzovanie, draft/review.
Webhooky/hooky (afterChange) na indexáciu do vyhľadávania alebo regen ISR.
Postgres kvôli spoľahlivosti, migráciám a jednoduchému backupu.
Súbory – Cloudflare R2 / S3 kompatibilné úložisko
Upload cez presigned URLs; origin v R2, doručovanie cez CDN.
Automatické transformácie cez sharp (server-side) alebo CDN variants.
Povinný alt a rozumné limity veľkosti pri uploade.
Hostovanie – Vercel (web) + Docker (CMS + DB)
Web: Vercel pre jednoduchý CI/CD, preview deploye, edge funkcie.
CMS+DB: Render/Railway/Fly.io alebo vlastný VPS (Docker Compose).
Oddelené škálovanie, pravidelné zálohy DB, health-checky, uptime monitoring.
Alternatíva: všetko na vlastnom VPS (lacnejšie, ale viac správy).
Autentifikácia – Payload Access Control + (príp. OAuth/SAML)
Field/row-level ACL priamo v Payload.
Externé identity (Keycloak/Auth0/Azure AD) podľa potreby — SSO pre väčšie tímy.
Pre FE (ak je privátny obsah): JWT/session guard, náhľady cez Next.js Preview Mode.
Vyhľadávanie – Meilisearch/Typesense (ak treba full-text)
Indexácia cez Payload hooky pri publish/update/delete.
Synonymá, typo tolerance a facety (kategórie/tagy).
Bezpečné query (scoped filters podľa rolí, ak je privátny obsah).
CI/CD & „lepidlo“
GitHub Actions: type-check, testy, build, migrácie DB po deployi.
Revalidácia ISR po publikovaní (webhook → /api/revalidate).
Observabilita: logs + uptime + error tracking (Sentry/Logtail).
[Editor] ──> Payload (API, ACL, Postgres) ──> R2/S3 (media)
│ │ └─(webhooky)──> Meilisearch
└───────────────(Preview)──────────┘
│
Next.js (Vercel, ISR, Edge OG)
│
CDN
Tento setup dáva kontrolu, výkon a škálovanie bez vendor lock-inu, ale stále s rozumnou mierou komfortu (Vercel pre FE, managed hosting pre BE podľa chuti).
Obsahový model (príklad)
Cieľ: mať čitateľné schémy, ktoré sa dobre editujú, majú jasné vzťahy a nepreťažujú admin.
Pages (flex bloky)
Polia: title, slug, seo{title, description}, blocks, status(draft/published), publishAt, updatedBy.
Bloky (union): Hero, RichText, Text+Media, ImageGallery, CTA, Quote, FAQ, Stats, LogoCloud.
Poznámky: validácia unikátneho slug, náhľady (Preview Mode), verzovanie.
Blog / Novinky
Polia: title, slug, excerpt, coverImage, content (tie isté bloky ako Pages), categories, tags, readingTime, author, publishedAt.
Automatika: generovanie OG obrázkov, RSS feed, canonical, štruktúrované dáta Article.
Vzťahy: author → Users; categories/tags → taxonómie.
Projekty / Case studies
Polia: title, slug, summary(KPI), stack (Next.js, Payload, R2…), role, timeline{from,to}, results (metriky), gallery, testimonial (odkaz na Referenciu), link/demo.
SEO/Schema.org: Project/CreativeWork + BreadcrumbList.
Použitie: ideálne pre landingy kampaní a portfólio.
Referencie
Polia: name, role, company, avatar, quote, relatedProject (odkaz).
Zásady: povinný súhlas/zdroj citácie, obmedziť dĺžku quote.
Médiá
Polia: file, alt (povinné), caption, focalPoint, license, sourceUrl.
Governance: limity veľkosti, povolené typy (webp/png/jpg/svg), automatické varianty veľkostí; audit kto čo nahráva/maže.
CDN: ukladanie do R2/S3, doručovanie cez CDN.
Taxonómie (Categories, Tags)
Polia: title, slug, voliteľné description, color.
Použitie: facety vo vyhľadávaní (Meilisearch/Typesense).
i18n (ak treba viac jazykov)
Model: buď per-dokument lokalizácie (jedna entita s poliami per jazyk), alebo separátne dokumenty s locale + baseId.
Polia: locale (sk/cs/en…), localizedSlug, hreflang.
SEO: generovať alternate odkazy a sitemap per jazyk, kontrola konzistencie prekladov.
Cross-cutting pravidlá
Stavy & workflow: draft → review → published, verzovanie a revert.
ACL: editor môže obsah, admin aj SEO/redirecty; field/row-level access (napr. privátne projekty).
Redirecty: kolekcia Redirects (from, to, type 301/302) pre čistú migráciu.
Indexácia: webhooky/hooky na reindex do vyhľadávania a revalidáciu ISR.
Kvalita: validácie (povinné alt, dĺžky title/desc), automatický readingTime, „broken links“ check v RichTexte.
Tento model je „štíhly“, no pokryje stránky, blog, portfólio aj referencie; vie rásť o ďalšie bloky bez prestavby celého CMS.
Workflow a práva
Role
Owner – správa rolí a prístupov, SEO/redirecty, nasadenia, kritické publishy.
Editor – plný obsah (Pages/Blog/Projekty), SEO polia, plánovanie publikácie, schvaľuje cudzie drafty.
Author – píše a upravuje svoje drafty, nahráva médiá, vidí náhľady; publish ide cez Review.
Reviewer – kontrola faktov/štýlu/SEO, komentuje, schváli/vráti; nepíše nové stránky.
Stavy a prechody
Draft → Review → Published
Autor uloží Draft → odošle na Review (notifikácia Editor/Reviewer).
Reviewer prejde checklist (nižšie), pridá komentáre alebo Approve.
Editor urobí Publish alebo Schedule (napr. 2025-09-12 09:00).
Verzionovanie & revert – každý publish vytvorí snapshot; možnosť Revert to… pri regresii.
Pravidlá/ACL (príklady)
Author môže editovať iba dokumenty s createdBy = me.
Reviewer môže meniť iba status (review notes), nie obsah sekcií.
Editor má write na SEO polia, redirecty a „pinned“ položky.
Owner jedinečný write na Redirects, Settings, Users.
Validácie pred publikovaním (hard-fail)
Médiá: povinný alt (min. 5 znakov), žiadne 0×0, max. veľkosť X MB.
SEO: metaTitle 45–60 znakov, metaDescription 120–160; canonical z whitelistu domén.
Slug: unikátny v rámci kolekcie; bez diakritiky, malými písmenami.
Obsah: bez prázdnych blokov, žiadne broken internal links (lint pre rich text).
i18n: ak je zapnuté, musí existovať aspoň fallback pre defaultLocale.
Checklist v Review (soft-fail, ale upozorní)
Čitateľnosť (krátke odseky, medzititulky).
Zrozumiteľné CTA.
Štruktúrované dáta (Article/Project) generujú sa OK?
OG náhľad sedí (cover, title).
Interné prelinkovanie na 2–3 relevantné stránky.
Náhľady & kolízie
Preview Mode v Next.js na každú zmenu; link v admin paneli.
Content lock – pri otvorení dokumentu sa uzamkne na 10 min; druhý editor má iba read-only (predíde sa konfliktom).
Publikovanie
Immediate (revalidate route) alebo Scheduled (CRON/webhook).
Pri publishi: webhooky → reindex vyhľadávania, revalidácia ISR, ping sitemap.
Audit & notifikácie
Log: kto čo zmenil, diff blokov, revert história.
E-mail/Slack: „Draft → Review“, „Approved“, „Published/Scheduled“.
Mesačný report: top upravovatelia, najčastejšie chyby validácií.
Týmto nastavením máš poriadok v právach, istotu kvality pri každom publishi a spätnú stopu na rýchly návrat, keď sa niečo pokazí.
Výkon a SEO
ISR/SSG podľa typu obsahu
Static/ISR: blog, referencie, projekty → revalidate per route (napr. 60–600 s).
SSR len tam, kde treba: personalizácia, privátne sekcie.
On-demand revalidate: po publishi z Payload webhook → revalidatePath('/blog') alebo revalidateTag('post:123').
Štruktúrované dáta (JSON-LD)
Article pre blog, CreativeWork/Project pre case studies, BreadcrumbList pre navigáciu.
Generovať z rovnakých dát ako stránku (bez duplikácií), validovať cez Rich Results.
OG obrázky na edge
Dynamické OG (title, author, cover) cez edge runtime (@vercel/og/Satori).
Cache na CDN, fallback pri chýbajúcej fotke, kontrola kontrastu textu.
i18n: hreflang, sitemap, canonical
Pre každý jazyk pridaj hreflang + x-default.
Canonical vždy na primárnu verziu obsahu (vyhneš sa duplicitám).
sitemap.xml generovaná serverom (per jazyk, s lastmod), robots.txt s povolením CDN cache.
Rýchlosť načítania
next/image (šírky, výšky, priority pre above-the-fold), lazy-load inde.
CSS minimalizovať (bez zbytočných knižníc), fonty display=swap + preconnect.
Code-splitting podľa route, vyhýbať sa „heavy“ klientskym knižniciam.
CDN pre obrázky a statické assety, HTTP/2 push už netreba – stačí preconnect.
Web Vitals & merania
Plausible (lightweight) alebo GA4; skripty s defer.
Trackuj LCP, CLS, INP; loguj „web-vitals“ eventy do analytics.
Error tracking (Sentry), 404/500 monitor, uptime + logy.
SEO hygiene
Titulky 45–60 znakov, meta popisy 120–160.
Jedna H1 na stránku, interné prelinkovanie (2–3 relevantné odkazy).
Alt text povinný, lazy-load videí (iframe → preview).
301 pri zmene slugov (kolekcia Redirects v CMS).
Build & cache stratégia
Stabilné ETag/Cache-Control pre statické assety (dlhá TTL + hash).
ISR stránky s krátkou TTL, ale CDN pred nimi.
Revalidácia po publishi trvá milisekundy, takže žiadne ručné rebuildy.
Skrátka: statika tam, kde to ide, ISR + on-demand pri obsahu, SSR iba výnimočne. K tomu čisté JSON-LD, edge OG, správne hreflang/canonical a priebežné meranie LCP/CLS/INP.
Migrácia (ak prichádzam z iného CMS)
Cieľ: zachovať organiku, URL paritu a kvalitu obsahu bez výpadkov.
0) Pre-flight
Content freeze okno (napr. 24–48 h pred switchom).
Záloha starého CMS (DB, media).
Vytvoriť mapu URL → URL (staré → nové).
1) Audit URL a interných odkazov
Vytiahni zoznam všetkých indexovaných a živých stránok (sitemap + crawl).
Označ kanonické URL, zduplikované, 404/5xx, reálne návštevné „top“ stránky.
Exportuj interné odkazy (kde čo linkuje).
2) Export → transform → import
Export: obsah (stránky, články, taxonómie), médiá, používateľov.
Transform:
prevod HTML → bloky (ak ideš na block-based model),
normalizácia slug, excerpt, cover, readingTime,
mapovanie kategórií/tagov, generovanie ID referencií,
náhrada interných odkazov na nové cesty.
Import: cez skripty/migrácie do nových kolekcií (Batch + validácie).
3) Médiá
Upload do R2/S3 (zachovať štruktúru/mená, alebo spraviť manifest old → new).
V texte premapovať src → CDN URL; pridať chýbajúce alt.
4) 301 presmerovania
Vytvor kolekciu Redirects alebo serverový súbor pravidiel.
Pokry „1:1“ presne, pre zvyšok použi vzorové pravidlá (kategórie/tagy).
Príklad (NGINX):
# 1:1
rewrite ^/blog/2019/old-post$ /blog/old-post permanent;
# Vzory
rewrite ^/category/(.*)$ /blog/category/$1 permanent;
rewrite ^/tag/(.*)$ /blog/tag/$1 permanent;
Príklad (Netlify _redirects):
/blog/2019/old-post /blog/old-post 301
/category/:name /blog/category/:name 301
5) Paralelná „šedá prevádzka“
Nasadiť nový web na beta.domena.sk alebo new.domena.sk.
NOINDEX na betu, BasicAuth pre istotu.
V betaverzii skontrolovať: štruktúrované dáta, hreflang, canonical, OG, rýchlosť.
6) QA checklist
URL parity: top 200 stránok má buď identickú URL alebo 301.
Interné linky: žiadne #/404; správne relatívne/absolútne tvary.
Sitemapa/robots: generuje sa, obsahuje len 200 stránky, lastmod OK.
i18n: hreflang funguje, každý jazyk má správny canonical.
Formuláre: odosielanie + antispam + notifikácie.
Media: responsive srcset, WebP/AVIF, lazy-load.
Analytics: GA4/Plausible nasadené, udalosti fungujú.
7) Switch deň
Nasmeruj DNS (alebo prehoď proxy).
Zruš NOINDEX na produkcii.
Nahraj 301 pravidlá, publikuj sitemap do Search Console.
Spusti on-demand revalidate (ak používaš ISR) pre kľúčové stránky.
8) Post-launch monitoring (1–2 týždne)
Search Console: Coverage, Redirects, Page Experience, Rich Results.
Logy 404: dopĺňaj chýbajúce 301 podľa reality.
Web Vitals: LCP/CLS/INP, prípadné regresie.
Analytics: porovnaj organiku a vstupné stránky; skontroluj UTM a referaly.
Indexácia: po pár dňoch re-submit sitemapy, skontroluj kanonické URL.
Tipy
Zachovaj stále ID (alebo mapu oldId → newId) pre referencie & komentáre.
Pri veľkých blogoch migruj v dávkach (napr. rok po roku).
Pre staré RSS feedy sprav 301 na nový feed (zachováš odberateľov).
Ak meníš doménu, urob Change of Address v Search Console.
Výsledok: plynulý prechod, zachované pozície v organike, čisté URL a rýchlejší web bez strát trafficu.
Náklady a údržba (high-level)
Predpoklady: 1 web bez e-shopu, Pages + Blog + Projekty + Referencie, 1–2 jazyky, headless (Payload + Next.js).
Odhad prác (hodiny)
Implementácia schém a adminu: 20–40 h
Frontend šablóny a bloky: 50–100 h
Infra (Docker, CI/CD, monitoring): 10–20 h
Migrácia + redirecty: 10–25 h
QA/SEO & spustenie: 8–16 h
Spolu: ~98–201 h (podľa rozsahu a i18n).
Balíčky podľa rozsahu
Basic (landing + blog + referencie, 1 jazyk): 53–97 h
Standard (marketing web + blog + projekty + referencie, 1–2 jazyky): 116–201 h
Advanced (viac blokov, i18n 3+, náhľady, vyhľadávanie, granular ACL): 216–373 h
(Ilustračný prepočet pri 60 €/h: Basic 3 180–5 820 €, Standard 6 960–12 060 €, Advanced 12 960–22 380 €.)
Mesačná údržba (paušál)
Basic: 3–6 h/mes (zálohy, aktualizácie, uptime, drobné úpravy) → 180–360 €/mes
Standard: 6–10 h/mes (plus audit SEO, logging) → 360–600 €/mes
Advanced: 10–20 h/mes (plus staging, load/SEC skeny) → 600–1 200 €/mes
Doplnky (voliteľné)
Full-text (Meilisearch/Typesense): 6–14 h (360–840 €)
Newsletter integrácia + auto-RSS: 4–8 h (240–480 €)
Dynamický OG generátor: 3–6 h (180–360 €)
Formy + antispam + notifikácie: 4–10 h (240–600 €)
Mini checkout/Stripe (donations/licencie): 12–24 h (720–1 440 €)
Consent + pokročilé analytics (GA4/Plausible + events): 3–6 h (180–360 €)
Rozšírený CI/CD (testy, migrácie, revalidate hooks): 6–12 h (360–720 €)
Čo je (ne)zahŕňané
Zahŕňa: kód, infra nastavenie, SEO základy, dokumentáciu, školenie 1–2 h.
Nezahŕňa: tvorbu obsahu, copy, branding, foto/video, platené tretie služby (hosting, DB, CDN, e-mail).
Ak chceš, prispôsobím rozsahy na tvoje konkrétne stránky/bloky a dám pevnejšiu ponuku.
Checklist: Je Payload pre vás?
Odpovedz „áno/nie“:
Máte JS/TS tím (alebo externistu), čo zvládne aj Docker/CI/CD?
Potrebujete custom obsahový model (flex bloky, zložité vzťahy, validácie)?
Chcete self-hosted kontrolu nad infra a dátami (bez vendor lock-inu)?
Front riešite v Next.js (SSR/ISR) a CMS má byť len API?
Granulárne prístupy/ACL (na úroveň polí či záznamov) sú pre vás dôležité?
Nevyžadujete stovky „klikacích“ pluginov a šablón hneď po inštalácii?
Nevadí vyššia investícia na začiatku výmenou za čistý kód a dlhodobú kontrolu?
Viete nastaviť monitoring, zálohy a update cyklus (aspoň light ops)?
Editorom stačí dev-pripravené UI, nechcú pixel-perfect page builder?
Rátate s rozširovaním schém v kóde, nie klikaním v marketplace?
Rýchle skóre:
7–10 × áno: Výborný kandidát na Payload.
4–6 × áno: Zváž alternatívy (Strapi/Sanity) podľa priorít.
0–3 × áno: Skôr WordPress/Webflow (rýchly štart, bohatý ekosystém).
Red flags (skôr nie):
„Potrebujeme zajtra marketing web s 20 pluginmi.“
„Nemáme dev kapacity ani na údržbu.“
„Sme závislí od Woo/LMS/Form builder ekosystému.“
FAQ
Dá sa hostovať kdekoľvek?Áno. Payload je Node appka → Docker a bežíš ju kde chceš (VPS, Render, Railway, Fly.io, Kubernetes).
DB: Postgres (odporúčané) / Mongo.
Médiá: S3-kompatibilné (Cloudflare R2, MinIO, AWS S3).
Frontend: napr. Vercel. Backoffice (Payload) drž oddelene od FE, kvôli škálovaniu a bezpečnosti.
Vie fungovať s Next.js preview?Áno, jednoducho cez Preview Mode.
V Payload-e pridáš tlačidlo „Preview“ (url s token + id).
V Next-e route /api/preview overí token, zapne preview cookie a redirectne na slug.
Pri publishi spúšťaš on-demand revalidate (webhook → revalidatePath() / revalidateTag()).
Ako riešiť full-text?Meilisearch alebo Typesense.
Indexuješ cez Payload hooky (afterChange/afterDelete).
Definuješ, ktoré polia idú do indexu (title, excerpt, content).
Filtre/facety na kategórie/tagy; pri privátnom obsahu pridaj scoped filters podľa rolí.
Čo s obrázkami a optimalizáciou?Ukladať do R2/S3, doručovať cez CDN, render na FE cez next/image.
Upload cez presigned URL, ulož origin a generuj varianty (sharp/CDN).
Preferuj WebP/AVIF, nastav Cache-Control s dlhým TTL.
V CMS enforce alt text a limity veľkosti; pri galériách udržuj focal point.
Je to vhodné pre e-shop?Skôr pre custom checkout (Stripe, jednoduché košíky, licencie/donations).Na plnohodnotný e-shop (inventár, platby, dopravcovia, fakturácia, DPH) je efektívnejší Shopify/Medusa/Saleor alebo WooCommerce. Payload vie poslúžiť ako CMS vrstva (obsah, landingy), nie ako „všetko-v-jednom e-commerce“.
Záver + CTA
Payload dáva najväčší zmysel, keď potrebuješ plnú kontrolu nad kódom a dátami, typovanie v TypeScripte a custom obsahový model bez kompromisov. Nie je to klikací balík na „zajtra“, ale dlhodobo udržateľný základ pre projekty, kde sa ráta kvalita, výkon a rozšíriteľnosť.
Ak zvažujete Payload pre váš projekt, ozvite sa — navrhnem architektúru a realistický rozpočet.
Čítať viac →