Skip to content

Wszystko o WordPressie, tworzeniu stron — i nie tylko

🚫 Cloudflare email-decode.min.js: dlaczego warto wyłączyć zaciemnianie adresów e-mail i jak usunąć skrypt w minutę

🚫 Cloudflare email-decode.min.js: dlaczego warto wyłączyć zaciemnianie adresów e-mail i jak usunąć skrypt w minutę

Wchodzą Państwo do PageSpeed Insights, a tam: render-blocking resource. Patrzą Państwo: email-decode.min.js, Cloudflare. „Znowu ten skrypt spowalnia stronę", myślą Państwo i idą googlować rozwiązanie.

W kwietniu 2026 Cloudflare w końcu naprawił problem: dodał atrybut defer i skrypt przestał blokować renderowanie. Wydawałoby się, sprawa zamknięta. Ale nie. email-decode.min.js zostawia fantomowe soft 404 w Google Search Console, a szyfr XOR, którym Cloudflare „chroni" adresy, daje się rozszyfrować w kilka sekund. Ani bezpieczeństwa, ani czystych raportów.

W praktyce nie raz spotykaliśmy się z tym skryptem podczas audytu stron: wyłącza się go w minutę, a bonusem dostaje się czystą Search Console. Rozkładamy na części, jak działa obfuskacja, dlaczego skrypt wciąż przeszkadza i jak go usunąć, z alternatywą, która naprawdę ukrywa email przed botami.

💡 Szybki przegląd:

  • Zrozumieć, jak działa Email Address Obfuscation w Cloudflare i po co w ogóle potrzebny jest email-decode.min.js.
  • Rozpoznać trzy powody, by wyłączyć obfuskację po kwietniowej poprawce z 2026 roku.
  • Wyłączyć skrypt krok po kroku: dashboard, API, Configuration Rules.
  • Wdrożyć alternatywę na IntersectionObserver i base64, bez zewnętrznego skryptu i soft 404.

Jak Cloudflare ukrywa email

Gdy strona przechodzi przez Cloudflare, usługa domyślnie włącza Email Address Obfuscation. Cloudflare skanuje HTML stron, znajduje wszystko, co przypomina email, i zastępuje każdy adres ciągiem hex zakodowanym XOR. Do rozszyfrowania w przeglądarce odwiedzającego wstrzykiwany jest email-decode.min.js.

Ostrzeżenie PageSpeed Insights o skrypcie email-decode.min.js

Pomysł jest rozsądny: boty nie widzą adresów, ludzie widzą. W praktyce jest trudniej. Do kwietnia 2026 skrypt otwarcie szkodził szybkości, a sama ochrona okazała się słabsza, niż obiecuje Cloudflare.

Trzy powody, by wyłączyć email-decode.min.js

Kwietniowa poprawka usunęła render-blocking. Ale trzy problemy pozostały. I są one poważniejsze niż stracone milisekundy.

Soft 404 w Search Console

Cloudflare zastępuje adresy email linkami w rodzaju /cdn-cgi/l/email-protection#[hex]. Dla Googlebota i innych robotów wyszukiwarek te URL-e zwracają 404. Rezultat: błędy „Soft 404" w Google Search Console. Ahrefs i Screaming Frog oznaczają je jako uszkodzone linki wewnętrzne.

To nie jest kosmetyka. Dziesiątki fantomowych błędów Cloudflare maskują rzeczywiste problemy z indeksowaniem. Podczas audytu technicznego tracą Państwo czas na filtrowanie szumu zamiast szukać prawdziwie uszkodzonych stron.

Szyfr XOR nie chroni

Cloudflare używa jednobajtowego XOR, gdzie klucz jest wbudowany bezpośrednio w zakodowany ciąg. Mechanizm deszyfrowania jest identyczny dla wszystkich stron pod Cloudflare. Spamer potrzebuje jednego dekodera i wyciągnie adresy z dowolnej strony w kilka sekund.

Badanie Spencera Mortensena (2026) sprawdziło 25 metod obfuskacji przeciwko ponad 300 zbieraczom spamu na adresach-pułapkach. Nawet prymitywny CSS display:none pokazał 100% blokowania. Obfuskacja Cloudflare chroni tylko przed botami, które nie potrafią dekodować XOR, a takie i bez niej adresów nie zbiorą.

Obciążenie głównego wątku na urządzeniach mobilnych

1,2 KB JavaScriptu z defer nie jest krytyczne dla desktopa. Ale na budżetowym Androidzie z obciążonym CPU każde małe zadanie main-thread odjada budżet INP. Jeśli walczą Państwo o ostatnie 50 ms, ten skrypt jest zbędny.

Wyłączamy obfuskację: instrukcja krok po kroku

Wyłączenie zajmuje minutę. Proszę wybrać ścieżkę odpowiednią do wersji dashboardu.

Nowy dashboard (Security Settings)

  • Proszę zalogować się do dashboardu Cloudflare.
  • Proszę przejść do Security → Settings.
  • Proszę znaleźć przełącznik Email Address Obfuscation.
  • Proszę ustawić go w pozycji Off.

Stary dashboard (Scrape Shield)

Jeśli interfejs konta nie został jeszcze zaktualizowany:

  • Proszę zalogować się do dashboardu Cloudflare.
  • Proszę otworzyć sekcję Scrape Shield.
  • Proszę znaleźć Email Address Obfuscation i przełączyć na Off.
Wyłączenie maskowania adresów e-mail w sekcji Scrape Shield w panelu Cloudflare

Skrypt znika natychmiast. email-decode.min.js przestaje być wstrzykiwany na wszystkich stronach strefy.

Przez API

Do automatyzacji lub masowego zarządzania, żądanie PATCH do Cloudflare API:

1curl -X PATCH "https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/settings/email_obfuscation" \
2 -H "Authorization: Bearer <API_TOKEN>" \
3 -H "Content-Type: application/json" \
4 --data '{"value":"off"}'

Proszę podstawić swój Zone ID i token API z uprawnieniem do edycji ustawień strefy.

Punktowe wyłączenie przez Configuration Rules

Potrzebują Państwo obfuskacji na stronie kontaktów, ale nie na landing page’ach? Proszę użyć Configuration Rules:

  • Proszę przejść do Rules → Configuration Rules.
  • Proszę utworzyć regułę z kryteriami: nazwa hosta, ścieżka URL lub oba.
  • Proszę dodać ustawienie Email Obfuscation i ustawić Off.
  • Proszę zastosować.

Można też wykluczyć pojedyncze adresy w HTML, owijając je w komentarze:

1<!--email_off-->[email protected]<!--/email_off-->

Alternatywa bez Cloudflare: IntersectionObserver i base64

Jeśli naprawdę trzeba ukryć email przed botami, jest lepszy sposób. Bez zewnętrznego skryptu, bez soft 404 i bez wpływu na INP. Podejście: kodowanie adresu w base64 i deszyfrowanie przez IntersectionObserver, tylko gdy odwiedzający przewinie do bloku z emailem.

Krok 1. Znacznik w HTML:

1<a class="email-hidden" href="#" data-email="aW5mb0BleGFtcGxlLmNvbQ==">
2 [email скрыт]
3</a>

Atrybut data-email zawiera adres w base64. Proszę zakodować ciąg narzędziem online lub komendą echo -n "[email protected]" | base64.

Krok 2. Obserwator. Proszę umieścić skrypt w stopce strony:

1const emailTag = document.querySelector('.email-hidden');
2let observer = new IntersectionObserver((entries) => {
3 entries.map((entry) => {
4 if (entry.isIntersecting) {
5 let script = document.createElement('script');
6 script.onload = function () {
7 emailDecode(entry.target);
8 };
9 script.src = '/decode-email.js';
10 document.head.appendChild(script);
11 }
12 });
13});
14observer.observe(emailTag);

Krok 3. Funkcja deszyfrująca, plik decode-email.js:

1const emailDecode = (e) => {
2 let email = atob(e.dataset.email);
3 e.href = 'mailto:' + email;
4 e.innerHTML = email;
5};

Rezultat: email jest dekodowany tylko przy przewinięciu do niego. Zerowy wpływ na INP, zero błędów soft 404. A base64 nie ustępuje XOR od Cloudflare w jakości „ochrony", obie metody są trywialnie odwracalne, ale w parze z IntersectionObserver adres nawet nie trafia do DOM przy ładowaniu strony.

Instrukcja wideo

Jeśli wolą Państwo wizualny przewodnik, oto poglądowa demonstracja wyłączenia obfuskacji w dashboardzie Cloudflare:

⁉️🤔 Częste pytania

Czy obfuskacja Cloudflare wpływa na wszystkie strony witryny?

Tak, po dodaniu strony do Cloudflare Email Address Obfuscation włącza się dla całej strefy. Skrypt email-decode.min.js jest wstrzykiwany na każdą stronę, gdzie wykryto tekst przypominający email. Wykluczyć poszczególne strony można przez Configuration Rules, a konkretne adresy przez komentarze HTML <!--email_off-->.

Co się stanie, jeśli po prostu wyłączę obfuskację?

email-decode.min.js natychmiast przestanie być wstrzykiwany. Wszystkie adresy email na stronie staną się widoczne w kodzie źródłowym, dokładnie tak, jak je Państwo umieścili. Dla większości stron to normalny tryb: kontaktowy email i tak jest publiczny, a ukrywanie go przed botami można zrealizować prostszymi metodami.

Czy obfuskacja Cloudflare chroni przed wszystkimi botami spamowymi?

Nie. Szyfr XOR jest identyczny dla wszystkich stron, rozszyfrować adresy może każdy. Dane Spencera Mortensena pokazują: nawet CSS display:none blokuje 100% z ponad 300 przetestowanych zbieraczy spamu. Obfuskacja Cloudflare działa tylko przeciwko prymitywnym botom, które nie próbują dekodować XOR.

Czy można ukryć skrypt tylko przed PageSpeed Insights?

Nie, PageSpeed Insights sprawdza stronę jak zwykła przeglądarka. Jeśli skrypt jest wstrzyknięty, Lighthouse go zobaczy. Z kwietniową poprawką 2026 nie ma już render-blocking, ale pozostają efekty SEO (soft 404) i mikro-wpływ na INP. Jedynym sposobem, by całkowicie usunąć skrypt, jest wyłączenie Email Address Obfuscation w dashboardzie.

Jak upewnić się, że obfuskacja jest naprawdę wyłączona?

Proszę otworzyć kod źródłowy strony (Ctrl+U) i wyszukać email-decode.min.js. Brak skryptu oznacza, że obfuskacja jest wyłączona. Alternatywnie proszę sprawdzić konsolę przeglądarki: przed wyłączeniem w DOM jest <script src="/cdn-cgi/scripts/.../email-decode.min.js">, po wyłączeniu go nie ma. Zmiany są stosowane natychmiast.

Wyłączać czy zostawić: werdykt

Z kwietniową poprawką email-decode.min.js przestał blokować renderowanie. Ale szum SEO (soft 404 w Search Console) i iluzja bezpieczeństwa (XOR odwracalny w kilka sekund) nigdzie nie zniknęły. Wyłączenie przez dashboard zajmuje minutę. Bonus: czyste raporty i kilka zaoszczędzonych milisekund INP na urządzeniach mobilnych.

Jeśli obfuskacja jest naprawdę potrzebna, alternatywa z IntersectionObserver i base64 daje realną ochronę przed zbieraczami spamu. Bez skutków ubocznych. Wybór należy do Państwa, ale email-decode.min.js w 2026 roku to raczej przyzwyczajenie niż konieczność.