feat(seo): BreadcrumbList on interior pages + richer LocalBusiness

Add a breadcrumb-ld partial (rendered from breadcrumbName/breadcrumbParent
front-matter) emitting BreadcrumbList JSON-LD on all 11 interior pages
(3-level on the job pages). Enrich homepage LocalBusiness with geo,
areaServed (US), and hasMap. NOTE: geo coords are approximate (Ronkonkoma
ZIP) — set precisely from the Google Business Profile; openingHours and
sameAs omitted pending real hours + non-placeholder social URLs.
This commit is contained in:
Adam Moussa 2026-06-12 17:23:11 -04:00
parent 999249c0fe
commit 381f6b6dce
15 changed files with 44 additions and 0 deletions

View file

@ -21,6 +21,9 @@ module.exports = function (eleventyConfig) {
// Current year, for the footer (replaces the deprecated document.write pattern). // Current year, for the footer (replaces the deprecated document.write pattern).
eleventyConfig.addShortcode("year", () => `${new Date().getFullYear()}`); eleventyConfig.addShortcode("year", () => `${new Date().getFullYear()}`);
// JSON-encode a value (for safely emitting strings into JSON-LD).
eleventyConfig.addFilter("json", (v) => JSON.stringify(v));
return { return {
dir: { input: ".", includes: "_includes", data: "_data", output: "_site" }, dir: { input: ".", includes: "_includes", data: "_data", output: "_site" },
templateFormats: ["njk"], templateFormats: ["njk"],

View file

@ -50,6 +50,10 @@
{% include "footer.njk" %} {% include "footer.njk" %}
{%- if breadcrumbName %}
{% include "breadcrumb-ld.njk" %}
{%- endif %}
<script src="/assets/js/nav.js" defer></script> <script src="/assets/js/nav.js" defer></script>
{%- if recaptcha %} {%- if recaptcha %}
<script src="/assets/js/form.js" defer></script> <script src="/assets/js/form.js" defer></script>

View file

@ -0,0 +1,13 @@
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "{{ site.url }}/" }
{%- if breadcrumbParent %},
{ "@type": "ListItem", "position": 2, "name": {{ breadcrumbParent.name | json | safe }}, "item": "{{ site.url }}{{ breadcrumbParent.url }}" }
{%- endif %},
{ "@type": "ListItem", "position": {{ 3 if breadcrumbParent else 2 }}, "name": {{ breadcrumbName | json | safe }}, "item": "{{ site.url }}{{ page.url }}" }
]
}
</script>

View file

@ -3,6 +3,7 @@ layout: base.njk
title: "About — Sea Haven Industries" title: "About — Sea Haven Industries"
description: "Learn about Sea Haven Industries — your trusted partner in construction with 20 years of experience, expert technicians, and a commitment to excellence." description: "Learn about Sea Haven Industries — your trusted partner in construction with 20 years of experience, expert technicians, and a commitment to excellence."
pageCss: about pageCss: about
breadcrumbName: "About"
--- ---
<!-- ── Page Hero ── --> <!-- ── Page Hero ── -->
<section class="page-hero"> <section class="page-hero">

View file

@ -4,6 +4,8 @@ title: "Dispatcher — Sea Haven Industries"
description: "Apply for the Dispatcher position at Sea Haven Industries. View job details and submit your application today." description: "Apply for the Dispatcher position at Sea Haven Industries. View job details and submit your application today."
pageCss: jobs pageCss: jobs
recaptcha: true recaptcha: true
breadcrumbName: "Dispatcher"
breadcrumbParent: { name: "Careers", url: "/careers/" }
--- ---
<!-- ── Page Hero ── --> <!-- ── Page Hero ── -->
<section class="page-hero"> <section class="page-hero">

View file

@ -3,6 +3,7 @@ layout: base.njk
title: "Careers — Sea Haven Industries" title: "Careers — Sea Haven Industries"
description: "Join the Sea Haven Industries team. Explore careers opportunities and grow with a company committed to staff development and excellence in construction." description: "Join the Sea Haven Industries team. Explore careers opportunities and grow with a company committed to staff development and excellence in construction."
pageCss: careers pageCss: careers
breadcrumbName: "Careers"
--- ---
<!-- ── Page Hero ── --> <!-- ── Page Hero ── -->
<section class="page-hero careers-hero"> <section class="page-hero careers-hero">

View file

@ -4,6 +4,8 @@ title: "Scheduling Coordinator — Sea Haven Industries"
description: "Apply for the Scheduling Coordinator position at Sea Haven Industries. View job details and submit your application today." description: "Apply for the Scheduling Coordinator position at Sea Haven Industries. View job details and submit your application today."
pageCss: jobs pageCss: jobs
recaptcha: true recaptcha: true
breadcrumbName: "Scheduling Coordinator"
breadcrumbParent: { name: "Careers", url: "/careers/" }
--- ---
<!-- ── Page Hero ── --> <!-- ── Page Hero ── -->
<section class="page-hero"> <section class="page-hero">

View file

@ -4,6 +4,8 @@ title: "Traveling Maintenance/Electrical Assistant — Sea Haven Industries"
description: "Apply for the Traveling Maintenance/Electrical Assistant position at Sea Haven Industries. View job details and submit your application today." description: "Apply for the Traveling Maintenance/Electrical Assistant position at Sea Haven Industries. View job details and submit your application today."
pageCss: jobs pageCss: jobs
recaptcha: true recaptcha: true
breadcrumbName: "Traveling Maintenance / Electrical Assistant"
breadcrumbParent: { name: "Careers", url: "/careers/" }
--- ---
<!-- ── Page Hero ── --> <!-- ── Page Hero ── -->
<section class="page-hero"> <section class="page-hero">

View file

@ -4,6 +4,7 @@ title: "Contact — Sea Haven Industries"
description: "Get in touch with Sea Haven Industries. Have a question or project idea? Contact us today to discuss your construction and facilities needs." description: "Get in touch with Sea Haven Industries. Have a question or project idea? Contact us today to discuss your construction and facilities needs."
pageCss: contact pageCss: contact
recaptcha: true recaptcha: true
breadcrumbName: "Contact Us"
--- ---
<!-- ── Page Hero ── --> <!-- ── Page Hero ── -->
<section class="page-hero"> <section class="page-hero">

View file

@ -4,6 +4,7 @@ title: "End User License Agreement — Sea Haven Industries"
description: "End User License Agreement for Sea Haven Industries QuickBooks application." description: "End User License Agreement for Sea Haven Industries QuickBooks application."
pageCss: legal pageCss: legal
robots: "noindex, nofollow" robots: "noindex, nofollow"
breadcrumbName: "End User License Agreement"
--- ---
<!-- ── Page Hero ── --> <!-- ── Page Hero ── -->
<section class="page-hero"> <section class="page-hero">

View file

@ -307,6 +307,16 @@ permalink: /index.html
"minValue": 120 "minValue": 120
}, },
"foundingDate": "2006", "foundingDate": "2006",
"geo": {
"@type": "GeoCoordinates",
"latitude": 40.8126,
"longitude": -73.1124
},
"areaServed": {
"@type": "Country",
"name": "United States"
},
"hasMap": "https://www.google.com/maps/search/?api=1&query=710+Koehler+Ave+Ronkonkoma+NY+11779",
"serviceType": ["Electrical Work", "Plumbing", "HVACR Services", "Handyman Services", "Garage Door Repair"] "serviceType": ["Electrical Work", "Plumbing", "HVACR Services", "Handyman Services", "Garage Door Repair"]
} }
</script> </script>

View file

@ -3,6 +3,7 @@ layout: base.njk
title: "Privacy Policy — Sea Haven Industries" title: "Privacy Policy — Sea Haven Industries"
description: "Privacy Policy for Sea Haven Industries. Learn how we collect, use, and protect your personal information." description: "Privacy Policy for Sea Haven Industries. Learn how we collect, use, and protect your personal information."
pageCss: legal pageCss: legal
breadcrumbName: "Privacy Policy"
--- ---
<!-- ── Page Hero ── --> <!-- ── Page Hero ── -->
<section class="page-hero"> <section class="page-hero">

View file

@ -4,6 +4,7 @@ title: "Services — Sea Haven Industries"
description: "Sea Haven Industries offers reliable electrical, plumbing, HVAC, handyman, and garage door repair services for every need." description: "Sea Haven Industries offers reliable electrical, plumbing, HVAC, handyman, and garage door repair services for every need."
pageCss: services pageCss: services
recaptcha: true recaptcha: true
breadcrumbName: "Services"
--- ---
<!-- ── Page Hero ── --> <!-- ── Page Hero ── -->
<section class="page-hero"> <section class="page-hero">

View file

@ -3,6 +3,7 @@ layout: base.njk
title: "Social Accountability — Sea Haven Industries" title: "Social Accountability — Sea Haven Industries"
description: "Learn about Sea Haven Industries' commitment to social accountability and responsible business practices in the construction industry." description: "Learn about Sea Haven Industries' commitment to social accountability and responsible business practices in the construction industry."
pageCss: social pageCss: social
breadcrumbName: "Social Accountability"
--- ---
<!-- ── Page Hero ── --> <!-- ── Page Hero ── -->
<section class="page-hero"> <section class="page-hero">

View file

@ -3,6 +3,7 @@ layout: base.njk
title: "Terms of Service — Sea Haven Industries" title: "Terms of Service — Sea Haven Industries"
description: "Terms of Service for Sea Haven Industries. Review the terms and conditions governing your use of the Sea Haven Industries website." description: "Terms of Service for Sea Haven Industries. Review the terms and conditions governing your use of the Sea Haven Industries website."
pageCss: legal pageCss: legal
breadcrumbName: "Terms of Service"
--- ---
<!-- ── Page Hero ── --> <!-- ── Page Hero ── -->
<section class="page-hero"> <section class="page-hero">