{"id":30207,"date":"2026-06-23T09:47:00","date_gmt":"2026-06-23T08:47:00","guid":{"rendered":"https:\/\/www.web-systems.pl\/contact-form-spam-protection-without-annoying-customers\/"},"modified":"2026-09-25T08:09:09","modified_gmt":"2026-09-25T07:09:09","slug":"contact-form-spam-protection-without-annoying-customers","status":"publish","type":"post","link":"https:\/\/www.web-systems.pl\/en\/contact-form-spam-protection-without-annoying-customers\/","title":{"rendered":"Contact Form Spam: Protection Without Annoying Customers"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Spam z formularza kontaktowego najskuteczniej zatrzymasz kilkoma niewidocznymi warstwami: polem honeypot, kontrol\u0105 czasu wype\u0142nienia i filtrem tre\u015bci. Captcha? Na sam koniec, jako ostatnia linia obrony. Przy takim uk\u0142adzie boty odpadaj\u0105, zanim klient w og\u00f3le zauwa\u017cy, \u017ce kto\u015b go sprawdza. Skrzynk\u0119 zalewaj\u0105 ci oferty pozycjonowania, a odk\u0105d doda\u0142e\u015b obrazkow\u0105 zagadk\u0119, klienci dzwoni\u0105 z tekstem &#8220;nie mog\u0119 wys\u0142a\u0107 wiadomo\u015bci&#8221;? No w\u0142a\u015bnie, ten poradnik jest dla ciebie. Ka\u017cd\u0105 metod\u0119 oceniamy pod trzema k\u0105tami: czy dzia\u0142a w praktyce, ile wysi\u0142ku kosztuje u\u017cytkownika i czy nie odcina os\u00f3b z niepe\u0142nosprawno\u015bciami.<\/p>\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_86 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of contents<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.web-systems.pl\/en\/contact-form-spam-protection-without-annoying-customers\/#Skad_bierze_sie_spam_z_formularza_kontaktowego\" >Sk\u0105d bierze si\u0119 spam z formularza kontaktowego?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.web-systems.pl\/en\/contact-form-spam-protection-without-annoying-customers\/#Dlaczego_captcha_zniecheca_klientow\" >Dlaczego captcha zniech\u0119ca klient\u00f3w?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.web-systems.pl\/en\/contact-form-spam-protection-without-annoying-customers\/#Niewidoczne_metody_ochrony_formularza_przed_botami\" >Niewidoczne metody ochrony formularza przed botami<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.web-systems.pl\/en\/contact-form-spam-protection-without-annoying-customers\/#reCAPTCHA_i_alternatywy_kiedy_weryfikacja_ma_sens\" >reCAPTCHA i alternatywy: kiedy weryfikacja ma sens<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.web-systems.pl\/en\/contact-form-spam-protection-without-annoying-customers\/#Filtrowanie_tresci_i_zabezpieczenia_po_stronie_serwera\" >Filtrowanie tre\u015bci i zabezpieczenia po stronie serwera<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.web-systems.pl\/en\/contact-form-spam-protection-without-annoying-customers\/#Jak_zablokowac_spam_w_formularzu_WordPress_krok_po_kroku\" >Jak zablokowa\u0107 spam w formularzu WordPress krok po kroku?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.web-systems.pl\/en\/contact-form-spam-protection-without-annoying-customers\/#Najczestsze_pytania\" >Najcz\u0119stsze pytania<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.web-systems.pl\/en\/contact-form-spam-protection-without-annoying-customers\/#Czy_sam_honeypot_wystarczy_do_zablokowania_spamu\" >Czy sam honeypot wystarczy do zablokowania spamu?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.web-systems.pl\/en\/contact-form-spam-protection-without-annoying-customers\/#Czy_reCAPTCHA_v3_jest_widoczna_dla_uzytkownika\" >Czy reCAPTCHA v3 jest widoczna dla u\u017cytkownika?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.web-systems.pl\/en\/contact-form-spam-protection-without-annoying-customers\/#Jak_sprawdzic_czy_captcha_nie_blokuje_klientow\" >Jak sprawdzi\u0107, czy captcha nie blokuje klient\u00f3w?<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Skad_bierze_sie_spam_z_formularza_kontaktowego\"><\/span>Sk\u0105d bierze si\u0119 spam z formularza kontaktowego?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<p class=\"wp-block-paragraph\">Wi\u0119kszo\u015b\u0107 tego \u015bmiecia wysy\u0142aj\u0105 automatyczne boty, kt\u00f3re przeczesuj\u0105 sie\u0107 w poszukiwaniu otwartych formularzy. Cz\u0142owiek r\u0119cznie wklejaj\u0105cy reklam\u0119? Zdarza si\u0119, ale du\u017co rzadziej. Najcz\u0119\u015bciej dostajesz:<\/p>\n\n<ul class=\"wp-block-list\">\n<li><strong>linki SEO<\/strong> wklejane w nadziei na darmowy odno\u015bnik,<\/li>\n<li>phishing udaj\u0105cy bank, kuriera albo rejestratora domeny,<\/li>\n<li>oferty us\u0142ug, od pozycjonowania po &#8220;gor\u0105ce leady&#8221;,<\/li>\n<li>pr\u00f3by wstrzykni\u0119cia kodu, czyli sprawdzanie, czy formularz przepu\u015bci skrypt albo zapytanie do bazy danych.<\/li>\n<\/ul>\n\n<p class=\"wp-block-paragraph\">Popularne wtyczki i domy\u015blne adresy formularzy tylko botom pomagaj\u0105. Jeden znany uk\u0142ad p\u00f3l i mo\u017cna jecha\u0107 po ogromnej liczbie stron. Aha, boty nie s\u0105 sobie r\u00f3wne. Te proste strzelaj\u0105 \u017c\u0105daniem prosto w serwer, w og\u00f3le nie \u0142aduj\u0105c strony. Zaawansowane odpalaj\u0105 prawdziw\u0105 przegl\u0105dark\u0119 i wykonuj\u0105 JavaScript. I od tego zale\u017cy, kt\u00f3ra ochrona w og\u00f3le zadzia\u0142a.<\/p>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Dlaczego_captcha_zniecheca_klientow\"><\/span>Dlaczego captcha zniech\u0119ca klient\u00f3w?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<p class=\"wp-block-paragraph\">Klasyczna captcha zrzuca weryfikacj\u0119 na cz\u0142owieka, wi\u0119c ka\u017cdy trudniejszy test to ryzyko, \u017ce klient po prostu zamknie kart\u0119. Najbardziej obrywaj\u0105 osoby niewidome, osoby z dysleksj\u0105 i wszyscy, kt\u00f3rzy korzystaj\u0105 z czytnika ekranu albo obs\u0142uguj\u0105 stron\u0119 sam\u0105 klawiatur\u0105. Dla nich zagadka obrazkowa bywa \u015bcian\u0105. A wersja d\u017awi\u0119kowa? Cz\u0119sto nie da si\u0119 jej zrozumie\u0107. Dlatego dost\u0119pno\u015b\u0107 captchy wychodzi przy ka\u017cdym audycie, a <a href=\"https:\/\/www.web-systems.pl\/strony-wcag\/\">strony zgodne z WCAG<\/a> musz\u0105 dawa\u0107 inny spos\u00f3b weryfikacji albo kontaktu.<\/p>\n\n<p class=\"wp-block-paragraph\">K\u0142opoty s\u0105 te\u017c na telefonach z ma\u0142ym ekranem, przy blokerach skrypt\u00f3w i w trybie prywatnym, gdzie test potrafi si\u0119 zap\u0119tli\u0107 w niesko\u0144czono\u015b\u0107. No i reCAPTCHA wysy\u0142a dane o odwiedzaj\u0105cym do Google, wi\u0119c polityka prywatno\u015bci musi to uwzgl\u0119dnia\u0107.<\/p>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Niewidoczne_metody_ochrony_formularza_przed_botami\"><\/span>Niewidoczne metody ochrony formularza przed botami<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<p class=\"wp-block-paragraph\">Najlepsza ochrona formularza przed botami dzia\u0142a w tle i niczego od klienta nie chce. Sprawdzone warstwy:<\/p>\n\n<ul class=\"wp-block-list\">\n<li><strong>honeypot w formularzu<\/strong>, czyli ukryte pole, kt\u00f3re wype\u0142ni tylko bot,<\/li>\n<li>minimalny czas wype\u0142nienia: je\u015bli wiadomo\u015b\u0107 posz\u0142a szybciej, ni\u017c cz\u0142owiek zd\u0105\u017cy\u0142by przeczyta\u0107 pola, leci do kosza,<\/li>\n<li>jednorazowy token generowany przez JavaScript, kt\u00f3rego bot bez przegl\u0105darki nie zdob\u0119dzie,<\/li>\n<li>limit wysy\u0142ek z jednego adresu IP w okre\u015blonym czasie.<\/li>\n<\/ul>\n\n<p class=\"wp-block-paragraph\">Pole-pu\u0142apk\u0119 trzeba schowa\u0107 tak, \u017ceby nie myli\u0142o czytnik\u00f3w ekranu. Kontener dostaje <em>aria-hidden=&#8221;true&#8221;<\/em>, a samo pole <em>tabindex=&#8221;-1&#8243;<\/em> i <em>autocomplete=&#8221;off&#8221;<\/em> (inaczej przegl\u0105darka potrafi je sama uzupe\u0142ni\u0107 i prawdziwy klient wyl\u0105duje w spamie). Tylko \u017ce zaawansowany bot jedn\u0105 warstw\u0119 obejdzie bez problemu. Dlatego metody zawsze si\u0119 \u0142\u0105czy.<\/p>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"reCAPTCHA_i_alternatywy_kiedy_weryfikacja_ma_sens\"><\/span>reCAPTCHA i alternatywy: kiedy weryfikacja ma sens<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<p class=\"wp-block-paragraph\">Je\u015bli niewidoczne metody nie daj\u0105 rady, si\u0119gnij po weryfikacj\u0119 bez zagadek, na przyk\u0142ad reCAPTCHA v3 albo Cloudflare Turnstile. Wersja v2 pokazuje pole wyboru, a gdy ma w\u0105tpliwo\u015bci, wyskakuj\u0105 obrazki do klikania. Wersja v3 ocenia ryzyko w tle i zwraca wynik, a ty decydujesz, co zrobi\u0107 ze zg\u0142oszeniem. Turnstile sprawdza przegl\u0105dark\u0119 bez obrazk\u00f3w i mniej \u015bledzi u\u017cytkownika.<\/p>\n\n<p class=\"wp-block-paragraph\">Inne alternatywy dla reCAPTCHA to hCaptcha, Friendly Captcha i prosta captcha tekstowa albo pytanie, kt\u00f3re czytnik ekranu odczyta bez kombinowania. Przy wyborze patrz na trzy rzeczy: dost\u0119pno\u015b\u0107 dla wszystkich odwiedzaj\u0105cych, zakres wysy\u0142anych danych osobowych i to, jak \u0142atwo to wpi\u0105\u0107 we wtyczk\u0119, kt\u00f3rej ju\u017c u\u017cywasz. Moim zdaniem ta ostatnia kwestia bywa niedoceniana.<\/p>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Filtrowanie_tresci_i_zabezpieczenia_po_stronie_serwera\"><\/span>Filtrowanie tre\u015bci i zabezpieczenia po stronie serwera<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<p class=\"wp-block-paragraph\">To, co prze\u015blizgnie si\u0119 przez formularz, da si\u0119 jeszcze odsia\u0107 na serwerze, zanim wyl\u0105duje w <a href=\"https:\/\/www.web-systems.pl\/hosting-stron-oraz-poczty\/\">skrzynce<\/a>. Filtr s\u0142\u00f3w i link\u00f3w zatrzyma wiadomo\u015bci naszpikowane odno\u015bnikami. Walidacja p\u00f3l odrzuci chocia\u017cby adres URL wpisany w polu &#8220;imi\u0119&#8221; (serio, boty tak robi\u0105). Us\u0142ugi antyspamowe typu Akismet por\u00f3wnuj\u0105 tre\u015b\u0107 z baz\u0105 znanego spamu i oznaczaj\u0105 podejrzane zg\u0142oszenia.<\/p>\n\n<p class=\"wp-block-paragraph\">Formularz jest tak bezpieczny jak ca\u0142a witryna. St\u0105d regularne <a href=\"https:\/\/www.web-systems.pl\/wordpress-security-hardening-jak-zabezpieczyc-swoja-strone-przed-atakami\/\">utwardzanie WordPressa krok po kroku<\/a>: aktualizacje, firewall aplikacyjny, blokowanie podejrzanych adres\u00f3w IP. Ostatni filtr to poczta. Filtry antyspamowe i dobrze ustawione na serwerze rekordy SPF i DKIM decyduj\u0105, czy prawdziwe zapytania w og\u00f3le dotr\u0105 do adresata. \u0141atwiej to ogarn\u0105\u0107, gdy masz porz\u0105dny hosting poczty dla firmy.<\/p>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Jak_zablokowac_spam_w_formularzu_WordPress_krok_po_kroku\"><\/span>Jak zablokowa\u0107 spam w formularzu WordPress krok po kroku?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n<p class=\"wp-block-paragraph\">Zacznij od najl\u017cejszych warstw. Kolejne dok\u0142adaj dopiero wtedy, gdy spam dalej przechodzi:<\/p>\n\n<ol class=\"wp-block-list\">\n<li>honeypot i kontrola czasu wype\u0142nienia,<\/li>\n<li>walidacja p\u00f3l i filtr tre\u015bci,<\/li>\n<li>niewidoczna weryfikacja, czyli Turnstile albo reCAPTCHA v3,<\/li>\n<li>captcha interaktywna w\u0142\u0105czana tylko przy podejrzanym ruchu.<\/li>\n<\/ol>\n\n<p class=\"wp-block-paragraph\">Wi\u0119kszo\u015b\u0107 wtyczek ma cz\u0119\u015b\u0107 tych opcji na pok\u0142adzie. Pokazujemy je na przyk\u0142adzie, w kt\u00f3rym konfigurujemy <a href=\"https:\/\/www.web-systems.pl\/jak-stworzyc-formularz-kontaktowy-w-wordpress-przy-uzyciu-wpforms-kompleksowy-przewodnik\/\">formularz kontaktowy w WPForms<\/a>. Po ka\u017cdej zmianie wy\u015blij wiadomo\u015b\u0107 z telefonu, sam\u0105 klawiatur\u0105 i z w\u0142\u0105czonym czytnikiem ekranu. Potem zajrzyj do folderu spam. Nie ma co zak\u0142ada\u0107, \u017ce skoro formularz pokaza\u0142 &#8220;wys\u0142ano&#8221;, to wiadomo\u015b\u0107 dosz\u0142a.<\/p>\n\n<p class=\"wp-block-paragraph\">Dobrze pouk\u0142adana, warstwowa ochrona ogranicza spam z formularza kontaktowego i nie karze przy tym prawdziwych klient\u00f3w. Najpro\u015bciej, gdy <a href=\"https:\/\/www.web-systems.pl\/strony-wordpress\/\">strony firmowe na WordPressie<\/a> od pocz\u0105tku projektuje si\u0119 z my\u015bl\u0105 o bezpiecze\u0144stwie i dost\u0119pno\u015bci.<\/p>\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Najczestsze_pytania\"><\/span>Najcz\u0119stsze pytania<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1790308605955-0\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><span class=\"ez-toc-section\" id=\"Czy_sam_honeypot_wystarczy_do_zablokowania_spamu\"><\/span>Czy sam honeypot wystarczy do zablokowania spamu?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Na proste boty zwykle tak, bo wype\u0142niaj\u0105 ka\u017cde pole, jakie znajd\u0105 w kodzie. Zaawansowane rozpoznaj\u0105 ukryte pola i je omijaj\u0105. Wtedy do\u0142\u00f3\u017c kontrol\u0119 czasu wype\u0142nienia i filtr tre\u015bci.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1790308605955-1\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><span class=\"ez-toc-section\" id=\"Czy_reCAPTCHA_v3_jest_widoczna_dla_uzytkownika\"><\/span>Czy reCAPTCHA v3 jest widoczna dla u\u017cytkownika?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Nie. Dzia\u0142a w tle i nie pokazuje \u017cadnych zagadek. Trzeba jednak ustawi\u0107 pr\u00f3g oceny i przemy\u015ble\u0107 przypadki graniczne, na przyk\u0142ad dodatkow\u0105 weryfikacj\u0119 zamiast odrzucania wiadomo\u015bci. I pami\u0119taj, \u017ce dane o odwiedzaj\u0105cym id\u0105 przy tym do Google.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1790308605955-2\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><span class=\"ez-toc-section\" id=\"Jak_sprawdzic_czy_captcha_nie_blokuje_klientow\"><\/span>Jak sprawdzi\u0107, czy captcha nie blokuje klient\u00f3w?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Przetestuj formularz z czytnikiem ekranu, sam\u0105 klawiatur\u0105 i na telefonie. Po wdro\u017ceniu obserwuj, czy nie spad\u0142a liczba zapyta\u0144 od prawdziwych klient\u00f3w. I zostaw inn\u0105 drog\u0119 kontaktu: widoczny adres e-mail i numer telefonu.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Spam z formularza kontaktowego najskuteczniej zatrzymasz kilkoma niewidocznymi warstwami: polem honeypot, kontrol\u0105 czasu wype\u0142nienia i filtrem tre\u015bci. Captcha? Na sam koniec, jako ostatnia linia obrony. Przy takim uk\u0142adzie boty odpadaj\u0105, zanim klient w og\u00f3le zauwa\u017cy, \u017ce kto\u015b go sprawdza. Skrzynk\u0119 zalewaj\u0105 ci oferty pozycjonowania, a odk\u0105d doda\u0142e\u015b obrazkow\u0105 zagadk\u0119, klienci dzwoni\u0105 z tekstem &#8220;nie mog\u0119 [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":30191,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[806],"tags":[],"class_list":["post-30207","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web-development-en"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/posts\/30207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/comments?post=30207"}],"version-history":[{"count":3,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/posts\/30207\/revisions"}],"predecessor-version":[{"id":30256,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/posts\/30207\/revisions\/30256"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/media\/30191"}],"wp:attachment":[{"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/media?parent=30207"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/categories?post=30207"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/tags?post=30207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}