Wybór odpowiedniej platformy do hostingu stron statycznych może zaoszczędzić Ci setki złotych rocznie, a przy tym zapewnić szybkie, bezpieczne i łatwe w utrzymaniu witryny. W 2026 darmowe plany znacznie dojrzały - platformy takie jak GitHub Pages i Cloudflare Pages oferują infrastrukturę gotową na środowisko produkcyjne, zupełnie za darmo. Jest jednak jeden problem, który większość poradników pomija: jak obsłużyć formularz kontaktowy na stronie statycznej, skoro nie ma żadnego serwera, który mógłby go przetworzyć? Ten przewodnik przeprowadzi Cię przez cały proces - od wyboru platformy, przez wdrożenie, aż po podłączenie działającego formularza kontaktowego. Znajdziesz tu konkretne przykłady i realne ograniczenia, które warto znać, zanim podejmiesz decyzję.
Spis treści
Najważniejsze wnioski:
- GitHub Pages i Cloudflare Pages oferują naprawdę darmowy hosting stron statycznych z obsługą własnej domeny.
- Cloudflare Pages jest szybszy globalnie dzięki sieci CDN opartej na węzłach brzegowych; GitHub Pages jest prostszy dla deweloperów już korzystających z GitHub.
- Strony statyczne nie mogą natywnie przetwarzać formularzy - do zbierania zgłoszeń i dostarczania ich do skrzynki odbiorczej potrzebujesz zewnętrznej usługi.
- Dedykowany backend formularzy, taki jak Sendform, pozwala dodać w pełni funkcjonalny formularz kontaktowy bez pisania kodu po stronie serwera.
Dlaczego darmowy hosting stron statycznych jest wart uwagi
Strona statyczna serwuje gotowe pliki HTML, CSS i JavaScript bezpośrednio do przeglądarki. Nie ma tu PHP, żadnego środowiska uruchomieniowego Node.js ani zapytań do bazy danych przy każdym wczytaniu strony. Ta prostota to dokładnie powód, dla którego darmowy hosting stron statycznych jest tak niezawodny - nie ma tu nic, co mogłoby się posypać, wymagać łatania czy skalowania.
Dla małych firm, portfolio, stron docelowych aplikacji SaaS i dokumentacji, hosting statyczny spełnia wszystkie wymagania:
- Szybkość: Pliki są serwowane z węzłów brzegowych CDN, często w czasie poniżej 100 ms na całym świecie.
- Bezpieczeństwo: Brak środowiska uruchomieniowego po stronie serwera drastycznie zmniejsza powierzchnię ataku.
- Koszt: Zarówno GitHub Pages, jak i Cloudflare Pages są darmowe dla publicznych i wielu prywatnych projektów.
- Prostota: Wystarczy wypchnąć kod do repozytorium, a strona wdraża się automatycznie.
Jedynym realnym ograniczeniem jest dynamiczna funkcjonalność. Wszystko, co wymaga logiki po stronie serwera - uwierzytelnianie użytkowników, koszyk zakupowy czy przetwarzanie formularzy - potrzebuje zewnętrznej usługi. Miej to na uwadze, przechodząc przez kolejne kroki konfiguracji.
Porównanie platform: GitHub Pages vs Cloudflare Pages
| Funkcja | GitHub Pages | Cloudflare Pages |
|---|---|---|
| Darmowy plan | Tak (publiczne repozytoria zawsze bezpłatne) | Tak (nieograniczona liczba stron) |
| Własna domena | Tak | Tak |
| HTTPS | Automatycznie przez Let's Encrypt | Automatycznie przez Cloudflare SSL |
| Pipeline budowania | GitHub Actions (ręczna konfiguracja) | Wbudowany CI/CD |
| Globalna sieć CDN | Ograniczona (głównie USA) | Ponad 300 lokalizacji brzegowych |
| Limit transferu | Miękki limit ok. 100 GB/miesiąc | Bez limitu |
| Prywatne repozytoria | Wymaga GitHub Pro | Tak, bezpłatnie |
Krótkie podsumowanie: Jeśli Twoi użytkownicy są rozproszeni po całym świecie i zależy Ci na jak najkrótszym czasie ładowania, Cloudflare Pages jest lepszym wyborem. Jeśli Twój zespół już pracuje na co dzień w GitHub i chcesz jak najprostszej konfiguracji, GitHub Pages w zupełności wystarczy.
Krok po kroku: wdrożenie na GitHub Pages
Ten przykład zakłada, że masz gotową prostą stronę HTML/CSS do opublikowania. Jeśli korzystasz z generatora stron statycznych, takiego jak Hugo lub Jekyll, proces jest niemal identyczny.
-
Utwórz repozytorium na GitHub. Przejdź do github.com/new i utwórz publiczne repozytorium. Nazwij je
twoja-nazwa.github.io, jeśli chcesz, żeby strona działała pod domeną główną, lub dowolnie inaczej, jeśli ma być dostępna pod ścieżką podkatalogu. -
Wypchnij pliki strony. Z lokalnego folderu projektu uruchom:
git init git remote add origin https://github.com/your-username/your-repo.git git add . git commit -m "Initial deploy" git push -u origin main -
Włącz GitHub Pages. W repozytorium przejdź do Settings > Pages. W sekcji "Source" wybierz gałąź
maini folder/root(lub/docs, jeśli tam trafia wynik budowania). Kliknij Save. -
Poczekaj na wdrożenie. GitHub zbuduje i wdroży stronę w ciągu 1-3 minut. W panelu ustawień Pages pojawi się adres URL działającej strony (np.
https://twoja-nazwa.github.io). -
Podłącz własną domenę (opcjonalnie). Dodaj plik
CNAMEdo głównego katalogu repozytorium, wpisując w nim swoją domenę (np.www.twojastrona.pl). Następnie w panelu swojego dostawcy DNS ustaw rekord CNAME wskazujący natwoja-nazwa.github.io. GitHub automatycznie wystawi certyfikat SSL w ciągu kilku minut.
Krok po kroku: wdrożenie na Cloudflare Pages
- Zarejestruj się lub zaloguj do Cloudflare. Wejdź na pages.cloudflare.com i połącz swoje konto GitHub lub GitLab.
- Utwórz nowy projekt. Kliknij "Create a project", a następnie "Connect to Git". Wybierz swoje repozytorium z listy.
-
Skonfiguruj ustawienia budowania. Jeśli Twoja strona to czysty HTML, zostaw pole polecenia budowania puste i ustaw katalog wyjściowy na
/lub tam, gdzie znajduje się Twój plikindex.html. Dla Hugo ustaw polecenie budowania nahugoi katalog wyjściowy napublic. Dla Jekyll użyjjekyll buildi katalogu wyjściowego_site. -
Wdróż stronę. Kliknij "Save and Deploy". Cloudflare sklonuje Twoje repozytorium, uruchomi budowanie i opublikuje stronę w globalnej sieci brzegowej. Twoja strona od razu otrzymuje subdomenę
*.pages.dev. -
Dodaj własną domenę. W panelu projektu przejdź do "Custom domains" i wpisz swoją domenę. Jeśli domena jest już zarządzana przez Cloudflare DNS, konfiguracja zajmuje jedno kliknięcie. W przeciwnym razie musisz dodać rekord CNAME u swojego rejestratora, wskazujący na adres
*.pages.dev.
Każdy kolejny git push do gałęzi głównej automatycznie uruchomi ponowne wdrożenie. Cloudflare tworzy też podglądy wdrożeń dla pull requestów, co jest przydatne do sprawdzania zmian przed ich opublikowaniem na produkcji.
Formularz kontaktowy na stronie statycznej
Tu większość poradników się kończy - i tu większość ludzi utyka. Formularz kontaktowy na stronie statycznej nie może sam w sobie przetwarzać danych - nie ma serwera, który by nasłuchiwał. Masz trzy realne opcje:
- Zewnętrzna usługa do obsługi formularzy (zalecane): wskazujesz atrybut
actionformularza na endpoint zewnętrznego serwisu, który odbiera zgłoszenie, waliduje je i wysyła na Twój adres e-mail. - Funkcja bezserwerowa: piszesz niewielką funkcję (Cloudflare Workers, AWS Lambda), która przetwarza formularz. Działa, ale wymaga kodu i bieżącego utrzymania.
- JavaScript fetch(): używasz fetch API przeglądarki do wysyłania danych formularza na backendowy endpoint. Szczegóły techniczne znajdziesz w naszym przewodniku o wysyłaniu danych formularza HTML przez JavaScript fetch().
Najszybszą drogą do działającego formularza jest dedykowany serwis. Oto konkretny przykład z użyciem Sendform:
Konkretny przykład: działający formularz kontaktowy w 5 minut
Załóżmy, że masz stronę portfolio wdrożoną na GitHub Pages. Chcesz, żeby odwiedzający mogli wysyłać Ci wiadomości, a te wiadomości trafiały prosto do Twojej skrzynki. Oto kompletny kod HTML:
<form action="https://sendform.io/f/YOUR_FORM_ID" method="POST">
<label for="name">Twoje imię</label>
<input type="text" id="name" name="name" required>
<label for="email">Twój e-mail</label>
<input type="email" id="email" name="email" required>
<label for="message">Wiadomość</label>
<textarea id="message" name="message" rows="5" required></textarea>
<button type="submit">Wyślij wiadomość</button>
</form>To cała integracja. Zamieniasz YOUR_FORM_ID na identyfikator ze swojego panelu Sendform i każde zgłoszenie trafia na adres e-mail podany podczas rejestracji. Żadnego kodu backendowego, żadnego serwera, żadnych miesięcznych rachunków za infrastrukturę. Jeśli interesują Cię bardziej zaawansowane wzorce UX - w tym strony przekierowania po wysłaniu formularza i e-maile potwierdzające - zajrzyj do naszego przewodnika o najlepszych praktykach dla formularzy na stronach statycznych.
Jeśli korzystasz z buildera stron obok swojej statycznej witryny, szczegółowo opisujemy proces integracji w artykule o integracji Sendform z builderami stron.
Uwaga dotycząca ochrony przed spamem: Każdy publicznie dostępny formularz przyciągnie zgłoszenia od botów. Sendform ma wbudowane pola honeypot i ograniczanie liczby żądań. Jeśli chcesz wiedzieć więcej o tym, jak utrzymać skrzynkę w czystości, przeczytaj nasz artykuł o najlepszych praktykach ochrony formularzy przed spamem.
Najczęstsze błędy, których warto unikać
Po tym, jak pomogliśmy tysiącom użytkowników skonfigurować darmowy hosting stron statycznych, wiemy, które błędy powodują najwięcej frustracji:
1. Brak strony błędu 404
Zarówno GitHub Pages, jak i Cloudflare Pages wyświetlą domyślną stronę błędu, gdy żądana ścieżka nie zostanie znaleziona. Utwórz własny plik 404.html w głównym katalogu. Dzięki temu użytkownicy pozostaną na Twojej stronie, a spójność wizerunku marki zostanie zachowana.
2. Zapisywanie sekretów w publicznym repozytorium
Klucze API, sekrety endpointów formularzy i adresy e-mail nigdy nie powinny trafiać do publicznego repozytorium GitHub. Używaj zmiennych środowiskowych w Cloudflare Pages lub odwołuj się do prywatnego pliku konfiguracyjnego dodanego do .gitignore.
3. Budowanie formularza bez planu na backend
To najczęstszy błąd. Deweloperzy tworzą piękny formularz kontaktowy, wdrażają go na GitHub Pages i w dniu premiery odkrywają, że formularz po cichu nie działa. Zdecyduj, jakiego backendu formularzy użyjesz, zanim napiszesz choćby jeden tag <input>. Narzędzia takie jak Sendform pozwalają skonfigurować formularz kontaktowy wysyłający zgłoszenia prosto na e-mail bez żadnego kodu, co całkowicie eliminuje problem backendu.
4. Ignorowanie problemów z pamięcią podręczną CDN
Jeśli strona nie aktualizuje się po wypchnięciu zmian, CDN może serwować nieaktualne pliki z pamięci podręcznej. Cloudflare Pages automatycznie czyści pamięć podręczną przy każdym wdrożeniu. GitHub Pages wolniej propaguje zmiany - poczekaj do 10 minut lub podczas testów dodaj parametr query string do adresów URL zasobów.
5. Nieprawidłowe ścieżki względne
Jeśli Twoja strona na GitHub Pages działa pod adresem username.github.io/project-name/ (podkatalog), wszystkie ścieżki do zasobów muszą uwzględniać ten prefiks. Link do /styles.css nie zadziała. Używaj ścieżek względnych (./styles.css) lub skonfiguruj ustawienie baseURL generatora stron statycznych tak, żeby odpowiadało podkatalogowi.
6. Pomijanie automatyzacji przepływu pracy formularza
Gdy formularz zaczyna zbierać zgłoszenia, możesz zrobić znacznie więcej niż tylko odbierać e-maile. Sendform obsługuje webhooki i integracje, które pozwalają automatycznie kierować zgłoszenia do Slacka, systemu CRM lub arkusza kalkulacyjnego. Nasz przewodnik o automatyzacji przepływów pracy formularzy za pomocą webhooków i API pokazuje dokładnie, jak to skonfigurować bez pisania kodu backendowego.
Podsumowanie
Darmowy hosting stron statycznych nigdy nie był tak rozbudowany jak teraz. GitHub Pages sprawdza się świetnie w zespołach głęboko zintegrowanych z ekosystemem GitHub, podczas gdy Cloudflare Pages oferuje lepszą globalną wydajność i hojniejszy darmowy plan. Prawdziwym wyzwaniem nie jest sam hosting - to dynamiczne funkcjonalności, a szczególnie formularze kontaktowe, które sprawiają problemy. Łącząc dowolną z tych platform z dedykowanym serwisem formularzy, zyskujesz w pełni funkcjonalną, profesjonalną stronę bez żadnych kosztów infrastruktury. Zacznij od jednego z powyższych przewodników, uruchom swoją stronę, a następnie podłącz formularz kontaktowy przez Sendform, żeby od pierwszego dnia niezawodnie odbierać zgłoszenia.

Dodaj formularz kontaktowy do swojej strony statycznej w kilka minut
Użyj Sendform do zbierania zgłoszeń z dowolnej strony statycznej hostowanej na GitHub Pages lub Cloudflare Pages. Bez kodu backendowego, bez konfiguracji serwera, bez komplikacji. Wystarczy wskazać atrybut action formularza na swój endpoint i gotowe.
Zacznij za darmo na Sendform.net →
Najczęściej zadawane pytania
Tak, w większości przypadków biznesowych. Zarówno GitHub Pages, jak i Cloudflare Pages oferują dostępność na poziomie 99,9% lub wyższym, opartą na infrastrukturze klasy enterprise. Głównym ograniczeniem jest brak przetwarzania po stronie serwera, a nie kwestia niezawodności. W przypadku stron o bardzo dużym ruchu lub sklepów e-commerce możesz z czasem przerodzić darmowy plan, ale dla stron docelowych i portfolio darmowy hosting jest rozwiązaniem produkcyjnym.
Tak. Zarówno GitHub Pages, jak i Cloudflare Pages obsługują własne domeny w darmowych planach, w tym automatyczny HTTPS przez certyfikaty SSL. Musisz być właścicielem domeny i zaktualizować rekordy DNS, żeby wskazywały na platformę hostingową. Cały proces zajmuje mniej niż 15 minut, a certyfikat SSL jest wystawiany automatycznie w ciągu kilku godzin.
Strony statyczne nie mogą natywnie przetwarzać zgłoszeń z formularzy, ponieważ nie ma działającego serwera. Standardowym rozwiązaniem jest wskazanie atrybutu action formularza na zewnętrzny serwis backendowy. Taki serwis odbiera żądanie POST, waliduje dane i przekazuje je na Twój adres e-mail. Sendform jest właśnie taką usługą - nie wymaga żadnego kodu do konfiguracji.
GitHub Pages jest prostszy i integruje się bezpośrednio z repozytoriami GitHub, co czyni go idealnym wyborem dla deweloperów już korzystających z GitHub. Cloudflare Pages oferuje szybszą globalną sieć CDN z ponad 300 lokalizacjami brzegowymi, nieograniczony transfer w darmowym planie oraz wbudowany CI/CD z podglądami wdrożeń. Dla stron, w których wydajność ma kluczowe znaczenie, Cloudflare Pages jest mocniejszym wyborem.
Podstawowa znajomość HTML jest pomocna, ale nie musisz być deweloperem. Narzędzia takie jak Hugo, Jekyll czy nawet zwykłe pliki HTML działają bez problemów na obu platformach. W przypadku formularzy kontaktowych serwisy takie jak Sendform wymagają jedynie wklejenia gotowego kodu HTML, więc na żadnym etapie konfiguracji nie jest potrzebna znajomość programowania backendowego.