Orice mailto: scris direct în markup e cules de boții care descarcă pagina și caută adrese
cu un regex — sursa clasică de spam. Verifică-ți propriul site:
curl -s https://site-ul-tau.ro/contact | grep -o '[a-z0-9._+-]*@[a-z0-9.-]*'Dacă apare ceva, adresa aia e deja în liste.
Utilizare
import { EmailEncrypt } from "@hazeloft/security/react";
<EmailEncrypt mail="hello@exemplu.com" className="underline" fallbackHref="/contact" />În HTML-ul livrat nu există nici adresa, nici mailto: — doar un token opac și o mască de
aceeași lungime. După hidratare, linkul devine un mailto: normal.
Cum funcționează
În HTML-ul pe care îl primește oricine descarcă pagina, adresa e înlocuită cu un cod ilizibil
și o mască de aceeași lungime. Abia când pagina se încarcă în browser, codul e decodat și
linkul devine un mailto: normal, pe care utilizatorul îl vede și îl copiază ca pe orice
link. Masca păstrează lungimea adresei, ca să nu „sară" layout-ul la înlocuire.
De ce nu strică SEO
Adresa de email nu influențează poziția în Google. Iar Googlebot încarcă și rulează JavaScript, deci vede linkul complet la fel ca un vizitator obișnuit. Singurii care nu-l văd sunt boții simpli care descarcă pagina și caută adrese fără să ruleze JS — exact cei de care vrei să scapi. E aceeași tehnică pe care o folosește Cloudflare, implicit, pe milioane de site-uri.
Opțiuni
| Prop | Implicit | Ce face |
|---|---|---|
mail | — | adresa reală; nu ajunge niciodată în HTML-ul livrat |
children | adresa (mascată până la încărcare) | eticheta vizibilă — nu scrie adresa în clar aici |
className | — | clase CSS pentru link |
subject / body | — | text precompletat în clientul de mail |
fallbackHref | — | unde duce linkul pentru vizitatorii fără JavaScript |
revealOn | "mount" | "interaction" = adresa se activează abia la hover/click |
revealOn="interaction" — pragul mai dur
<EmailEncrypt mail="hello@exemplu.com" revealOn="interaction" fallbackHref="/contact" />Cu această opțiune, adresa se activează abia când cineva trece cu mouse-ul peste link sau dă click. Prinde astfel și boții mai avansați, care încarcă pagina dar nu interacționează cu ea. Costul: adresa nu se vede dintr-o privire, ci doar la interacțiune.
Cât de mult protejează
Fără React
Dacă nu folosești React, ai și funcțiile de bază, pentru orice framework:
import { obfuscateEmail, deobfuscateEmail } from "@hazeloft/security";
const token = obfuscateEmail("hello@exemplu.com");
deobfuscateEmail(token); // "hello@exemplu.com"Ce mai merită verificat pe site-ul tău
Adresa din pagina de contact e cea evidentă. În practică, adresele mai scapă în trei locuri ușor de uitat:
- Datele structurate pentru Google (schema.org), unde adresa firmei apare pe fiecare pagină. Pune acolo un link spre pagina de contact, nu adresa în clar.
- Capturi și demo-uri de produs care afișează o adresă reală ca text — folosește un
domeniu de test (
example.com). - Mesaje de eroare de tipul „scrie-ne direct la…", care ajung în codul public al paginii.