Jak wygląda formularz-atrapa
Z perspektywy odwiedzającego wszystko wygląda idealnie. Pola się walidują, na przycisku pojawia się „Wysyłanie…”, a zielony komunikat dziękuje za wiadomość. Tymczasem nic nie opuszcza przeglądarki: nie ma żądania, e-maila ani nowego wiersza w bazie. Odwiedzający jest przekonany, że się z Tobą skontaktował. Ty nigdy się o tym nie dowiesz.
Gdy czytaliśmy kod tych formularzy, niemal zawsze trafialiśmy na ten sam wzorzec: obsługa wysyłki czeka sekundę, pokazuje komunikat i czyści pola. Nie ma tam fetch, usługi e-mailowej ani zapisu do bazy danych.
// What we found, again and again (de-minified, names shortened):
onSubmit={(e) => {
e.preventDefault();
setSending(true);
setTimeout(() => {
toast({ title: "Message sent!", description: "We'll get back to you soon." });
form.reset();
setSending(false);
}, 1000);
}}Wyniki
Formularz kontaktowy znaleźliśmy na 119 z 793 przetestowanych stron; większość pozostałych to aplikacje, panele i narzędzia, które w ogóle nie mają formularza kontaktowego. Dla 105 z tych formularzy test dał jednoznaczną odpowiedź (przy pozostałych 14 w ostatnim przebiegu strona się nie załadowała, przycisku nie dało się kliknąć albo formularz odrzucił nasze wartości testowe). Oto co się działo po kliknięciu „Wyślij”:
- 27 ze 105 pokazało komunikat o sukcesie i nic nie wysłało. W 21 z nich przeczytaliśmy kod wysyłki i potwierdziliśmy, że nie ma w nim żadnego wywołania sieciowego; w pozostałych kod był zbyt mocno zminifikowany, by dało się go wiarygodnie odczytać, ale przeglądarka nie zarejestrowała żadnego żądania.
- 12 ze 105 nie zrobiło nic, co odwiedzający mógłby zauważyć: ani żądania, ani komunikatu. Część mogła po cichu nie przejść walidacji; tak czy inaczej, wiadomość nie zostaje wysłana.
- 7 ze 105 otworzyło program pocztowy odwiedzającego przez link
mailto:. To działa tylko wtedy, gdy odwiedzający ma skonfigurowany program pocztowy na komputerze. - W podziale na kreatory: atrapą okazało się 12 z 67 formularzy w Lovable i 15 z 38 w Bolt.
Formularze, które naprawdę wysyłały, kierowały wiadomości do: tabela w bazie Supabase (14), funkcja edge w Supabase (13), EmailJS (13), własny serwer strony (4), Formspree (3), FormSubmit (1), Google Apps Script (1), inne usługi (5).
Czy to nie są po prostu dema?
Część tak. Nasza próba przechyla się w stronę programistów: projekty z hackathonów, portfolio, projekty po godzinach. Atrapa formularza w demie z hackathonu nikogo nic nie kosztuje. Dlatego jeszcze przed liczeniem ustaliliśmy regułę i przypisaliśmy każdą stronę do jednej grupy: demo (zgłoszenie na hackathon albo zastępcze dane kontaktowe, np. numer telefonu 555 lub adres w domenie example.com), portfolio (strona osobista) albo bez oznak dema (cała reszta).
Dema, jak można się spodziewać, najczęściej tylko udają wysyłkę. Ale na pozostałych stronach problem nie znika: 16 z 73 stron bez oznak dema — sklepy, studia, firma sprzątająca, strony produktów; 5 z 30 na własnych domenach — miało formularz, który dziękuje odwiedzającemu i nic nie wysyła. „Bez oznak dema” to ostrożna etykieta, a nie dowód, że od tego formularza zależy czyjś biznes.
Jak testowaliśmy
- Próba. 813 działających stron zbudowanych w Lovable lub Bolt, zebranych z madewithlovable.com, z projektów na GitHubie, które używają plików buildu Lovable lub Bolt, z Hacker News i z galerii hackathonu Bolt. 20 z nich posłużyło wyłącznie do debugowania testu.
- Szukanie formularza. Prawdziwy Chrome (Playwright) otwierał stronę główną, a potem
/contact. Za formularz kontaktowy uznawaliśmy taki, który ma pole na wiadomość oraz pole na imię, e-mail lub telefon; formularze logowania i zapisu do newslettera się nie liczyły. - Wysyłka bez wysyłania. Każde widoczne pole wypełnialiśmy wyraźnie fałszywymi wartościami testowymi, nigdy nie ruszaliśmy pól-pułapek (honeypot) i klikaliśmy przycisk wysyłki. Od tej chwili każde wychodzące żądanie było rejestrowane i przerywane, więc nic nie trafiało do właściciela ani do żadnej usługi. Pingi analityki pomijaliśmy.
- Klasyfikacja. Formularz „wysyła” tylko wtedy, gdy któreś żądanie niosło wpisane przez nas dane. „Udaje sukces” tylko wtedy, gdy takiego żądania nie było, a pojawił się komunikat o sukcesie (sprawdzaliśmy co 250 ms przez pięć sekund, łącznie z okienkami
alert()).
Reguły spisaliśmy przed testem, a każdą zmianę zapisywaliśmy. Pierwsze przebiegi miały błędy: pingi analityki liczyły się jako wysyłka, krótko widoczne komunikaty umykały, a wypełnienie ukrytego honeypota wywoływało fałszywe „dziękujemy” przeznaczone dla botów. Każdy błąd poprawiliśmy, sprawdziliśmy poprawkę na 23 stronach testowych o znanym wyniku i ponownie przetestowaliśmy wszystkie strony z formularzem. Potem ręcznie przeczytaliśmy kod wysyłki formularzy-atrap.
Sprawdź swój formularz w 30 sekund
Zielony komunikat niczego nie dowodzi. Żądanie dowodzi, że formularz próbował wysłać wiadomość, a dopiero Twoja skrzynka dowodzi, że wiadomość dotarła. Kroki są poniżej; w karcie Payload żądania powinien być tekst, który wpisano w formularzu.
Skąd w kreatorach AI biorą się atrapy formularzy
To, co możemy pokazać, to kod. W atrapach, które przeczytaliśmy, nic się nie zepsuło: obsługa wysyłki była zaślepką, która czeka, pokazuje komunikat i czyści pola — i nigdy, na żadnym etapie, niczego nie wysyłała.
Dlaczego ta zaślepka tam jest, to już nasza interpretacja, a nie pomiar; nie sprawdzaliśmy, co Lovable ani Bolt generują domyślnie. Formularz kontaktowy to dwie rzeczy: pola na stronie i coś na serwerze, co odbiera wiadomość i daje Ci o niej znać. Pierwsza część to sam kod. Druga wymaga konta, klucza albo decyzji o backendzie, a dokumentacja Lovable kieruje do Supabase i usługi e-mailowej, takiej jak Resend, połączonych przez funkcję edge. Jeśli nikt tej decyzji nie podejmie, najłatwiej skończyć z formularzem, który tylko wygląda na gotowy.
Jak naprawić formularz, który nic nie wysyła
Masz trzy rozsądne wyjścia:
- Zbuduj backend w projekcie. W Lovable oznacza to tabelę w Supabase, funkcję edge i dostawcę e-maili. Jeśli żądanie wychodzi, a wiadomość nie dociera, diagnostyka dostawy prowadzi przez kolejne etapy kontroli.
- Użyj
mailto:. Zero konfiguracji, ale działa tylko u odwiedzających z programem pocztowym na komputerze, a u Ciebie nie zostaje żadna kopia wiadomości. Zobacz formularz mailto czy backend formularzy. - Podłącz formularz do backendu formularzy. Formularz wysyła dane na jeden adres URL, a usługa zapisuje wiadomość i przesyła Ci ją e-mailem. Tak działają Formgong, Formspree i Web3Forms. W Formgong plan darmowy obejmuje 300 zgłoszeń miesięcznie, natychmiastowe powiadomienia w Telegramie i przechowywanie danych w UE; jest też gotowy projekt Lovable do zremiksowania, a całe podłączenie krok po kroku opisuje poradnik dla Lovable. Dla agentów piszących kod (Claude Code, Cursor, Codex) jest skill, który dodaje formularz i zastępuje fałszywe handlery:
npx skills add formgong/skills.
Cokolwiek wybierzesz, pokazuj komunikat o sukcesie dopiero wtedy, gdy serwer potwierdzi odbiór. Wklej to polecenie do Lovable lub Bolt, żeby zastąpić atrapę obsługi wysyłki:
Mój formularz kontaktowy pokazuje komunikat o sukcesie, ale niczego nie wysyła. Spraw, żeby wysyłał naprawdę: 1. Po kliknięciu wysyłki prześlij pola formularza metodą POST na https://formgong.com/submit przez fetch i FormData, z nagłówkiem Accept: application/json, i dołącz access_key = "fk_your_access_key". 2. Pokaż komunikat o sukcesie tylko wtedy, gdy odpowiedź JSON ma success === true. W przeciwnym razie zachowaj to, co wpisał odwiedzający, i pokaż zwrócony komunikat. 3. Zostaw w formularzu ukryte pole-pułapkę (honeypot) o nazwie "botcheck". Nie dodawaj Supabase, funkcji edge, Resend ani EmailJS. Nie zmieniaj wyglądu.
Ograniczenia
- Próba nie jest losowa. Pochodzi z publicznych zestawień i przechyla się w stronę projektów programistów; galerie częściej pokazują dopracowane strony.
- Ponieważ blokowaliśmy każde żądanie, widzieliśmy, czy formularz próbował wysłać wiadomość, a nie czy e-mail dotarł. Formularze zaliczone do grupy „wysyła” mogą zawieść na dalszym etapie.
- Każdą stronę testowaliśmy kilka razy, poprawiając test; liczby pochodzą z ostatniego przebiegu 8 października 2026. Kilka stron zmieniło klasę między przebiegami, bo ładowały się wolno albo wcale. Strony się zmieniają; formularz, który był atrapą, mógł już zostać naprawiony.
- Link
mailto:otwarty bez żadnego komunikatu na ekranie albo formularz zablokowany przez własną walidację mogą wyglądać jak „nic się nie dzieje”. Dlatego tę grupę podajemy osobno i nigdy nie doliczamy jej do atrap. - Nie podajemy nazw stron. Chodzi o wzorzec, a nie o ludzi, którzy opublikowali demo.
Pytania i odpowiedzi
Jak sprawdzić, czy mój formularz kontaktowy naprawdę wysyła?
Otwórz opublikowaną stronę, naciśnij F12, przejdź do karty Network, wyślij formularz raz i poszukaj nowego żądania z wpisanym przez Ciebie tekstem. Jeśli żadne żądanie się nie pojawi, formularz niczego nie wysyła, bez względu na to, jaki komunikat pokazuje. Potem sprawdź, czy wiadomość dotarła do skrzynki albo panelu.
Dlaczego formularz w Lovable lub Bolt pisze „Wiadomość wysłana”, a e-mail nie przychodzi?
Często obsługa wysyłki tylko pokazuje komunikat i nigdy nie wysyła żądania. Jeśli żądanie wychodzi, problem leży dalej: klucz usługi e-mailowej, błąd funkcji edge albo filtr antyspamowy. Karta Network pokaże, który to przypadek.
Ile formularzy kontaktowych zbudowanych przez AI nic nie wysyła?
W naszym teście stron z Lovable i Bolt w październiku 2026 27 ze 105 formularzy kontaktowych pokazało komunikat o sukcesie, niczego nie wysyłając, a kolejnych 12 nie zrobiło nic widocznego. Na stronach bez oznak dema atrapą okazało się 16 z 73.
Czy wysyłaliście wiadomości do tych stron?
Nie. Każde żądanie po kliknięciu było blokowane w przeglądarce, więc żadna wiadomość nie dotarła do właściciela strony ani do żadnej usługi formularzy.
Jak najszybciej sprawić, żeby formularz działał?
Podłącz formularz do hostowanego backendu formularzy i pokazuj sukces dopiero wtedy, gdy backend potwierdzi odbiór. Gotowe polecenie dla Lovable lub Bolt znajdziesz w tym artykule.
Źródła i dokumentacja
Oficjalne materiały pomocnicze: Dokumentacja Lovable: integracja z Resend, Chrome DevTools: sprawdzanie aktywności sieciowej, MDN: korzystanie z Fetch API, Playwright: przechwytywanie ruchu sieciowego. Formgong dla Lovable, Przechowywanie danych.
Artykuł w formacie MarkdownPrzeczytaj także
- Formularz w Lovable: od przycisku do prawdziwego zgłoszenia
- Formularz HTML na statycznej stronie, bez własnego serwera
- Zgłoszenia ze strony w Telegramie: czat prywatny lub grupa
- Formularz pokazuje sukces, ale email nie dociera — co sprawdzić
- Leady ze strony w Telegramie: statusy i przypomnienia zamiast CRM
- Backend dla formularzy z Lovable, Bolt, v0 i Cursor
- Bot Telegram do formularza: pisać własnego?
- Backend formularzy a RODO: 7 kryteriów wyboru
- Formularz mailto czy backend formularzy?
- Formularz HTML do Google Sheets: 2 sposoby
- Limit formularzy Webflow: co zrobić po 50
- Turnstile, reCAPTCHA czy hCaptcha do formularza
- Contact Form 7 i Elementor do Telegrama
- Formularz Squarespace nie wysyła maili?
- Formularz kontaktowy Shopify: gdzie trafia?
- Formularz Google do Telegrama: za darmo
- Formularz Wix nie wysyła maili? Rozwiązania
- Alternatywy Formspree z danymi w UE / RODO