AI nástroje jako Cursor, Lovable nebo Bolt vám dokážou napsat fungující kód během jediného odpoledne. Nadšení je obrovské – a zcela oprávněné. Vystřízlivění však přichází ve chvíli, kdy chcete projekt přenést na vlastní doménu a ukázat ho světu. Právě fáze nasazení (deploymentu) je totiž momentem, kde pohoří překvapivé množství skvěle vypadajících projektů.
Buďme upřímní: AI generátory netuší, kam váš web nasadíte. Generují kód, který perfektně šlape na localhostu, a předpokládají, že o zbytek se postará někdo jiný. A ve většině případů jste tím „někým jiným“ právě vy.
V tomto článku si projdeme tři technické chyby, které u webů generovaných umělou inteligencí vídáme nejčastěji. Každá z nich dokáže v lepším případě shodit web na pár hodin, v tom horším vás připraví o data, klienty nebo peníze. Přitom všem třem scénářům předejdete během několika minut pozornosti.
TL;DR:
- #1 Exponované API klíče v kódu nebo repozitáři – AI boti je proskenují a zneužijí během několika minut.
- #2 Špatně zvolený typ hostingu – Next.js s SSR na běžném sdíleném webhostingu prostě nerozběháte.
- #3 Jednostránková aplikace (SPA) bez serverového fallbacku – stačí, aby uživatel aktualizoval stránku na /o-nas, a místo obsahu uvidí chybu 404.
Před ostrým nasazením přitom stačí jeden rychlý checklist, kterým všem těmto přešlapům bezpečně předejdete.
Zvukový souhrn
Freelo - Nástroj na řízení úkolů a projektů
Přidej se, pozvi svůj tým a klienty, rozděl práci a sleduj, jak se úkoly dají do pohybu.
Chyba č. 1: API klíče a secrets v kódu nebo v repu
#1 Exponované API klíče aneb tichá katastrofa v přímém přenosu
Jde o nejnebezpečnější přešlap z celé trojice. Nezpůsobí totiž okamžitý výpadek, ale tichou finanční katastrofu. Když AI generuje funkci volající API od OpenAI nebo Stripe, často vloží citlivý klíč přímo do .js souboru s komentářem typu „zde doplňte svůj klíč“. Kód poslušně vyplníte, commitnete do gitu a publikujete na GitHubu jako veřejný repozitář. V tu chvíli začíná odpočet – automatizovaní scrappeři totiž pročesávají veřejný kód po desítkách za vteřinu a váš klíč najdou řádově za pár minut.
Stejně rafinované nebezpečí hrozí, když citlivá data nechtěně propašujete do výsledného frontendového balíčku. AI generátory bezmyšlenkovitě používají proměnné jako:
- NEXT_PUBLIC_OPENAI_KEY
- nebo VITE_OPENAI_API_KEY
Netuší totiž, že prefixy jako NEXT_PUBLIC_ (u Next.js) nebo VITE_ (u Vite) slouží přesně k tomu, aby se daná hodnota natvrdo zabalila do klientského JavaScriptu. Každý návštěvník vašeho webu si pak váš soukromý klíč může přečíst v prohlížeči přes obyčejné zobrazení zdrojového kódu stránky.
Jak to vypadá v praxi:
// ŠPATNĚ — klíč v repu i ve frontendu
const apiKey = "sk-proj-abc123...";
const res = await fetch("https://api.openai.com/v1/chat", {
headers: { Authorization: "Bearer " + apiKey }
});
A jak to spravit?
- Klíče přesuňte na server.
- Volání placeného API (OpenAI, Stripe nebo e-mailových služeb) vždy provádějte přes vlastní backendový endpoint, který jako jediný dané tajemství zná. Frontend pak zavolá váš endpoint a ten se bezpečně spojí s finálním API.
- Pokud máte naše VPS, proměnné prostředí (environment variables) si pohodlně naklikáte přímo v administračním panelu (přes PHP-FPM pool nebo Git Deploy). Nemusíte se tak vůbec hrabat v souborech přes SSH. Navíc každá doména u nás běží pod vlastním Linux uživatelem, takže případný únik přihlašovacích údajů v jedné aplikaci neohrozí ty ostatní.
Soubor .env patří do .gitignore. Vždycky. Bez výjimek. Ještě než uděláte první commit, raději si to bleskově ověřte příkazem:
cat .gitignore | grep .env
Důsledně také rozlišujte mezi veřejnými a serverovými proměnnými. Prefixy jako `NEXT_PUBLIC_*` a `VITE_*` jsou stoprocentně veřejné. Patří do nich pouze URL adresa endpointu, klientské klíče nebo veřejné identifikátory. Hesla, service role klíče a API tokeny do nich nikdy nevkládejte.
Pokud už klíč v repozitáři jednou byl (byť jen o jediný commit zpátky), okamžitě ho v dané službě zneplatněte a vygenerujte nový. Smazat soubor a udělat nový commit nestačí – klíč navždy zůstane zapsaný v historii Gitu. Pro skutečné vyčištění historie poslouží nástroj `git filter-repo`, případně nás kontaktujte a my vám s tím pomůžeme.
Tři rychlé tipy na závěr:
- Zapněte si secret scanning – GitHub i GitLab umí klíče v kódu rozpoznat a varují vás dřív, než commit vůbec projde.
- Kontrolujte, co pushujete – než cokoli odešlete do světa, projděte si vygenerovaný kód a hledejte řetězce začínající na `sk-`, `pk_live`, `Bearer` nebo jakýkoli podezřele náhodný řetězec delší než 20 znaků.
- Většinu úniků zachytíte už touto jednoduchou kontrolou.
#2 Špatně zvolený typ hostingu pro daný stack
Druhá chyba sice nezpůsobí únik dat, ale spolehlivě vámi zničí víkend a sežere nejvíc nervů.
Scénář je pokaždé stejný: stáhnete hotový projekt z Boltu (nebo jiného podobného nástroje), nahrajete soubory přes FTP na klasický sdílený webhosting, otevřete doménu a… vidííte buď čistě bílou obrazovku, nebo strohý výpis složek Index of /.
VPS Centrum
Vyzkoušejte zdarma naši aplikaci pro správu serveru a domén. Budete si připadat jako zkušený administrátor.
Co se stalo?
AI nástroje totiž bez explicitního zadání vygenerují jen kód, který k životu nutně potřebuje neustále běžící serverové prostředí (tzv. Node.js proces). Řeč je o technologiích jako Next.js s SSR, Remix nebo Nuxt. Klasický sdílený webhosting je na ně krátký. Kombinace serveru Apache a PHP umí pouze servírovat statické soubory a spouštět PHP skripty. Nic víc.
Rychlá diagnostika – jaký stack vlastně máte?
Podívejte se do vygenerovaných souborů a zkontrolujte, na čem váš web stojí:
- Máte jen index.html, style.css, script.js (Plain HTML) – stačí jakýkoliv běžný webhosting.
- package.json + vite.config.* + složka src/ (Vite SPA) – stačí webhosting (nahráváte až hotovou složku po buildu).
- package.json + next.config.* bez output: ‚export‘ (Next.js SSR) – potřebujete VPS s Node.js.
- package.json + next.config.* s output: ‚export‘ (Next.js statický) – stačí webhosting (nahráváte čisté statické soubory).
- package.json + astro.config.* s @astrojs/node (Astro SSR) – potřebujete VPS s Node.js.
- package.json + astro.config.* s output: ‚static‘ (Astro statický) – stačí webhosting po buildu.
- package.json + server.ts nebo server.js v rootu (Vlastní Node server) – potřebujete VPS.
- Složka supabase/, @supabase/* v package.json (Frontend + Supabase backend) – záleží na frontendu, samotná databáze běží v cloudu.
- Potřebujete n8n, OpenClaw nebo AI workflow bez vlastního kódu – tedy VPS s instalací na jeden klik.
Jak to spravit?
Pokud váš web vyžaduje SSR (Next.js, Remix, Nuxt): Zapomeňte na sdílený hosting a běžte rovnou do VPS s podporou Node.js. V našem VPS Centru dostanete aplikaci na server bleskově přes Git Deploy se staging prostředím, přičemž produkční build spustíte automaticky v post-deploy příkazu. SSL certifikát navíc panel vyřeší sám. Samotný Node.js proces pak na pozadí snadno udržíte v chodu pomocí nástrojů pm2 nebo systemd. Přesný návod na nasazení Next.js aplikací najdete v naší dokumentaci.
Pokud máte jednostránkovou aplikaci bez backendu (Vite + React, vanilla JS, Astro ve statickém módu): Spusťte lokálně sestavení produkční verze pomocí příkazu npm run build a na sdílený webhosting nahrajte pouze obsah nově vzniklé složky dist/ – nikdy tam nenahrávejte celý projekt i se zdrojovými kódy.
Pokud tápete, zkuste přepnout Next.js do statického módu: Upravte soubor next.config.js následovně:
JavaScript
module.exports = {
output: 'export'
};
Pokud build na vašem počítači úspěšně projde a aplikace nevyužívá žádné serverové funkce, máte vyhráno. Výstup můžete bez obav nahrát na klasický hosting.
Jednoduché pravidlo, když vás technické detaily nezajímají: Má-li projekt jakoukoli vlastní backendovou logiku, potřebujete VPS. AI generátory si rády backend domýšlejí samy, takže odpověď na otázku „potřebuji VPS?“ bývá v éře AI vývoje téměř vždy ano.
Dva tipy pro bezpečný start:
- Pozor na cenu cloudu: Projekty z Lovable a Bolt defaultně míří na cloudové stacky (Supabase + hostovaný frontend), kde se měsíční účet může snadno přehoupnout až přes tisícovku. Naše VPS startuje na 432 Kč měsíčně a máte pod absolutní kontrolou jak svá data, tak celé prostředí serveru.
- Nepodceňujte staging prostředí: Git Deploy v našem VPS Centru plně podporuje testovací (staging) větev. Web nejdříve nasadíte na skrytou subdoménu, vše si v klidu naklikáte, a teprve až máte jistotu, přehodíte ho do ostré produkce. Pro vibe codované projekty, kde AI dokáže jedním řádkem přinést nečekané anomálie, je to naprostá nutnost.
#3 SPA bez serverového fallbacku – 404 po refreshi
Tento přešlap má až zákeřně plynulý průběh: web šlape jako hodinky, proklikávání sekcí funguje bez jediného zádrhelu a vy slavíte úspěch. Jenže pak někdo stránku aktualizuje kdekoli mimo domovskou doménu a prohlížeč nekompromisně vrátí chybovou hlášku 404 Not Found. Úplně stejný scénář nastane ve chvíli, kdy se kdokoli pokusí poslat přímý odkaz ve tvaru vasedomena.cz/o-nas svému známému.
Kde je zakopaný pes?
Směrování (routing) jednostránkových aplikací (SPA) se odehrává výhradně uvnitř prohlížeče, nikoli na serveru. Když uživatel kliká na odkazy v menu, React Router (nebo Vue Router) pouze kosmeticky mění URL adresu pomocí JavaScriptu. Webový server o tomto pohybu nemá ani tušení.
Jakmile ale uživatel stránku refreshne, prohlížeč se zachová standardně – pošle na server přímý požadavek na adresu /o-nas. A jelikož server v dané složce žádný fyzický soubor o-nas.html nenajde, logicky vrátí krutou pravdu v podobě kódu 404.
Řešení? Server musí pro neexistující soubory vrátit index.html
Pro Apache (sdílený webhosting) přidejte do rootu .htaccess:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
Na webhostingu Váš Hosting je mod_rewrite zapnutý defaultně, .htaccess bude fungovat bez dalšího nastavení.
Pro nginx (na VPS) do server bloku:
location / {
try_files $uri $uri/ /index.html;
}
Bez tohoto kroku jakýkoli refresh nebo přímý odkaz znamená 404 a uživatel se k vám už nevrátí.
Expertní bonus: Na identický problém často narazíte u webů, kde AI bezmyšlenkovitě nasadí takzvaný hash routing (poznáte ho podle adresy ve tvaru /#/o-nas). Tento přístup sice potíž s refreshem elegantně obchází – protože vše, co se nachází za symbolem #, je pro server absolutně neviditelné, ale v moderním webdesignu jde o medvědí službu.
Hash routing je totiž pro SEO naprosto nevhodný a vyhledávače jako Google ho indexují s obrovskou nevolí. Pokud chcete organickou návštěvnost a neprůstřelné SEO, držte se vždy „čistého“ history routingu a nezapomeňte na správně nakonfigurovaný serverový fallback.
Finální checklist před nasazením: Pět minut, které vám ušetří dny agonie
Než poprvé odmávnete spuštění projektu do světa, projděte si tento rychlý tahák. Berte ho jako předletovou kontrolu pilota:
- git status v bezpečí: Žádné .env, žádné secrets.json, žádné natvrdo zapsané klíče – prověřte, že máte soubor .env spolehlivě zapsaný v .gitignore.
- Čistý build: Příkaz npm run build projde na vašem počítači lokálně bez jediné chyby a na výstupu vyprodukuje validní složku dist/ nebo build/.
- Typologie webu: Víte přesně, jaký typ aplikace vám pod rukama vznikl (statika, SSR, nebo full-stack)? Podle toho si vyberte správný typ hostingu.
- Pravidlo fallbacku: Pokud hostujete jednostránkovou (SPA) aplikaci na klasickém sdíleném webhostingu, zkontrolujte, že máte v kořenovém adresáři nakonfigurovaný soubor .htaccess s funkčním přesměrováním.
- Zabezpečení na klik: HTTPS běží na plné obrátky? U Váš Hosting je SSL certifikát Let’s Encrypt (včetně wildcard verzí) automatickou součástí každého tarifu.
- Záchranná síť: Máte vyřešené zálohy? U Váš Hosting děláme automatické denní zálohy databází v základu. Když vám tedy AI v záchvatu kreativního kódu rozbije produkci, v klidu se vrátíte v čase.
- Úniky dat zažehnány: Projeďte kód vyhledávačem a ověřte, že v něm nesvítí řetězce jako Bearer, sk- nebo pk_live mimo chráněné .env prostředí.
Vývoj webů s umělou inteligencí je jízda. Dokáže vám ušetřit stovky hodin nudného psaní kódu, ale otevírá dveře chybám, které dříve zkušení senioři hlídali automaticky. Nepodceňujte tedy přípravu prostředí.
Bonus: Tyto chyby fatálně poškozují vaši viditelnost ve vyhledávačích
Tři zmíněné přešlapy nejsou jen izolovaný technický problém. Každý z nich vám tvrdě sráží SEO – a v nastupující éře optimalizace pro AI vyhledávání (GEO) to platí dvojnásob.
- Vystavené klíče: Můžou vést k okamžitému zablokování účtu u API poskytovatele. V horším případě k úplné likvidaci webu.
- Nevhodný hosting: Výsledkem je bílá obrazovka. Roboti Googlu i AI vyhledávačů narazí na zeď a neindexují vůbec nic.
- Chyba 404 po refreshi: Vyhledávací boti při přímém pokusu o vstup na podstránku narazí na chybu. Vaše sekce tak zmizí z výsledků vyhledávání, i když interní prolinkování zdánlivě funguje.
Proto jsme do VPS Centra nasadili pokročilou analytiku, která rozlišuje LLM boty, Google boty a organické návštěvníky. V grafech tak na první pohled odlišíte běžné návštěvníky od provozu, který generují ChatGPT, Claude, Perplexity, Gemini, Cohere, ByteSpider nebo Apple Intelligence. Hned víte, jestli vás AI vyhledávače skutečně procházejí. A pokud ne, máte jasný signál, že je čas zkontrolovat robots.txt a strukturu obsahu. Tohle vám žádný jiný český hosting neukáže.
VPS Centrum navíc nonstop hlídá dostupnost serveru a když se něco pokazí, okamžitě vám pošle e-mail. Když se vám tedy uprostřed noci sesype Node.js proces, dozvíte se to dřív než vaši zákazníci.
Chcete jít ještě dál a připravit projekt tak, aby vás AI sama doporučovala? Mrkněte na náš článek GEO místo SEO: co musí váš web umět, aby vás AI začala doporučovat.
Časté dotazy
Jak poznám, že je v mém AI-generovaném repu vystavený klíč?
Projděte kód a hledejte řetězce začínající sk-, pk_live, Bearer nebo prefixy NEXT_PUBLIC_ a VITE_ u proměnných, které vypadají jako tajné. Zkontrolujte i historii gitu: i smazaný commit klíč prozradí.
Funguje nasazení na sdílený hosting i pro Next.js?
Jen v režimu statického exportu (output: ‚export‘). S SSR a API routami potřebujete VPS s Node.js.
Co dělat, když se mi po nahrání zobrazí jen prázdná stránka?
V devíti z deseti případů jste nahráli zdrojový kód místo dist/ z buildu. Sestavte projekt (npm run build) a nahrajte výstupní složku.
Stačí pro SPA .htaccess na sdíleném hostingu, nebo potřebuji VPS?
.htaccess stačí. Sdílený hosting s Apache umí URL rewrite. Důležité je, aby měl mod_rewrite zapnutý (většina českých hostingů ano).
Můžu úniku klíče předejít už v AI generátoru?
Můžete promptem zdůraznit, že chcete API klíče řešit přes server-side endpoint a že žádný NEXT_PUBLIC_* ani VITE_* nesmí obsahovat tajemství. Na samotnou AI se ale nespoléhejte. Zkontrolovat to musíte sami.