[object Object]

← 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

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 →