Cloudflare heeft zijn email obfuscation-script gefixt (en misschien komt het door mij)
Het email obfuscation-script van Cloudflare blokkeerde voorheen het renderen. Een PM bij Cloudflare las dit artikel en zette de fix live. De SEO- en beveiligingsproblemen kun je nog steeds beter vermijden.
Wat is Cloudflare email obfuscation?
Cloudflare Email Address Obfuscation is een Scrape Shield-feature die e-mailadressen op je pagina's verbergt voor e-mailharvesters en bots, terwijl menselijke bezoekers ze gewoon zien. Het staat op elke Cloudflare-zone standaard aan.
Laatst gecontroleerd door Arjen Karel in april 2026
Update april 2026: Cloudflare heeft het gefixt. Een Product Manager bij Cloudflare stuurde me een bericht via LinkedIn. Hij las dit artikel en voegde het defer-attribuut toe aan email-decode.min.js. De officiële documentatie van Cloudflare bevestigt het inmiddels: het script blokkeert het renderen niet meer.

Defer is een wijziging van één regel. Dat het er niet meteen in zat, kwam waarschijnlijk doordat Cloudflare zeker wilde weten dat het geen sites zou breken die leunen op adressen die al vóór DOMContentLoaded zijn gedecodeerd. Iemand binnen het team heeft het werk gedaan. Ere wie ere toekomt.
De werking is simpel. De edge-proxy van Cloudflare scant je HTML op alles wat op een e-mailadres lijkt. Hij vervangt elk adres door een XOR-gecodeerde hex-string en injecteert een klein script genaamd email-decode.min.js om de adressen in de browser te decoderen. Het script is ongeveer 1,2 KB, laadt inmiddels met defer en verwijdert zichzelf na uitvoering uit de DOM.
Tot voor kort laadde dat script zonder async of defer. Het blokkeerde het renderen. En dat voor een feature die de meeste bezoekers nooit zullen opmerken of nodig hebben. Dat was de situatie die dit artikel oorspronkelijk beschreef, en de reden waarom Cloudflare het heeft gefixt.

Hoe Cloudflare email obfuscation voorheen de Core Web Vitals raakte

Vóór de defer-fix werd het script email-decode.min.js geïnjecteerd als een render-blocking resource. De browser moest het downloaden, parsen en uitvoeren voordat hij verder kon met het renderen van de pagina. Dat had drie gevolgen:
1. Het concurreerde om netwerkbandbreedte tijdens het kritieke render-venster, wat de Largest Contentful Paint vertraagde.
2. Het blokkeerde de main thread, wat de Interaction to Next Paint richting "needs improvement" kon duwen.
3. Het triggerde tot wel vijf Lighthouse-waarschuwingen: eliminate render-blocking resources, avoid long main-thread tasks, reduce JavaScript execution time, avoid chaining critical requests, en serve static assets with an efficient cache policy.
Nu defer actief is, downloadt het script parallel aan het parsen van de HTML en draait het pas nadat het document is geparset. De render-blocking waarschuwing is weg.
Wat er na de fix overblijft
De main thread moet nog steeds 1,2 KB aan JavaScript parsen en uitvoeren. Op een desktop stelt dat niets voor. Op een goedkope Android-telefoon met een zwaarbelaste CPU snoept elke kleine taak op de main thread van je INP-budget af. Vecht je al voor de laatste 50 ms aan INP-ruimte, dan is dit script weer iets extra's in de wachtrij.
De grotere problemen, die Cloudflare niet heeft gefixt, staan hieronder.
Gevolgen voor SEO
Cloudflare vervangt e-mailadressen door links die naar /cdn-cgi/l/email-protection#[hex] verwijzen. Deze URL's geven een 404 terug aan crawlers, inclusief Googlebot. Het resultaat: "Soft 404"-fouten in Google Search Console. SEO-audittools zoals Ahrefs en Screaming Frog rapporteren ze als gebroken interne links. Dat zorgt voor ruis die echte crawlproblemen maskeert. Gebruik je Cloudflare met email obfuscation ingeschakeld, controleer dan het dekkingsrapport in Search Console op deze spookfouten.
Is Cloudflare email obfuscation eigenlijk wel veilig?
Niet echt. Cloudflare gebruikt een single-byte XOR-cipher waarbij de key in de gecodeerde string zelf zit. Elke door Cloudflare beschermde site gebruikt hetzelfde decodeermechanisme. Een spammer hoeft maar één decoder te bouwen om van al die sites de e-mailadressen uit te lezen.
Beveiligingsonderzoekers hebben aangetoond dat de codering triviaal terug te draaien is. Het obfuscation-onderzoek van Spencer Mortensen uit 2026 testte 25 verschillende methoden tegen meer dan 300 unieke spammers met honeypot-e-mailadressen. Zelfs een simpele CSS-techniek met display:none hield 100% van de harvesters tegen. Je hebt geen deferred JavaScript nodig om een e-mailadres voor bots te verbergen.
Moet je het alsnog uitschakelen?
Heb je geen email obfuscation nodig (en dat geldt voor de meeste sites), dan verwijdert het uitzetten ervan de soft 404-crawlfouten en die laatste paar milliseconden aan werk op de main thread. Zo doe je dat:
1. Log in op je Cloudflare-dashboard.
2. Ga naar Security > Settings (of Scrape Shield bij oudere dashboard-indelingen).
3. Zet Email Address Obfuscation op OFF.
Dat is alles. Het script verdwijnt direct. Zie voor een volledige Cloudflare-performanceconfiguratie de beste Cloudflare-configuratie om de Core Web Vitals te halen.
Per pagina uitschakelen met Configuration Rules
Wil je email obfuscation op je contactpagina maar niet op landingspagina's met veel verkeer, gebruik dan een Configuration Rule:
1. Ga naar Rules > Configuration Rules.
2. Maak een nieuwe rule aan en geef hem een naam (bijv. "Disable email obfuscation on landing pages").
3. Stel de matching-criteria in (hostname, URL-pad of beide).
4. Voeg de instelling Email Obfuscation toe en zet hem op Off.
5. Deploy.
Je kunt afzonderlijke e-mailadressen in je HTML ook uitsluiten door ze tussen comments te zetten: <!--email_off-->email@example.com<!--/email_off-->
Heb je obfuscation nodig: doe het zelf
Wil je e-mailadressen toch verbergen voor bots, dan zijn er veel betere manieren waarbij je geen enkel script meestuurt voordat de gebruiker interesse toont. De beste aanpak: hang er een IntersectionObserver aan en decodeer het e-mailadres just-in-time zodra het in beeld scrollt. Dit is hetzelfde defer until needed-patroon dat ik voor alles gebruik, van YouTube-embeds tot Google Maps.
Maak het geobfusceerde e-mailadres aan
<a
class="email-hidden"
href="#"
data-email="aW5mb0BleGFtcGxlLmNvbQ==">
[email-hidden]
</a> Koppel de IntersectionObserver. Plaats dit stuk JavaScript onderaan de pagina.
<script>
const emailtag = document.querySelector('.email-hidden');
let observer = new IntersectionObserver((entries) => {
entries.map((entry) => {
if (entry.isIntersecting) {
let script = document.createElement('script');
script.onload = function () {
emaildecode(entry.target)
};
script.src = 'decode-email.js';
document.head.appendChild(script);
}
});
}).observe(emailtag);
</script>
Upload het decodeerscript decode-email.js en vervang de decodeerfunctie door een decoding-library naar keuze.
const emaildecode = (e) => {
let email = atob(e.dataset.email);
e.href = 'mailto:'+email;
e.innerHTML = email;
}
Controleer het resultaat
<a href="mailto:info@example.com">info@example.com</a> Het e-mailadres wordt pas gedecodeerd zodra de bezoeker het in beeld scrollt. Nul impact op INP, geen soft 404-fouten voor Googlebot en de base64-encoding is niet minder veilig dan de XOR-cipher van Cloudflare. Wil je de verbetering bij echte bezoekers verifiëren, richt dan Real User Monitoring in. Lighthouse-scores zijn handig voor debugging, maar field data van echte gebruikers is waar Google naar kijkt voor de ranking.

Een snellere site nodig?
Ik ben Arjen en ik maak al 17 jaar trage sites snel. Loop je tegen iets aan dat je zelf niet opgelost krijgt? Stuur me je URL, dan praten we even.
Stuur me je URL
Waarom werkt onze fix niet?
Soms serveert het CDN nog de oude HTML, of de fix zit in het desktop-template terwijl mobiel een ander template gebruikt. Stuur me je URL en het probleem, dan stuur ik je een paar momenten. Ik bekijk eerst je field data, daarna besteden we een uur aan je site, en binnen een dag heb je mijn notities op schrift. €350 excl. btw.
Stuur me je URLGeen developer om de fix te bouwen? Ik doe het werk zelf, op een kopie van je site.