Se la tua email compare in testo semplice nell’HTML del sito, considera certo che sarà raccolta. Trucchi di offuscamento come name [at] domain rallentano i bot più semplici e infastidiscono ogni persona. Funziona davvero evitare di pubblicare indirizzi raccoglibili: usa un modulo con honeypot e, se pubblichi un’email, scegline una per progetto che puoi dismettere, non la tua personale.
Come vengono raccolti gli indirizzi
I raccoglitori di email sono semplici crawler. Scaricano pagine come un motore di ricerca, poi applicano espressioni regolari all’HTML cercando tutto ciò che assomiglia a [email protected]. Non servono tecniche sofisticate: molti siti offrono esattamente ciò che cercano, un mailto: link. La raccolta è facilissima: l’indirizzo si trova in un href, in un formato standard, su un attributo già analizzato dai crawler. Un segnale più evidente è difficile da immaginare.
Si sottovaluta ciò che viene dopo. Un indirizzo raccolto non riceve spam una sola volta: entra in liste vendute, unite e rivendute. Un indirizzo trapelato anni fa riceve ancora spam. Non puoi annullare la diffusione: una volta in circolo, restano filtri aggressivi o abbandono.
Per essere onesti: un sito nuovo senza link in entrata potrebbe non essere visitato dai crawler per un po’. Ma ogni pagina collegata da altre verrà visitata, e basta un raccoglitore una volta.
I trucchi classici e perché spesso falliscono
Offuscamento del testo: scrittura name [at] domain [dot] com. Questo schema esiste da decenni e i bot riconoscono già le varianti comuni: [at], (at), AT, spazi aggiuntivi e tutto il resto. Intanto ogni visitatore reale deve ricostruire a mano il tuo indirizzo sperando di non sbagliare. Imponi un costo certo alle persone per un filtro che ferma solo i bot più pigri.
Codifica JavaScript: comporre l’indirizzo durante l’esecuzione da parti codificate. È un miglioramento concreto: chi raccoglie solo l’HTML grezzo non vede nulla. Ma oggi i browser headless costano poco e i raccoglitori più seri renderizzano le pagine prima di analizzarle. La codifica con entità HTML (he…) è ancora peggio: ogni parser normalizza le entità prima del confronto, quindi non ferma nulla. E i costi ricadono su di te: l’indirizzo non funziona con JavaScript disabilitato e, a seconda dell’implementazione, possono smettere di funzionare anche copia e incolla e screen reader.
Immagini del tuo indirizzo: il compromesso peggiore dei tre. Gli screen reader non ricevono nulla (e aggiungere l’indirizzo come testo alternativo vanifica lo scopo). Nessuno può copiarlo. Si vede male sugli schermi ad alta densità. E l’OCR costa così poco che i raccoglitori determinati leggono comunque le immagini.
Il punto comune: l’offuscamento è una corsa in cui all’attaccante basta aggiornare una regex e il costo per te è l’esperienza di ogni visitatore reale. Rallenta la raccolta, non la ferma. E non serve se l’indirizzo trapela altrove: commit git, newsletter o siti altrui.
Cosa funziona davvero
Due mosse complementari.
1. Un modulo di contatto con honeypot
Un modulo non inserisce alcun indirizzo nell’HTML, quindi non c’è nulla da raccogliere. Gli invii vanno a un endpoint e arrivano in una casella. Anche i moduli attirano spam (bot che riempiono di spazzatura ogni modulo che trovano) e la contromisura efficace più economica è un honeypot: un campo nascosto che le persone non vedono mai. Alcuni bot compilano ogni input e l’invio con questo campo compilato viene scartato. I bot più evoluti possono ignorarlo: restano quindi attivi i controlli dei contenuti sul server, il rilevamento delle campagne e la verifica automatica.
<form action="https://mailcontact.app/api/forms/your-form-id" method="POST" data-mailcontact-form>
<label>Name <input name="name" autocomplete="name" /></label>
<label>Email <input name="email" type="email" required /></label>
<label>Message <textarea name="message" required></textarea></label>
<button type="submit">Send</button>
<p data-contact-status role="status" aria-live="polite"></p>
</form>
<script defer src="https://mailcontact.app/forms/v1.js"
crossorigin="anonymous" referrerpolicy="no-referrer"></script>di mailcontact endpoint del modulo accetta semplici FormData o JSON da qualsiasi origine e risponde con JSON. Lo script inserisce il controllo nascosto, gestisce la verifica e mantiene i visitatori sulla pagina, conservando la bozza in caso di errore. I moduli con script Free mostrano il link visibile “Processed by mailcontact.app”; Pro e Plus no. I controlli sono descritti nella guida alla protezione antispam.
2. Un indirizzo dedicato per progetto
Alcuni non usano moduli. Vogliono scrivere dal proprio client, inoltrare una conversazione e conservare una copia nella posta inviata. Va bene. Basta non dare l’indirizzo personale. Ogni progetto mailcontact ha il proprio indirizzo [email protected] che funziona subito, senza record DNS o server email da gestire.
Conta limitare il danno. Se viene raccolto un indirizzo di progetto, lo spam va solo nella relativa casella, non dove ti scrive la banca. Puoi inoltre dismetterlo e sostituirlo. La soluzione è questa: non rendere illeggibile l’indirizzo, ma renderlo poco importante da proteggere.
La configurazione in pratica
- Usa come canale principale un modulo con honeypot attivo. Per partire più velocemente, il generatore di moduli di contatto genera il markup, e ci sono guide specifiche per siti statici e GitHub Pages, dove pubblicare l’indirizzo nell’HTML sembra spesso l’unica possibilità.
- Pubblica l’indirizzo del progetto in testo semplice per chi preferisce l’email. Sì, testo semplice. Va bene perché è un indirizzo che puoi dismettere.
- Entrambe le fonti alimentano la stessa casella del progetto, con notifiche in Discord o via email, senza controllare continuamente una dashboard.
- L’indirizzo personale non compare in nessun HTML.
Nulla azzera lo spam. Gli honeypot fermano bot semplici, non persone pagate per compilare moduli, e un indirizzo pubblico riceverà prima o poi spazzatura. La differenza è contenere il problema: cambi un indirizzo di progetto o rafforzi un modulo, invece di sopportare anni di spam sull’indirizzo che non puoi cambiare.
Se configuri da zero un modulo su un sito statico, questa guida spiega le opzioni.