← back to AsSeenInMovies
asseeninmovies: /spotted ItemList JSON-LD — each placement emitted as schema.org/Product (name/brand/category/url anchored to #spotted-N on the parent movie page) inside an ItemList with position + numberOfItems. Eligible for Google rich-snippet 'list of products' carousels in search results.
fd7062085ca6ad9364233a456f48b3df1086a294 · 2026-05-12 19:20:14 -0700 · SteveStudio2
Files touched
Diff
commit fd7062085ca6ad9364233a456f48b3df1086a294
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date: Tue May 12 19:20:14 2026 -0700
asseeninmovies: /spotted ItemList JSON-LD — each placement emitted as schema.org/Product (name/brand/category/url anchored to #spotted-N on the parent movie page) inside an ItemList with position + numberOfItems. Eligible for Google rich-snippet 'list of products' carousels in search results.
---
server.js | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
diff --git a/server.js b/server.js
index ad0c1ca..83dbb82 100644
--- a/server.js
+++ b/server.js
@@ -403,7 +403,27 @@ app.get('/spotted', async (req, res) => {
${filterBar}
${rows || '<p class="empty">No verified placements in this category yet.</p>'}
${pager}`;
- res.type('html').send(htmlShell(cat ? 'Spotted · ' + cat : 'Spotted', body, '', 'https://asseeninmovies.com/spotted'));
+ // ItemList schema — rich snippet candidates for the gallery page.
+ // Each Product item links back to its parent movie page; SearchAction
+ // would be redundant since the site WebSite schema covers it.
+ const itemList = {
+ '@context': 'https://schema.org',
+ '@type': 'ItemList',
+ itemListElement: r.rows.map((s, i) => ({
+ '@type': 'ListItem',
+ position: offset + i + 1,
+ item: {
+ '@type': 'Product',
+ name: s.product_name,
+ ...(s.brand ? { brand: { '@type': 'Brand', name: s.brand } } : {}),
+ ...(s.product_category ? { category: s.product_category } : {}),
+ url: `https://asseeninmovies.com/movie/${s.movie_id}#spotted-${s.id}`,
+ },
+ })),
+ numberOfItems: total,
+ };
+ const headExtras = `<script type="application/ld+json">${JSON.stringify(itemList)}</script>`;
+ res.type('html').send(htmlShell(cat ? 'Spotted · ' + cat : 'Spotted', body, headExtras, 'https://asseeninmovies.com/spotted'));
} catch (e) {
res.status(500).type('html').send(htmlShell('Error', `<div class="empty">${esc(e.message)}</div>`));
}
← 56476af asseeninmovies: branded 404 — was leaking stock Express 'Can
·
back to AsSeenInMovies
·
asseeninmovies: BreadcrumbList JSON-LD on /movie/:id (Home > b8d4281 →