← 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
M server/public/how-it-works.htmlM server/public/legal-notice.htmlM server/public/services.htmlM server/server.js
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 →