# Formularz kontaktowy, który nic nie wysyła: test 793 stron

Wysłaliśmy formularz kontaktowy na 105 stronach z Lovable i Bolt, śledząc żądania. 27 pokazało „Wiadomość wysłana!” i nic nie wysłało. Dane i test w 30 sekund.

Author: Formgong team
Published: 2026-10-07
Updated: 2026-10-08
Language: pl
Canonical: https://formgong.com/pl/blog/contact-forms-that-send-nothing/

Wypełniliśmy i wysłaliśmy formularz kontaktowy na 105 publicznych stronach zbudowanych w Lovable i Bolt, rejestrując każde żądanie sieciowe. 27 ze 105 (26%) pokazało komunikat o sukcesie, np. „Wiadomość wysłana!”, nigdzie nie wysyłając wiadomości, a kolejnych 12 nie zrobiło nic widocznego. Tylko 54 ze 105 naprawdę wysłały wiadomość. Na stronach bez oznak dema atrapą okazało się 16 z 73 formularzy. Własny formularz sprawdzisz w 30 sekund: otwórz DevTools → Network, wyślij go raz i poszukaj żądania z wpisanym przez Ciebie tekstem.

## 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.

*Figure: Animacja: formularz kontaktowy zostaje wypełniony i wysłany, pojawia się zielony komunikat „Wiadomość wysłana!”, a panel Network przeglądarki pokazuje zero żądań po kliknięciu.*

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.

```javascript
// 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”:

*Figure: Wykres słupkowy: 105 formularzy, z czego 54 wysłały wiadomość, 27 pokazało sukces i nic nie wysłało, 12 nie zrobiło nic widocznego, 7 otworzyło program pocztowy odwiedzającego, a 5 przeszło na inną stronę bez wysyłki.*

- **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).

*Figure: Wykres słupkowy: atrapę formularza miało 16 z 73 stron bez oznak dema, 2 z 17 portfolio i 9 z 15 stron demo.*

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

*Figure: Schemat: 793 sprawdzonych stron, 119 z formularzem kontaktowym, każde żądanie zarejestrowane i zablokowane, 105 jednoznacznych wyników.*

- **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

*Figure: Animacja: dwa panele Network. Przy działającym formularzu po wysłaniu pojawia się nowe żądanie POST; przy atrapie nie pojawia się nic.*

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](/pl/blog/contact-form-not-sending-email/) 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](/pl/blog/mailto-form-vs-form-backend/).

- **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](https://lovable.dev/projects/64b83589-d6e1-41cd-80f9-dac08c5ad510), a całe podłączenie krok po kroku opisuje [poradnik dla Lovable](/pl/blog/lovable-contact-form-email-telegram/). 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:

```text
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

- [Dokumentacja Lovable: integracja z Resend](https://docs.lovable.dev/integrations/resend)
- [Chrome DevTools: sprawdzanie aktywności sieciowej](https://developer.chrome.com/docs/devtools/network)
- [MDN: korzystanie z Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch)
- [Playwright: przechwytywanie ruchu sieciowego](https://playwright.dev/docs/network)
- [Formgong dla Lovable](https://formgong.com/pl/docs/lovable/)

[Pobierz klucz formularza](https://formgong.com/pl/#top)
