'use client'; import React, { useState, useEffect } from 'react'; interface ObfuscatedMailtoProps { email: string; className?: string; children?: React.ReactNode; } /** * Renders an email link that only becomes a clickable mailto: link after client-side hydration. * This prevents Cloudflare's Email Obfuscation from breaking the link in the static HTML, * which causes crawlers like Ahrefs to report 404 errors on /cdn-cgi/l/email-protection. */ export function ObfuscatedMailto({ email, className, children }: ObfuscatedMailtoProps) { const [isMounted, setIsMounted] = useState(false); useEffect(() => { setIsMounted(true); }, []); // Before hydration, render as obfuscated text to avoid Cloudflare manipulation if (!isMounted) { const obfuscatedEmail = email.replace('@', ' [at] ').replace(/\./g, ' [dot] '); return {children || obfuscatedEmail}; } // After hydration, render as a proper mailto link return ( {children || email} ); }