Proč jsem skončil s WordPressem — a co mi dal vlastní CMS u 16 webů

6 minut čtení

📌 Co se v článku dočtete

  • Proč mě WordPress po letech přestal stačit (a nevadilo mi to).
  • Co konkrétně získám tím, že mám vlastní redakční systém.
  • Kolik mě stojí v čase a kolik ušetřím na licencích a údržbě.
  • Kdy bych WordPress klientovi pořád ještě doporučil — a kdy už ne.
  • Časté námitky a jak jsem si je sám vyvracel.

Když se mě někdo zeptá, na čem dělám weby, vidím, jak v tu chvíli čekají, že řeknu „WordPress". Když odpovím „vlastní CMS, v PHP, bez frameworku", obvykle se zarazí. „Vlastní? Není to šílený nápad? Vždyť WP má sto tisíc pluginů…"

Tenhle článek je odpověď na tuhle otázku. Mám šestnáct vlastních webů, všechny běží na vlastním systému, který si píšu už víc než rok. Ne, není to šílený nápad — pro mě je to za daných okolností jednoznačně lepší volba. A za chvíli vysvětlím, proč.

Jak to celé začalo

Začínal jsem stejně jako každý — instaloval jsem WordPress. Pět minut, theme, pár pluginů, hotovo. Léta jsem to měl rád. Pak přišly první servisní problémy: vždycky v pátek večer mi spadl plugin po automatické aktualizaci, jednou se mi povedlo, že po update Yoast SEO zmizel veškerý meta description, jindy mi cizí plugin přepsal noindex u celého blogu.

Postupně jsem zjišťoval, že:

  1. Většinu věcí, které potřebuju, jsem stejně řešil vlastními úpravami — vlastními pluginy v PHP, custom kódem v functions.php.
  2. Performance WordPressu s nahromaděnými pluginy byla nutně horší než cokoliv, co bych napsal sám.
  3. Bezpečnost byla průběžná starost — pluginy s děrami, krádeže přístupů, brute-force pokusy o admin.
  4. Cena pluginů postupně rostla — Yoast Premium tady, Elementor Pro tam, WP Rocket, ACF Pro, security pluginy, backup pluginy. Najednou jeden web stál na licencích pár tisíc ročně.

Když mi pak Claude Code umožnil vyvíjet vlastní řešení rychlostí, jakou bych si dřív neuměl představit, řekl jsem si: zkusím to bez WP. Postavím jeden web vlastnoručně a uvidíme, jestli to vůbec stojí za to.

Postavil jsem prazskemuzikaly.cz. Pak zverac.cz. Pak bigg.cz, realfree.cz, fman.cz, ebar.cz, tipy-na-dárek… postupně se z toho stalo šestnáct projektů. Žádný z nich už ve WordPressu nepoběží.

Co mi vlastní CMS reálně dal

Plnou kontrolu nad výkonem

Tohle je věc, která mi přijde nejvíc viditelná. Když si vezmu webpj.cz, frontend je server-rendered PHP, malé množství JavaScriptu (kousek Alpine.js), critical CSS inline v hlavičce, fonty hostované u sebe. Žádný plugin přidávající jQuery, žádný plugin s vlastním CSS bundlem, žádné nesmyslné requesty. Mám pod kontrolou každý byte, který stránka načítá — a podle toho i ladím PageSpeed metriky.

Když si tu samou stránku představím ve WordPressu s podobnou funkcionalitou (blog, slovník, portfolio, leady), nutně bych potřeboval čtyři pět pluginů, theme, builder, cache plugin, image plugin. Každý z nich má vlastní CSS a JS. Začínáte na třiceti hesech a optimalizujete dolů. Já začínám na nule a přidávám jen to, co opravdu potřebuju.

💡 Praktický rozdíl: webpj.cz má jediný frontend CSS soubor (kompilovaný podset Tailwindu), jediný JS soubor (Alpine.js, self-hosted) a fonty (Inter + Space Grotesk WOFF2 ze stejné domény). Žádný request mimo vlastní doménu kromě GTM a Microsoft Clarity. To nejde s WordPressem nasimulovat, ať se snažíte, jak chcete.

Bezpečnost, ze které se nemusím probouzet

Velká část servisních volání u WordPressových webů, které jsem dříve měl, se týkala bezpečnosti — někdo se snažil dostat dovnitř, plugin měl odhalenou zranitelnost, brute-force na /wp-admin/. WordPress je natolik rozšířený, že je standardním cílem útoků.

Můj systém je v každém z šestnácti webů trochu jiný — sdílí stejné jádro, ale konkrétní endpointy a URL struktura jsou unikátní. Standardní WordPress útoky na něm prostě neprojdou. Bezpečnost řeším na vlastní úrovni: PDO prepared statements, CSRF tokeny, password_hash, security headers (HSTS, CSP, X-Frame-Options atd.), reCAPTCHA Enterprise.

Na každém webu mám navíc vlastní modul Bezpečnost v adminu, který v reálném čase loguje podezřelé aktivity — neúspěšné pokusy o přihlášení, masivní 404, scrapování, neobvyklé požadavky. Když některá IP překročí hranici, automaticky se zabanuje. Na e-mail mi zároveň chodí upozornění, takže o všem důležitém vím dřív, než to může něco napáchat. Zatím jsem za celou dobu provozu šestnácti webů neměl jediný bezpečnostní problém — což ve WordPressu, kde se přepínám mezi několika administracemi a každý plugin je potenciální díra, můžu jen těžko prohlásit.

Modul Bezpečnost — přehled karet s počtem neúspěšných přihlášení, 404 chyb, aktivních a automatických banů, plus tabulka podezřelého provozu (IP s nejvíce požadavky)
📸 Modul Bezpečnost v adminu prazskemuzikaly.cz — přehledové karty + IP s nejvíce požadavky. Automatický ban po 3 neúspěšných pokusech.
Modul Bezpečnost — log posledních neúspěšných přihlášení s časy, IP adresami a použitými e-maily; tabulka Top 404 chyb (např. /wp-content/uploads/* pokusy o nalezení WordPressu); přehled všech 404 chyb s URL a IP
📸 Neúspěšná přihlášení a 404 chyby. Když někdo zkouší /wp-content/uploads/... nebo /404.php, vidím to a IP automaticky letí do banu.
Modul Bezpečnost — seznam podezřelých IP adres s počtem pokusů a e-maily použitými k pokusu o přihlášení; panel správy logů (celkem 173 226 záznamů, smazání a vyčištění); formulář pro manuální zabanování IP na 48 hodin / týden / měsíc / permanentně, plus přehled aktivních banů
📸 Podezřelé IP adresy a správa banů. Můžu IP zabanovat ručně na 48 h / 7 dní / 30 dní / permanentně, zároveň vidím všech 173 tisíc bezpečnostních záznamů.

Žádné licence, žádné předplatné

U WordPressu se vám pomalu, ale jistě nasčítají placené pluginy — něco na SEO, něco na page builder, něco na cache, něco na zálohy, něco na bezpečnost. Každý z nich stojí ročně pár stovek až tisíc, a u šestnácti webů se z toho stane částka, která pomalu, ale jistě bolí.

U vlastního CMS tohle prostě není. Nic z toho neplatím — všechno mám napsané jako součást systému. Ušetřené peníze jdou rovnou do mojí kapsy nebo do nového rozvoje samotné platformy.

Vlastní moduly, které ve WP neexistují

Na webpj.cz mám například funkci autolink_glossary(), která automaticky obaluje výskyty 100+ pojmů v každém článku do odkazů na slovník. První výskyt termínu v článku se obalí, další ne. To není věc, kterou by nějaký WordPress plugin uměl — musel bych si ji stejně napsat sám. Tady ji prostě mám jako součást systému.

Stejně tak vlastní page builder — drag & drop sestavování stránek z bloků, kde každý projekt má vlastní sadu bloků podle toho, co reálně potřebuje. To znamená žádné generické bloky „pro všechno", ale přesně to, co dává smysl pro daný web. Dva příklady ze dvou různých projektů:

Page builder Fanshopu — Tipovačka zápasů HC Energie Karlovy Vary. Nabídka bloků: Nadpis, Text, Obrázek, Galerie, Tlačítko, Mezera, Oddělovač, HTML, Ikona, CTA lišta, Rozcestník, Záložky, Další záložka, Upozornění. Vpravo živý náhled stránky
📸 Page builder Fanshopu — Tipovačka HC Energie Karlovy Vary. Bloky pro fan-content: Záložky, Rozcestník, CTA lišta, Upozornění. Vlevo paleta bloků, vpravo živý náhled.
Page builder webu Mycí centra pro zemědělství a průmysl. Nabídka bloků: Nadpis, Text, Obrázek, Galerie, Tlačítko, Mezera, Oddělovač, HTML, Ikona, Články, Reference, CTA lišta, Rozcestník. Vpravo náhled landing page s tmavým hero
📸 Page builder webu pro mycí centra — jiný projekt, jiné bloky. Místo Záložek tu jsou bloky Články a Reference — protože tahle stránka potřebuje ukazovat realizace a blog, ne fan-content.

Tohle je klíčový rozdíl proti WordPressu a Elementoru: bloky se přidávají podle potřeb konkrétního projektu. Nemusíte se učit jeden builder, který umí všechno (a stojí licenci). Každý web dostane jen ty bloky, které dávají smysl pro jeho účel — a žádné další navíc.

Nebo na zverac.cz vlastní visual page builder (drag & drop sestavování stránek) a vlastní drag & drop editor e-mailů s automatizací rozesílání — místo abych klientovi platil Mailchimp nebo SmartEmailing, mám newslettery, transakční e-maily i opt-in sekvence přímo v systému. Vlastní šablony, vlastní logika, vlastní data. Ve WP bych obvykle skládal Elementor + MailPoet a stejně bych musel obcházet jejich omezení vlastním kódem.

E-mail builder TrackDayShop — drag & drop sestavování e-mailu z bloků (Header, Hero, Text, Nadpis, Obrázek, Tlačítko, Oddělovač, Mezera, 2 sloupce). V náhledu šablona uvítacího e-mailu s personalizovaným nadpisem „Ahoj {{first_name_vocative}}!
📸 Drag & drop e-mail builder na TrackDayShop.cz — bloky se přetahují zleva, vpravo je živý náhled, personalizace přes proměnné jako {{first_name_vocative}}. Žádný Mailchimp, žádné měsíční předplatné.
Automatizované kampaně TrackDayShop — Svátková přání (automaticky podle českého kalendáře), Opuštěné košíky (připomene zákazníkům nedokončený nákup), Dotazník spokojenosti (po doručení objednávky), Hlídací pes (produkt zpět na skladě), Ztráta věrnostní úrovně
📸 Automatizované marketingové kampaně — 5 výchozích scénářů (svátky, opuštěné košíky, dotazník spokojenosti, hlídací pes na sklad, ztráta věrnostní úrovně). Každá má vlastní šablonu, nastavení, statistiky.

Nebo na realfree.cz hlídací psy — uživatel si nastaví filtr a do hodiny po každém novém inzerátu, který tomu filtru odpovídá, mu přijde push notifikace. Tohle si představte řešit ve WordPressu — buď ručně, nebo lepením z pěti pluginů.

Modul Hlídací psi v admin panelu RealFree: 7 celkem, 5 aktivních, 118 shod, 38 odeslaných e-mailů, 0 % otevřenost. Tabulka s jednotlivými hlídači — Byt (Prodej, Ostrava, denně, aktivní), Prodej (29 shod, 8 e-mailů, pozastaveno), Praha nájem (52 shod)
📸 Modul „Hlídací psi" v adminu RealFree.cz — přehled všech aktivních hlídačů, jejich kritérií, frekvence rozesílání a počtu shod. Vše je vlastní; uživatel si v profilu nastaví hlídače sám.

AI-friendly z principu

Když jsem začal optimalizovat weby pro AI vyhledávače, ukázal se další moment, kdy mi vlastní CMS pomohl. Schema.org strukturovaná data mám na každé stránce přesně podle obsahu, ne jako generický plugin výstup. Vlastní llms.txt. Vlastní glossary se 100+ termíny propojený na obsah článků (i přes oba automatické autolinky). Tohle všechno mám napsané přesně tak, jak chci. Žádný WP plugin nikdy nedosahuje stejné úrovně přizpůsobení.

A co WordPress umí líp?

Nejsem k WordPressu nespravedlivý. Pro určité projekty pořád dává smysl — a v některých případech je dokonce lepší volbou než cokoliv jiného.

Kdy WordPress doporučím: v podstatě jen tehdy, když má klient nulový rozpočet na web, do vývojáře investovat nechce a naklikne si jednoduchou prezentaci svépomocí. Hotová témata, pár pluginů, půl dne práce — k tomu je WordPress přesně postavený.

Naopak — kdy vlastní CMS dává smysl

Z mé zkušenosti:

  1. Specializovaný web, který se nedá z polotovarů složit (srovnávač cen, divadelní agregátor, realitní portál, affiliate web s vlastní logikou).
  2. Performance je kritická — třeba pro SEO v náročných nikách nebo pro mobilní uživatele se slabým signálem.
  3. Bezpečnost je kritická — finanční služby, citlivá data, weby s vysokou návštěvností (větší cíl pro útočníky).
  4. Plánujete víc webů na stejné platformě — vlastní jádro se vyplatí, jakmile ho použijete třikrát.
  5. Máte AI vývojáře jako Claude Code — vlastní systém už nepředstavuje ten závazek času, jaký představoval před rokem.

Kolik mě to opravdu stojí

Někoho v tuhle chvíli napadne: „Dobře, ušetříš na licencích, ale za to ho musíš celý napsat a udržovat." Spravedlivá otázka. Pojďme si to spočítat poctivě.

Vstupní investice

Postavit první verzi vlastního CMS pro mě znamenalo zhruba tři týdny soustředěné práce — to bylo před rokem, na začátku s Claude Code. Dnes by mi to trvalo polovinu. Klíčové je, že tahle investice se vrací u každého dalšího webu — jádro je stejné, mění se obsah a moduly.

Pro srovnání: ve WordPressu bych první projekt nazasil za dva dny, ale každý další taky za dva dny. Když mám šestnáct webů, vlastní CMS mi vrátí investici už u třetího projektu — od čtvrtého výš profituju.

Průběžná údržba

Tady je hezké překvapení: údržba je menší, ne větší. WordPress vyžaduje pravidelné aktualizace jádra, témat a pluginů — a po každé aktualizaci je potřeba testovat, jestli se něco nerozbilo. Vlastní systém aktualizuju jen tehdy, když chci přidat funkci nebo opravit chybu. Žádné nucené upgrady, žádné nečekané breaking changes.

Jediná údržba, kterou reálně řeším, jsou bezpečnostní záplaty na úrovni serveru. Mám vlastní VPS, takže PHP, MariaDB a OS si updatuju sám podle toho, jak mi vyhovuje — pár minut měsíčně. Sám si tak řídím i konfiguraci serveru přesně podle toho, co weby potřebují.

Co když přijde dnes klient s urgentním požadavkem?

Z minuly zkušenosti: požadavek typu „přidejte nám sekci pro evidenci hlídacích psů na inzeráty" by ve WordPressu znamenal vyhledat plugin → otestovat → koupit → integrovat do tématu → vyřešit konflikty. Ve vlastním CMS jsem to udělal za den a půl. A je to napsané přesně tak, jak má fungovat, ne tak, jak si autor pluginu představoval.

Tři nejčastější námitky, které slýchávám

❌ „A co když odejdeš nebo umřeš? Kdo to bude umět spravovat?"

Tohle je úplně legitimní obava. Můj systém je v čistém PHP bez frameworku, s normálními SQL dotazy přes PDO, žádné magie. Jakýkoliv PHP vývojář se v tom vyzná do dvou hodin. WordPress je naopak složitější — má vlastní filtry, akce, hooks, custom post types, plugin API. Nový vývojář se v něm vyzná hůř než v mém systému.

❌ „Bez ekosystému pluginů to nemůžeš tak rychle stavět."

Pravda, na pár věcí potřebujete napsat něco vlastního. Ale 80 % funkčnosti, kterou typicky řeším (CMS, blog, formuláře, e-mail, schema), mám napsanou v sdíleném jádře. A když potřebuju něco nového, Claude Code mi to napíše za hodinu — místo abych den hledal vhodný plugin a další den řešil, proč nefunguje.

❌ „Co když potřebuju e-shop? To si snad nestavíš sám?"

Stavím. E-shopy si dnes dělám taky vlastní — a je to výrazně lepší, ne horší. Mám všechny funkce přesně na míru: vlastní věrnostní program, vlastní automatizace v košíku, vlastní logiku slev, vlastní napojení na sklady, účetnictví, dopravce, platební brány, ERP — na cokoliv, co zákazník reálně používá. Žádné kompromisy mezi „co plugin umí" a „co bychom chtěli". WooCommerce řeším jen tehdy, když klient explicitně chce WordPress a má pro to vlastní důvod. Shoptet posílám lidem, kteří nemají rozpočet na nic vlastního.

Často kladené otázky

Jaký technologický základ používáš?

Čisté PHP bez frameworku, MySQL, Tailwind CSS (kompilovaný subset), Alpine.js pro interaktivitu. Žádný Laravel, žádný Symfony, žádný React. Důvod: jednoduchost a předvídatelné chování. Když potřebuju větší věc, raději napíšu vlastní mini-modul než aby mě svazoval framework.

Píšeš si všechno sám, nebo s pomocí AI?

Většinu kódu dnes generuju s Claude Code Max 20x. Já vymyslím, jak má systém fungovat, jaké moduly potřebuju a co po nich chci. Claude Code to pak vykóduje, otestuju to a iterativně to doladím. Bez AI bych takhle rychle pracovat nemohl. Detailně o tom píšu v článku o vibe codingu.

Jak řešíš zálohování?

Automaticky každou noc, MySQL dump + soubory, šifrovaně na vzdálené úložiště. Vlastní cron skript, 30 minut nastavení. Můžu obnovit kterýkoliv web do stavu z posledního týdne, na den přesně.

Doporučil bys vlastní CMS i začínajícímu vývojáři?

Záleží na cílech. Pro učení ano — postavit si vlastní CMS naučí víc o webovém vývoji než hodiny tutoriálů. Pro komerční použití u jednoho klienta na jeden web — spíš ne, výnosnost času je horší než s hotovým řešením. Pro vlastní projekty, kde plánujete víc webů — určitě ano.

Co se stane, když chce klient přepnout z WP na tvůj systém?

Záleží, jak je obsah uspořádaný. Migrace blog článků a stránek je triviální — exportuju WP RSS / XML, převedu do vlastní struktury, doplním schema a interní linky. Komplikovanější je, když má klient hodně vlastních modulů (custom post types, ACF) — to už je projekt na pár týdnů. Vždycky dělám individuální nabídku po analýze stavu.

Plánuješ vlastní CMS někdy vydat veřejně jako open source?

Zvažuju to, ale zatím ne. Systém je napsaný přesně pro mé potřeby — chybí mu UI pro nastavení, dokumentace, instalátor a podobně. Před vydáním by chtěl pár měsíců práce navíc. Možná v budoucnu, zatím ho používám jen interně.

Co si z toho odnést

Vlastní CMS není pro všechny. Není to ani „lepší" volba v nějakém objektivním smyslu — je to jiná volba, která dává smysl za určitých okolností. Pro mě s šestnácti weby a Claude Code v zádech to dává smysl absolutně. Pro klienta s jedním malým firemním webem to obvykle smysl nedává — tam pošlu WordPress a budu spát klidně.

Kde se ta hranice posouvá nejvíc: díky AI vývojářům jako je Claude Code je dnes vstupní investice do vlastního systému řádově nižší než před rokem. Co dřív bylo „šílený nápad jen pro velké projekty", dnes dává smysl už od třetího vlastního webu. Trh se v tomhle posunul rychle.

Pokud uvažujete o tom, jestli ve svém případě dává smysl WP nebo něco vlastního, klidně mi napište — projdeme si to společně, padne to za půl hodiny rozhovoru.

Konzultace zdarma