From 381f6b6dcedba7709669ddf23df7d6570d4ffd7f Mon Sep 17 00:00:00 2001 From: Adam Moussa Date: Fri, 12 Jun 2026 17:23:11 -0400 Subject: [PATCH] feat(seo): BreadcrumbList on interior pages + richer LocalBusiness MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- .eleventy.js | 3 +++ _includes/base.njk | 4 ++++ _includes/breadcrumb-ld.njk | 13 +++++++++++++ about/index.njk | 1 + careers/dispatcher/index.njk | 2 ++ careers/index.njk | 1 + careers/scheduling-coordinator/index.njk | 2 ++ careers/traveling-maintenance-assistant/index.njk | 2 ++ contact/index.njk | 1 + eula/index.njk | 1 + index.njk | 10 ++++++++++ privacy-policy/index.njk | 1 + services/index.njk | 1 + social-accountability/index.njk | 1 + terms-of-service/index.njk | 1 + 15 files changed, 44 insertions(+) create mode 100644 _includes/breadcrumb-ld.njk diff --git a/.eleventy.js b/.eleventy.js index 3b3f1b8..ab32e73 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -21,6 +21,9 @@ module.exports = function (eleventyConfig) { // Current year, for the footer (replaces the deprecated document.write pattern). 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 { dir: { input: ".", includes: "_includes", data: "_data", output: "_site" }, templateFormats: ["njk"], diff --git a/_includes/base.njk b/_includes/base.njk index fd808f0..66291e0 100644 --- a/_includes/base.njk +++ b/_includes/base.njk @@ -50,6 +50,10 @@ {% include "footer.njk" %} + {%- if breadcrumbName %} + {% include "breadcrumb-ld.njk" %} + {%- endif %} + {%- if recaptcha %} diff --git a/_includes/breadcrumb-ld.njk b/_includes/breadcrumb-ld.njk new file mode 100644 index 0000000..462888f --- /dev/null +++ b/_includes/breadcrumb-ld.njk @@ -0,0 +1,13 @@ + diff --git a/about/index.njk b/about/index.njk index ebe978b..4e2733b 100644 --- a/about/index.njk +++ b/about/index.njk @@ -3,6 +3,7 @@ layout: base.njk 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." pageCss: about +breadcrumbName: "About" ---
diff --git a/careers/dispatcher/index.njk b/careers/dispatcher/index.njk index 94e736a..3b10122 100644 --- a/careers/dispatcher/index.njk +++ b/careers/dispatcher/index.njk @@ -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." pageCss: jobs recaptcha: true +breadcrumbName: "Dispatcher" +breadcrumbParent: { name: "Careers", url: "/careers/" } ---
diff --git a/careers/index.njk b/careers/index.njk index f415559..c572b2b 100644 --- a/careers/index.njk +++ b/careers/index.njk @@ -3,6 +3,7 @@ layout: base.njk 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." pageCss: careers +breadcrumbName: "Careers" ---
diff --git a/careers/scheduling-coordinator/index.njk b/careers/scheduling-coordinator/index.njk index 442d109..6afffa6 100644 --- a/careers/scheduling-coordinator/index.njk +++ b/careers/scheduling-coordinator/index.njk @@ -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." pageCss: jobs recaptcha: true +breadcrumbName: "Scheduling Coordinator" +breadcrumbParent: { name: "Careers", url: "/careers/" } ---
diff --git a/careers/traveling-maintenance-assistant/index.njk b/careers/traveling-maintenance-assistant/index.njk index 4280141..ef903c7 100644 --- a/careers/traveling-maintenance-assistant/index.njk +++ b/careers/traveling-maintenance-assistant/index.njk @@ -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." pageCss: jobs recaptcha: true +breadcrumbName: "Traveling Maintenance / Electrical Assistant" +breadcrumbParent: { name: "Careers", url: "/careers/" } ---
diff --git a/contact/index.njk b/contact/index.njk index 5c459b9..88a4eb8 100644 --- a/contact/index.njk +++ b/contact/index.njk @@ -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." pageCss: contact recaptcha: true +breadcrumbName: "Contact Us" ---
diff --git a/eula/index.njk b/eula/index.njk index 1561518..a638655 100644 --- a/eula/index.njk +++ b/eula/index.njk @@ -4,6 +4,7 @@ title: "End User License Agreement — Sea Haven Industries" description: "End User License Agreement for Sea Haven Industries QuickBooks application." pageCss: legal robots: "noindex, nofollow" +breadcrumbName: "End User License Agreement" ---
diff --git a/index.njk b/index.njk index bd015e1..5208774 100644 --- a/index.njk +++ b/index.njk @@ -307,6 +307,16 @@ permalink: /index.html "minValue": 120 }, "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"] } diff --git a/privacy-policy/index.njk b/privacy-policy/index.njk index 7353a71..a42b157 100644 --- a/privacy-policy/index.njk +++ b/privacy-policy/index.njk @@ -3,6 +3,7 @@ layout: base.njk title: "Privacy Policy — Sea Haven Industries" description: "Privacy Policy for Sea Haven Industries. Learn how we collect, use, and protect your personal information." pageCss: legal +breadcrumbName: "Privacy Policy" ---
diff --git a/services/index.njk b/services/index.njk index 358b755..cd9eeb0 100644 --- a/services/index.njk +++ b/services/index.njk @@ -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." pageCss: services recaptcha: true +breadcrumbName: "Services" ---
diff --git a/social-accountability/index.njk b/social-accountability/index.njk index 4def0c6..ff285cf 100644 --- a/social-accountability/index.njk +++ b/social-accountability/index.njk @@ -3,6 +3,7 @@ layout: base.njk title: "Social Accountability — Sea Haven Industries" description: "Learn about Sea Haven Industries' commitment to social accountability and responsible business practices in the construction industry." pageCss: social +breadcrumbName: "Social Accountability" ---
diff --git a/terms-of-service/index.njk b/terms-of-service/index.njk index 570cc00..0f36367 100644 --- a/terms-of-service/index.njk +++ b/terms-of-service/index.njk @@ -3,6 +3,7 @@ layout: base.njk 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." pageCss: legal +breadcrumbName: "Terms of Service" ---