Modelowane listy odbiorców nie zawierają konkretnych osób, tylko prawdopodobieństwa. Wyjaśniam, jak powstają, gdzie ich szukać w panelu i jak czytać ich raporty.
Spam w komentarzach wraca do mnie regularnie w dwóch wersjach. Pierwsza to strona, na której pod każdym wpisem wisi kilkadziesiąt komentarzy z odnośnikami do kasyn, pożyczek i podejrzanych sklepów, bo moderacja została wyłączona lata temu. Druga to skrzynka właściciela zapchana powiadomieniami o komentarzach do zatwierdzenia, w której ginie jedno prawdziwe pytanie od klienta.
Oba przypadki mają to samo źródło: formularz komentarza jest publicznym punktem wejścia do naszej bazy danych, a jego wypełnienie da się zautomatyzować. Boty nie czytają treści wpisu i nie interesuje ich, czy strona ma jakikolwiek ruch — wypełniają wszystko, co znajdą.
Nie ma jednej wtyczki, która to załatwia. Działa natomiast układ kilku warstw, z których każda odsiewa część ruchu, i kilka decyzji o samym formularzu, których większość właścicieli stron nigdy nie podjęła świadomie.
Warto zrozumieć motywację, bo od niej zależy skuteczna obrona.
Najczęstszy cel to odnośnik. Automat zostawia adres w treści komentarza albo w polu strony internetowej autora, licząc na to, że odnośnik zostanie opublikowany i przekaże wartość docelowej witrynie. Skala jest przemysłowa — jedna kampania obejmuje tysiące domen wyszukanych po charakterystycznym adresie formularza albo po sygnaturze systemu zarządzania treścią.
Drugi cel to ruch — komentarz nie musi mieć aktywnego odnośnika, wystarczy, że ktoś przeczyta nazwę domeny. Trzeci, najgroźniejszy, to zwabienie użytkownika na stronę z oszustwem lub złośliwym oprogramowaniem, gdzie nasza witryna jest tylko nośnikiem. Czwarty w ogóle nie dotyczy komentarzy: część zgłoszeń to sprawdzanie, czy formularz da się wykorzystać do zapisania kodu.
Dlatego spam pojawia się także na stronach bez żadnej widoczności w wyszukiwarce i dlatego nowa strona dostaje pierwsze zgłoszenia w ciągu kilku dni od uruchomienia. Boty nie wybierają najsłabszej strony ze zbioru — biorą wszystkie po kolei, więc argument „nikt nas nie zna, więc nas to nie dotyczy” nie ma tu zastosowania.
Odpowiadam ostrożnie, bo w tym temacie krąży dużo przesady w obie strony.
Odnośniki wychodzące z naszej witryny są jej elementem. Setki opublikowanych, aktywnych odnośników do stron z branż wysokiego ryzyka to nie neutralna dekoracja — to komunikat o tym, do czego nasza witryna prowadzi ludzi i na ile jest nadzorowana. Google od lat radzi sobie z takim spamem automatycznie i w zdecydowanej większości przypadków po prostu go ignoruje, ale zaniedbanego serwisu to nie premiuje.
Realne szkody widzę zwykle w innych miejscach. Strony przeładowane spamem wyglądają na porzucone, co odbija się na zaufaniu użytkownika, a przy dużych ilościach komentarzy pogarsza czas wczytywania. Jeśli komentarze mają osobne adresy albo paginację, do indeksu trafia treść, której nikt nie planował. A w skrajnym przypadku — gdy spam jest efektem włamania, nie samego formularza — dochodzi do ostrzeżenia o niebezpiecznej witrynie, które ruch ucina natychmiast.
Dlatego traktuję to jako kwestię higieny serwisu i bezpieczeństwa, nie jako zagrożenie karą — ta perspektywa prowadzi do lepszych decyzji, bo skupia uwagę na tym, co naprawdę boli.
Zanim instaluję cokolwiek dodatkowego, przechodzę ustawienia dyskusji w panelu. Zwykle jest tam kilka darmowych usprawnień.
Powyżej ustawień systemowych układam narzędzia, które oceniają samo zgłoszenie.
Filtr oparty na wspólnej bazie zgłoszeń — najbardziej znany jest Akismet, ale istnieją też alternatywy działające lokalnie — porównuje treść, adres IP i inne cechy z tym, co zostało zgłoszone jako spam na innych stronach. To wciąż najskuteczniejsza pojedyncza warstwa, bo działa na wzorcach z całej sieci, a nie z naszej jednej witryny. Przy usługach zewnętrznych warto sprawdzić, jakie dane wychodzą poza serwer, i opisać to w polityce prywatności.
Druga warstwa to pułapki w formularzu. Ukryte pole, którego człowiek nie widzi i nie wypełnia, a automat wypełnia odruchowo. Sprawdzenie czasu między wczytaniem strony a wysłaniem formularza — wypełnienie w dwie sekundy nie jest ludzkie. Jednorazowy token w formularzu, bez którego zgłoszenie jest odrzucane, co eliminuje wysyłanie danych wprost do adresu obsługującego komentarze. Te mechanizmy są niewidoczne dla użytkownika i dlatego lubię je najbardziej.
Trzecia warstwa to limit zgłoszeń z jednego adresu IP w jednostce czasu, ustawiony na poziomie serwera. Nie rozwiązuje problemu w całości, bo duże kampanie korzystają z wielu adresów, ale zdejmuje obciążenie z bazy danych.
Zagadki dla użytkownika traktuję jako ostatnią opcję. Rozwiązywanie działań matematycznych albo klikanie w obrazki obniża liczbę prawdziwych komentarzy, utrudnia korzystanie ze strony osobom z niepełnosprawnościami i przy dzisiejszych narzędziach niekoniecznie zatrzymuje sprawniejsze automaty.
Ta warstwa nie ogranicza napływu spamu, ale ustawia jego skutki.
Odnośniki w treściach tworzonych przez użytkowników powinny mieć atrybut wskazujący ich charakter. Do komentarzy i wpisów na forach przeznaczona jest wartość informująca, że treść pochodzi od użytkownika; obok niej funkcjonuje wartość dla odnośników płatnych oraz klasyczne oznaczenie, którego Google od kilku lat nie traktuje jako sztywnej instrukcji, a jako wskazówkę.
W praktyce sprawdzam trzy rzeczy. Czy system dodaje odpowiedni atrybut automatycznie do wszystkiego, co wychodzi z komentarzy. Czy dotyczy to również adresu w polu autora i podpisu, bo tam bywa pominięty. I czy jakaś wtyczka albo motyw nie usuwa tych atrybutów przy renderowaniu — zdarza się to przy rozwiązaniach wczytujących komentarze skryptem.
Warto też wyłączyć automatyczną zamianę adresów w treści komentarza na aktywne odnośniki. Sam tekst adresu spamerowi nie daje prawie nic, a użytkownikowi w normalnej dyskusji wystarcza.
Zabezpieczenia zatrzymują nowy napływ, ale nie kasują zaległości, a przy zaniedbanych serwisach zaległości bywają liczone w tysiącach wpisów.
Zaczynam od przejrzenia istniejących komentarzy z filtrem po charakterystycznych fragmentach adresów i słowach, które powtarzają się w spamie. Usuwam grupami, sprawdzając wyrywkowo, czy w partii nie ma prawdziwego wpisu. Potem czyszczę kolejkę oczekujących i kosz — przy dużych ilościach warto to zrobić także po stronie bazy danych, bo tabela komentarzy zostaje rozdmuchana i spowalnia stronę.
Następnie sprawdzam, czy sytuacja nie jest poważniejsza, niż wygląda. Otwieram raport problemów bezpieczeństwa w Search Console, przeglądam listę użytkowników w panelu w poszukiwaniu kont, których nikt nie zakładał, i sprawdzam, czy w treściach nie pojawiły się ukryte bloki odnośników widoczne tylko dla robotów. Spam wstawiany bezpośrednio do treści wpisów, a nie do komentarzy, to już nie problem formularza, a włamanie i wymaga innego postępowania.
Zgłaszania obcych domen do narzędzia odrzucania odnośników w tej sytuacji nie robię — dotyczy ono odnośników prowadzących do nas, nie od nas. Przy komentarzach problem jest po naszej stronie i rozwiązuje się go usunięciem treści.
Jeśli po wdrożeniu wszystkiego powyżej wpisy nadal się pojawiają, przyczyna jest zwykle w jednym z trzech miejsc.
Pierwsze: zgłoszenia nie idą przez formularz. Automat wysyła dane wprost do adresu przyjmującego komentarze albo korzysta z interfejsu programistycznego systemu, omijając wszystkie pułapki umieszczone w formularzu. Widać to w logach serwera — żądania bez wcześniejszego wczytania strony wpisu. Rozwiązaniem jest wymuszenie tokenu po stronie serwera i zablokowanie nieużywanych punktów wejścia.
Drugie: spam jest wpisywany ręcznie. Istnieje rynek tanich usług polegających na tym, że człowiek publikuje komentarze na dziesiątkach stron. Żaden filtr techniczny tego nie zatrzyma, bo zachowanie jest ludzkie. Zostaje moderacja i lista zakazanych wyrażeń.
Trzecie: dziura w innym miejscu. Nieaktualne wtyczki i motywy są najczęstszą drogą wejścia, a spam bywa pierwszym widocznym objawem czegoś, co dzieje się od tygodni.
Na koniec praktyczna rada dotycząca utrzymania: wpisuję do kalendarza przegląd kolejki komentarzy raz na dwa tygodnie i przegląd aktualizacji raz w miesiącu. Spam nie jest problemem, który rozwiązuje się raz — jest kosztem utrzymania otwartej dyskusji na stronie. Jeśli nikt w firmie nie ma na to czasu, uczciwszą decyzją jest zamknięcie komentarzy niż utrzymywanie sekcji, której nikt nie pilnuje.
Używamy plików cookies, aby ułatwić Ci nawigację oraz wykonywanie określonych funkcji. Szczegółowe informacje o wszystkich plikach cookies znajdziesz w każdej kategorii zgody poniżej.
Pliki cookies oznaczone jako "Niezbędne" są przechowywane w Twojej przeglądarce, ponieważ są one kluczowe dla zapewnienia podstawowych funkcji strony.
Używamy również plików cookies firm trzecich, które pomagają nam analizować, w jaki sposób korzystasz z tej strony, zapamiętują Twoje preferencje oraz dostarczają treści i reklamy odpowiednie dla Ciebie. Te pliki cookies będą przechowywane w Twojej przeglądarce tylko za Twoją uprzednią zgodą.
Możesz zdecydować, czy chcesz włączyć lub wyłączyć niektóre bądź wszystkie te pliki cookies, jednak wyłączenie niektórych z nich może wpłynąć na Twoje doświadczenia podczas przeglądania strony.
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __cf_bm | 13 minutes | Cloudflare bot management — distinguishes humans from bots. |
| rc::* | Persistent | Google reCAPTCHA — localStorage holding anti-bot challenge state. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| wpEmojiSettingsSupports | Session | WordPress — sessionStorage flag caching whether the browser can render emoji (feature detection). |
| ytidb* | Persistent | YouTube — IndexedDB storing playback/search state for embedded videos. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| _ga_* | 400 days | Google Analytics 4 — persists session state per property. |
| _ga | 400 days | Google Analytics — distinguishes unique users via a client id. |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| NID | 183 days | Google — stores preferences for personalized ads. |
| fr | 90 days | Meta — encrypted Facebook id and browser id for ads. |
| _gcl_au | 90 days | Google AdSense/Ads — experiments with advertising efficiency (conversion linker). |
| Cookie | Czas przechowywania | Opis |
|---|---|---|
| __Secure-YNID | 180 days | |
| YSC | Session | |
| __Secure-ROLLOUT_TOKEN | 180 days | |
| VISITOR_INFO1_LIVE | 180 days | |
| VISITOR_PRIVACY_METADATA | 180 days | |
| datr | 400 days | |
| sb | 400 days | |
| wd | 7 days |