← back to Beverlyhillsvideos
social: SEO-rich captions — category + location keywords + searchable line
f0171a52ed41c80b5a1ea85bbff9883d8c0faa65 · 2026-08-06 16:01:47 -0700 · Steve Abrams
Store: '<Name> — <Category> on Rodeo Drive, Beverly Hills' + 📍 Beverly Hills CA
90210 + category keyword line (fine jewelry/designer fashion/luxury watches…) +
guide CTA + disclaimer. Restaurant: location + 'where to eat in Beverly Hills'
keyword line. Instagram indexes caption text, so this lifts discovery.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Files touched
M social/poster/caption.mjs
Diff
commit f0171a52ed41c80b5a1ea85bbff9883d8c0faa65
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Thu Aug 6 16:01:47 2026 -0700
social: SEO-rich captions — category + location keywords + searchable line
Store: '<Name> — <Category> on Rodeo Drive, Beverly Hills' + 📍 Beverly Hills CA
90210 + category keyword line (fine jewelry/designer fashion/luxury watches…) +
guide CTA + disclaimer. Restaurant: location + 'where to eat in Beverly Hills'
keyword line. Instagram indexes caption text, so this lifts discovery.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
social/poster/caption.mjs | 41 ++++++++++++++++++++++++++++++++++-------
1 file changed, 34 insertions(+), 7 deletions(-)
diff --git a/social/poster/caption.mjs b/social/poster/caption.mjs
index 3b5f4c7..9bd3912 100644
--- a/social/poster/caption.mjs
+++ b/social/poster/caption.mjs
@@ -32,23 +32,50 @@ const SHOPPING = [
'#luxurytravel', '#cityguide', '#style', '#fashion', '#visitbeverlyhills', '#cinematic',
];
+// Category → natural SEO keyword phrase (Instagram indexes caption text).
+const KW = {
+ Fashion: 'designer fashion', Jewelry: 'fine jewelry', Watches: 'luxury watches',
+ Accessories: 'luxury accessories', Beauty: 'beauty & skincare', Fragrance: 'fine fragrance',
+ Eyewear: 'designer eyewear', Home: 'luxury home', Luggage: 'luxury luggage',
+};
+function storeKw(cat) {
+ const c = (cat || '').split(/[\/·]/)[0].trim();
+ return KW[c] || 'luxury retail';
+}
+
export function buildCaption(film, seedIndex = 0) {
const isStore = film.type === 'store';
const blurb = (film.blurb || '').trim().replace(/\s+/g, ' ');
- const hook = blurb ? `${film.name}. ${blurb}` : `${film.name} — Beverly Hills, in film.`;
const pool = isStore ? SHOPPING : DINING;
const tags = [...CORE, ...rotate(pool, 11, seedIndex)];
- const line = isStore
- ? 'A short film from Beverly Hills Videos — the insider’s guide to Rodeo Drive & Beverly Hills style. Explore the guide → link in bio.'
- : 'A short film from Beverly Hills Videos — the insider’s guide to the city’s finest dining. Full guide, menu & interactive map → link in bio.';
+
+ if (isStore) {
+ const cat = film.category || 'Luxury';
+ const kw = storeKw(cat);
+ const hook = `${film.name} — ${cat} on Rodeo Drive, Beverly Hills.${blurb ? ' ' + blurb : ''}`;
+ const body = [
+ hook,
+ '',
+ `📍 Rodeo Drive · Beverly Hills, CA 90210`,
+ `🛍️ ${kw} in Beverly Hills — designer boutiques & flagship stores on Rodeo Drive.`,
+ `🎬 Explore the full Beverly Hills shopping & dining guide → link in bio`,
+ '',
+ STORE_DISCLAIMER,
+ '',
+ tags.join(' '),
+ ].join('\n');
+ return body.slice(0, 2190);
+ }
+
+ const hook = blurb ? `${film.name}. ${blurb}` : `${film.name} — Beverly Hills, in film.`;
const body = [
hook,
'',
- line,
- ...(isStore ? ['', STORE_DISCLAIMER] : []),
+ `📍 Beverly Hills, CA 90210 · Fine dining`,
+ `🍽️ Where to eat in Beverly Hills — restaurant films, menus & the interactive map.`,
+ `🎬 Full guide → link in bio`,
'',
tags.join(' '),
].join('\n');
- // IG hard cap is 2200 chars; our captions run ~500, but clamp defensively.
return body.slice(0, 2190);
}
← facb575 stores: deploy 8 animated Rodeo Drive cards + store-films.js
·
back to Beverlyhillsvideos
·
auto-data-snapshot: 2026-08-06T16:03:07 (5 data files) — .gi 5a66df1 →