← back to AsSeenInMovies
asseeninmovies: BreadcrumbList JSON-LD on /movie/:id (Home > Movies > Title) and /person/:id (Home > People > Name) — packaged with Movie/Person schema in a schema.org @graph so it's one script tag. Enables Google breadcrumb-trail rich snippets.
b8d4281bcfe148d1f4f1326517e74b4f7c819203 · 2026-05-12 19:24:52 -0700 · SteveStudio2
Files touched
Diff
commit b8d4281bcfe148d1f4f1326517e74b4f7c819203
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date: Tue May 12 19:24:52 2026 -0700
asseeninmovies: BreadcrumbList JSON-LD on /movie/:id (Home > Movies > Title) and /person/:id (Home > People > Name) — packaged with Movie/Person schema in a schema.org @graph so it's one script tag. Enables Google breadcrumb-trail rich snippets.
---
server.js | 60 ++++++++++++++++++++++++++++++++++++++++++------------------
1 file changed, 42 insertions(+), 18 deletions(-)
diff --git a/server.js b/server.js
index 83dbb82..795ac18 100644
--- a/server.js
+++ b/server.js
@@ -1061,15 +1061,27 @@ app.get('/movie/:id', async (req, res) => {
const ogDesc = mv.overview ? mv.overview.slice(0, 280) : `${mv.title}${mv.release_year ? ' (' + mv.release_year + ')' : ''} — credits, scene details, and SPOTTED placements on AsSeenInMovies.`;
const jsonLd = JSON.stringify({
'@context': 'https://schema.org',
- '@type': 'Movie',
- name: mv.title,
- ...(mv.release_year ? { datePublished: String(mv.release_year) } : {}),
- ...(mv.overview ? { description: mv.overview } : {}),
- ...(mv.poster_url ? { image: ogImage } : {}),
- ...(mv.imdb_id ? { sameAs: `https://www.imdb.com/title/${mv.imdb_id}/` } : {}),
- ...(mv.genres && mv.genres.length ? { genre: mv.genres } : {}),
- ...(mv.runtime_min ? { duration: `PT${mv.runtime_min}M` } : {}),
- url: `https://asseeninmovies.com/movie/${id}`,
+ '@graph': [
+ {
+ '@type': 'Movie',
+ name: mv.title,
+ ...(mv.release_year ? { datePublished: String(mv.release_year) } : {}),
+ ...(mv.overview ? { description: mv.overview } : {}),
+ ...(mv.poster_url ? { image: ogImage } : {}),
+ ...(mv.imdb_id ? { sameAs: `https://www.imdb.com/title/${mv.imdb_id}/` } : {}),
+ ...(mv.genres && mv.genres.length ? { genre: mv.genres } : {}),
+ ...(mv.runtime_min ? { duration: `PT${mv.runtime_min}M` } : {}),
+ url: `https://asseeninmovies.com/movie/${id}`,
+ },
+ {
+ '@type': 'BreadcrumbList',
+ itemListElement: [
+ { '@type': 'ListItem', position: 1, name: 'Home', item: 'https://asseeninmovies.com/' },
+ { '@type': 'ListItem', position: 2, name: 'Movies', item: 'https://asseeninmovies.com/movies' },
+ { '@type': 'ListItem', position: 3, name: mv.title, item: `https://asseeninmovies.com/movie/${id}` },
+ ],
+ },
+ ],
});
const headExtras = `
<meta name="description" content="${esc(ogDesc)}">
@@ -1170,15 +1182,27 @@ app.get('/person/:id', async (req, res) => {
const ogDesc = `${person.full_name} — ${profProf}${person.birth_year ? ', born ' + person.birth_year : ''}. Filmography and verified SPOTTED placements on AsSeenInMovies.`;
const jsonLd = JSON.stringify({
'@context': 'https://schema.org',
- '@type': 'Person',
- name: person.full_name,
- ...(person.bio ? { description: person.bio.slice(0, 800) } : {}),
- ...(person.headshot_url ? { image: ogImage } : {}),
- ...(person.imdb_id ? { sameAs: `https://www.imdb.com/name/${person.imdb_id}/` } : {}),
- ...(person.birth_year ? { birthDate: String(person.birth_year) } : {}),
- ...(person.death_year ? { deathDate: String(person.death_year) } : {}),
- ...(person.primary_profession && person.primary_profession.length ? { jobTitle: person.primary_profession[0] } : {}),
- url: `https://asseeninmovies.com/person/${id}`,
+ '@graph': [
+ {
+ '@type': 'Person',
+ name: person.full_name,
+ ...(person.bio ? { description: person.bio.slice(0, 800) } : {}),
+ ...(person.headshot_url ? { image: ogImage } : {}),
+ ...(person.imdb_id ? { sameAs: `https://www.imdb.com/name/${person.imdb_id}/` } : {}),
+ ...(person.birth_year ? { birthDate: String(person.birth_year) } : {}),
+ ...(person.death_year ? { deathDate: String(person.death_year) } : {}),
+ ...(person.primary_profession && person.primary_profession.length ? { jobTitle: person.primary_profession[0] } : {}),
+ url: `https://asseeninmovies.com/person/${id}`,
+ },
+ {
+ '@type': 'BreadcrumbList',
+ itemListElement: [
+ { '@type': 'ListItem', position: 1, name: 'Home', item: 'https://asseeninmovies.com/' },
+ { '@type': 'ListItem', position: 2, name: 'People', item: 'https://asseeninmovies.com/people' },
+ { '@type': 'ListItem', position: 3, name: person.full_name, item: `https://asseeninmovies.com/person/${id}` },
+ ],
+ },
+ ],
});
const headExtras = `
<meta name="description" content="${esc(ogDesc)}">
← fd70620 asseeninmovies: /spotted ItemList JSON-LD — each placement e
·
back to AsSeenInMovies
·
asseeninmovies: GET /about — editorial explainer page (what b7aaa6e →