← back to Interiordesignershowroom
auto-save: 2026-08-03T11:23:33 (1 files) — server.js
41049f5f8a727056493b31cb14b20b5d69e15f28 · 2026-08-03 11:23:39 -0700 · Steve Abrams
Files touched
Diff
commit 41049f5f8a727056493b31cb14b20b5d69e15f28
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Mon Aug 3 11:23:39 2026 -0700
auto-save: 2026-08-03T11:23:33 (1 files) — server.js
---
server.js | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/server.js b/server.js
index 37b5dca..b8d4e01 100644
--- a/server.js
+++ b/server.js
@@ -226,8 +226,15 @@ app.get('/guides', async (_req, res, next) => {
`<a class="guide-card" href="/guides/${esc(g.slug)}">
${g.hero_image ? `<img loading="lazy" src="${esc(g.hero_image)}" alt="${esc(g.title)}">` : ''}
<h3>${esc(g.title)}</h3><p>${esc(g.dek || '')}</p></a>`).join('');
- const body = `<section><h1>Buying Guides</h1><div class="guide-grid">${cards || '<p>Guides coming soon.</p>'}</div></section>`;
- res.send(layout({ title: 'Interior Design Buying Guides', description: 'Editorial guides: how to choose, shop-the-look, and the best of every category.', canonical: `${SITE.url}/guides`, body, activeNav: '/guides' }));
+ const crumbs = [{ name: 'Home', url: `${SITE.url}/` }, { name: 'Guides', url: `${SITE.url}/guides` }];
+ const body = `<section>${breadcrumbNav(crumbs)}<h1>Buying Guides</h1><div class="guide-grid">${cards || '<p>Guides coming soon.</p>'}</div></section>`;
+ // ItemList of the published guides so the index itself is a structured collection
+ // Google can surface (values are raw here — JSON.stringify escapes them, not esc()).
+ const itemList = { '@context': 'https://schema.org', '@type': 'ItemList', name: 'Interior Design Buying Guides',
+ numberOfItems: rows.length,
+ itemListElement: rows.map((g, i) => ({ '@type': 'ListItem', position: i + 1, url: `${SITE.url}/guides/${g.slug}`, name: g.title })) };
+ const jsonld = [itemList, breadcrumbJsonld(crumbs)].filter(Boolean);
+ res.send(layout({ title: 'Interior Design Buying Guides', description: 'Editorial guides: how to choose, shop-the-look, and the best of every category.', canonical: `${SITE.url}/guides`, jsonld, body, activeNav: '/guides' }));
} catch (e) { next(e); }
});
← 1bd3992 security: response headers + non-breaking CSP (frame-ancesto
·
back to Interiordesignershowroom
·
seo+security: guides CollectionPage schema + Article url/dat cdb2c85 →