Add 404 page, font preloading, JSON-LD schema, and reCAPTCHA badge fix

- Add custom 404.html page with branded design
- Preload Google Fonts stylesheet on all 9 pages for faster rendering
- Add LocalBusiness JSON-LD structured data on homepage for SEO
- Hide reCAPTCHA v3 floating badge on form pages and add required
  Google attribution text in footer

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Adam Moussa 2026-04-07 14:49:39 -04:00
parent 3a9bcc59ce
commit a208794404
10 changed files with 122 additions and 0 deletions

80
404.html Normal file
View file

@ -0,0 +1,80 @@
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Page Not Found — Sea Haven Industries</title>
<meta name="robots" content="noindex, nofollow">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/images/favicon-32.png">
<link rel="apple-touch-icon" sizes="192x192" href="/assets/images/favicon-192.png">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--rose: #cc3366;
--rose-dark: #a82a54;
--ink: #1a1814;
--text: #333;
--text-muted: #6b7280;
--font-display: 'DM Serif Display', Georgia, serif;
--font-body: 'Inter', system-ui, sans-serif;
}
body {
font-family: var(--font-body);
color: var(--text);
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
padding: 2rem;
background: #fafaf8;
}
.error-code {
font-family: var(--font-display);
font-size: clamp(5rem, 15vw, 10rem);
color: var(--rose);
line-height: 1;
margin-bottom: 0.5rem;
}
h1 {
font-family: var(--font-display);
font-size: clamp(1.5rem, 4vw, 2rem);
color: var(--ink);
margin-bottom: 1rem;
}
p {
color: var(--text-muted);
font-size: 1.05rem;
max-width: 480px;
margin-bottom: 2rem;
line-height: 1.6;
}
.btn {
display: inline-block;
background: var(--rose);
color: #fff;
padding: 0.85rem 2rem;
border-radius: 4px;
text-decoration: none;
font-weight: 600;
font-size: 0.95rem;
transition: background 0.2s;
}
.btn:hover { background: var(--rose-dark); }
</style>
</head>
<body>
<div class="error-code">404</div>
<h1>Page Not Found</h1>
<p>The page you're looking for doesn't exist or has been moved. Let's get you back on track.</p>
<a href="/" class="btn">Back to Homepage</a>
</body>
</html>

View file

@ -19,6 +19,7 @@
<link rel="apple-touch-icon" sizes="192x192" href="/assets/images/favicon-192.png">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Inter:wght@300;400;500;600&display=swap">
<link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
<style>

View file

@ -19,6 +19,7 @@
<link rel="apple-touch-icon" sizes="192x192" href="/assets/images/favicon-192.png">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Inter:wght@300;400;500;600&display=swap">
<link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
<style>

View file

@ -19,9 +19,11 @@
<link rel="apple-touch-icon" sizes="192x192" href="/assets/images/favicon-192.png">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Inter:wght@300;400;500;600&display=swap">
<link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
<style>
.grecaptcha-badge { visibility: hidden; }
/* ── Reset & Tokens ── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
@ -634,6 +636,7 @@
<li><a href="/terms-of-service/">Terms of Service</a></li>
</ul>
</div>
<p style="color: rgba(255,255,255,0.35); font-size: 0.75rem; margin-top: 0.75rem;">This site is protected by reCAPTCHA and the Google <a href="https://policies.google.com/privacy" style="color: rgba(255,255,255,0.45);">Privacy Policy</a> and <a href="https://policies.google.com/terms" style="color: rgba(255,255,255,0.45);">Terms of Service</a> apply.</p>
</div>
</footer>

View file

@ -19,6 +19,7 @@
<link rel="apple-touch-icon" sizes="192x192" href="/assets/images/favicon-192.png">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Inter:wght@300;400;500;600&display=swap">
<link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
<style>
@ -1234,5 +1235,32 @@
a.addEventListener('click', () => mobileMenu.classList.remove('open'));
});
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Sea Haven Industries",
"description": "Construction and facilities services company specializing in electrical, plumbing, HVACR, handyman, and garage door services.",
"url": "https://seahaven.com",
"telephone": "+16317765102",
"email": "work-orders@seahaven.com",
"address": {
"@type": "PostalAddress",
"streetAddress": "710 Koehler Ave",
"addressLocality": "Ronkonkoma",
"addressRegion": "NY",
"postalCode": "11779",
"addressCountry": "US"
},
"image": "https://seahaven.com/assets/images/seahaven-logo-nav-new.png",
"numberOfEmployees": {
"@type": "QuantitativeValue",
"minValue": 120
},
"foundingDate": "2006",
"serviceType": ["Electrical Work", "Plumbing", "HVACR Services", "Handyman Services", "Garage Door Repair"]
}
</script>
</body>
</html>

View file

@ -19,9 +19,11 @@
<link rel="apple-touch-icon" sizes="192x192" href="/assets/images/favicon-192.png">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Inter:wght@300;400;500;600&display=swap">
<link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
<style>
.grecaptcha-badge { visibility: hidden; }
/* ── Reset & Tokens ── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
@ -723,6 +725,7 @@
<li><a href="/terms-of-service/">Terms of Service</a></li>
</ul>
</div>
<p style="color: rgba(255,255,255,0.35); font-size: 0.75rem; margin-top: 0.75rem;">This site is protected by reCAPTCHA and the Google <a href="https://policies.google.com/privacy" style="color: rgba(255,255,255,0.45);">Privacy Policy</a> and <a href="https://policies.google.com/terms" style="color: rgba(255,255,255,0.45);">Terms of Service</a> apply.</p>
</div>
</footer>

View file

@ -19,6 +19,7 @@
<link rel="apple-touch-icon" sizes="192x192" href="/assets/images/favicon-192.png">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Inter:wght@300;400;500;600&display=swap">
<link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
<style>

View file

@ -19,9 +19,11 @@
<link rel="apple-touch-icon" sizes="192x192" href="/assets/images/favicon-192.png">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Inter:wght@300;400;500;600&display=swap">
<link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
<style>
.grecaptcha-badge { visibility: hidden; }
/* ── Reset & Tokens ── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
@ -756,6 +758,7 @@
<li><a href="/terms-of-service/">Terms of Service</a></li>
</ul>
</div>
<p style="color: rgba(255,255,255,0.35); font-size: 0.75rem; margin-top: 0.75rem;">This site is protected by reCAPTCHA and the Google <a href="https://policies.google.com/privacy" style="color: rgba(255,255,255,0.45);">Privacy Policy</a> and <a href="https://policies.google.com/terms" style="color: rgba(255,255,255,0.45);">Terms of Service</a> apply.</p>
</div>
</footer>

View file

@ -19,6 +19,7 @@
<link rel="apple-touch-icon" sizes="192x192" href="/assets/images/favicon-192.png">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Inter:wght@300;400;500;600&display=swap">
<link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
<style>

View file

@ -19,6 +19,7 @@
<link rel="apple-touch-icon" sizes="192x192" href="/assets/images/favicon-192.png">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Inter:wght@300;400;500;600&display=swap">
<link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
<style>