[object Object]

← back to Ventura Claw

BreadcrumbList JSON-LD ('Home › X') on /services + /legal-notice + /how-it-works directly; auto-generated for ALL _shell-rendered pages from canonical URL path; rich-snippet eligible across the site

a506956a5c37c234505d87f6a5920f76d723758a · 2026-05-07 11:32:42 -0700 · Steve

Files touched

Diff

commit a506956a5c37c234505d87f6a5920f76d723758a
Author: Steve <steve@designerwallcoverings.com>
Date:   Thu May 7 11:32:42 2026 -0700

    BreadcrumbList JSON-LD ('Home › X') on /services + /legal-notice + /how-it-works directly; auto-generated for ALL _shell-rendered pages from canonical URL path; rich-snippet eligible across the site
---
 server/public/how-it-works.html |  6 ++++++
 server/public/legal-notice.html |  6 ++++++
 server/public/services.html     |  6 ++++++
 server/server.js                | 17 +++++++++++++++++
 4 files changed, 35 insertions(+)

diff --git a/server/public/how-it-works.html b/server/public/how-it-works.html
index 45a3de4..80bf21a 100644
--- a/server/public/how-it-works.html
+++ b/server/public/how-it-works.html
@@ -12,6 +12,12 @@
 <meta property="og:site_name" content="VenturaClaw" />
 <link rel="canonical" href="https://venturaclaw.com/how-it-works" />
 <link rel="alternate" type="application/rss+xml" title="VenturaClaw changelog" href="/feed" />
+<script type="application/ld+json">
+{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[
+  {"@type":"ListItem","position":1,"name":"Home","item":"https://venturaclaw.com/"},
+  {"@type":"ListItem","position":2,"name":"How it works","item":"https://venturaclaw.com/how-it-works"}
+]}
+</script>
 <script>
   (function () { try { if (localStorage.getItem('vc-theme') === 'light') document.documentElement.setAttribute('data-theme', 'light'); } catch (e) {} })();
 </script>
diff --git a/server/public/legal-notice.html b/server/public/legal-notice.html
index 5e1029d..46e3438 100644
--- a/server/public/legal-notice.html
+++ b/server/public/legal-notice.html
@@ -7,6 +7,12 @@
 <meta name="description" content="VenturaClaw is an API-orchestration service that helps small businesses set up Stripe, accounting, banking, insurance, payroll, contracts, and domains via vetted partners. Not a law firm, not your attorney. Read the full legal notice." />
 <meta name="robots" content="index,follow" />
 <link rel="alternate" type="application/rss+xml" title="VenturaClaw changelog" href="/feed" />
+<script type="application/ld+json">
+{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[
+  {"@type":"ListItem","position":1,"name":"Home","item":"https://venturaclaw.com/"},
+  {"@type":"ListItem","position":2,"name":"Legal Notice","item":"https://venturaclaw.com/legal-notice"}
+]}
+</script>
 <script>
   (function () { try { if (localStorage.getItem('vc-theme') === 'light') document.documentElement.setAttribute('data-theme', 'light'); } catch (e) {} })();
 </script>
diff --git a/server/public/services.html b/server/public/services.html
index 0b3329f..f1a79ba 100644
--- a/server/public/services.html
+++ b/server/public/services.html
@@ -14,6 +14,12 @@
 <link rel="canonical" href="https://venturaclaw.com/services" />
 <link rel="alternate" type="application/rss+xml" title="VenturaClaw changelog" href="/feed" />
 <script type="application/ld+json">
+{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[
+  {"@type":"ListItem","position":1,"name":"Home","item":"https://venturaclaw.com/"},
+  {"@type":"ListItem","position":2,"name":"Services","item":"https://venturaclaw.com/services"}
+]}
+</script>
+<script type="application/ld+json">
 {
   "@context": "https://schema.org",
   "@type": "TechnologyOrganization",
diff --git a/server/server.js b/server/server.js
index 06248c0..77223a7 100644
--- a/server/server.js
+++ b/server/server.js
@@ -1151,6 +1151,22 @@ function _renderConnectorPage(c) {
 }
 function _shell({ title, desc, canonical, body, jsonLd }) {
   const ldBlock = jsonLd ? `<script type="application/ld+json">${JSON.stringify(jsonLd)}</script>` : "";
+  // Auto-generate BreadcrumbList JSON-LD from the canonical URL path. Helps Google rich snippets
+  // ("Home › Pricing") on every _shell-rendered page without per-route plumbing.
+  let breadcrumbBlock = "";
+  try {
+    const urlPath = (canonical || "").replace(/^https?:\/\/[^/]+/, "");
+    const seg = urlPath.split("/").filter(Boolean)[0];
+    if (seg) {
+      const labelMap = { connectors: "Connectors", about: "About", faq: "FAQ", docs: "API Docs", pricing: "Pricing", changelog: "Changelog", privacy: "Privacy", terms: "Terms" };
+      const label = labelMap[seg] || (seg.charAt(0).toUpperCase() + seg.slice(1).replace(/-/g, " "));
+      const bc = { "@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[
+        {"@type":"ListItem","position":1,"name":"Home","item":`https://${DOMAIN}/`},
+        {"@type":"ListItem","position":2,"name":label,"item":canonical},
+      ]};
+      breadcrumbBlock = `<script type="application/ld+json">${JSON.stringify(bc)}</script>`;
+    }
+  } catch {}
   return `<!doctype html>
 <html lang="en"><head>
 <meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
@@ -1164,6 +1180,7 @@ function _shell({ title, desc, canonical, body, jsonLd }) {
 <meta property="og:image" content="https://${DOMAIN}/static/og-cover.svg">
 <meta name="twitter:card" content="summary_large_image">
 <script>(function(){try{if(localStorage.getItem('vc-theme')==='light')document.documentElement.setAttribute('data-theme','light');}catch(e){}})();</script>
+${breadcrumbBlock}
 ${ldBlock}
 <link rel="stylesheet" href="/static/style.css">
 <style>

← 334b6e1 /connectors: client-side search filter — single input filter  ·  back to Ventura Claw  ·  robots.txt: explicit hint pointing at /feed (RSS) for crawle 21e25ee →