[object Object]

← back to Wallco Ai

feat(/design/:id): add BreadcrumbList JSON-LD alongside existing Product schema; lets Google show 'Home › Designs › <category> › <title>' breadcrumbs in SERP

dba51ee4dccafe36e7903ca20831913005063d28 · 2026-05-14 12:29:11 -0700 · SteveStudio2

Files touched

Diff

commit dba51ee4dccafe36e7903ca20831913005063d28
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date:   Thu May 14 12:29:11 2026 -0700

    feat(/design/:id): add BreadcrumbList JSON-LD alongside existing Product schema; lets Google show 'Home › Designs › <category> › <title>' breadcrumbs in SERP
---
 server.js | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/server.js b/server.js
index 3b05795..64dba42 100644
--- a/server.js
+++ b/server.js
@@ -5763,7 +5763,20 @@ app.get('/design/:id', (req, res) => {
     design.seed && { "@type": "PropertyValue", "name": "Generation seed", "value": String(design.seed) }
   ].filter(Boolean);
 
-  const schema = JSON.stringify({
+  // BreadcrumbList schema — surfaces "Home › Designs › <category> › <title>"
+  // in Google search results. Pairs with the existing Product schema so the
+  // SERP shows both rich-result card AND breadcrumbs.
+  const breadcrumbSchema = JSON.stringify({
+    "@context": "https://schema.org",
+    "@type": "BreadcrumbList",
+    "itemListElement": [
+      { "@type": "ListItem", "position": 1, "name": "Home",    "item": "https://wallco.ai/" },
+      { "@type": "ListItem", "position": 2, "name": "Designs", "item": "https://wallco.ai/designs" },
+      { "@type": "ListItem", "position": 3, "name": String(design.category || '').replace(/^./, c => c.toUpperCase()), "item": `https://wallco.ai/designs?cat=${encodeURIComponent(design.category || '')}` },
+      { "@type": "ListItem", "position": 4, "name": design.title }
+    ]
+  });
+  const productSchema = JSON.stringify({
     "@context": "https://schema.org",
     "@type": "Product",
     "@id": `https://wallco.ai/design/${design.id}`,
@@ -5787,6 +5800,7 @@ app.get('/design/:id', (req, res) => {
       "description": "Free sample available — full roll pricing on request"
     }
   });
+  const schema = `${productSchema}</script>\n<script type="application/ld+json">${breadcrumbSchema}`;
 
   res.type('html').send(`${htmlHead({
     title: `${design.title} — wallco.ai`,

← 6601949 feat(/designs): prefetch /design/:id on card hover with 80ms  ·  back to Wallco Ai  ·  feat(/designs mobile): chip-rows scroll horizontally on phon a624fa8 →