[object Object]

← back to Ventura Claw Leads

Inject neighborhood into seeded headlines (170 distinct phrasings, was ~60)

5a49679128263c6595619dbfd8af8a6e39cecc2c · 2026-05-07 13:48:06 -0700 · Steve Abrams

Templated headlines like 'Hair salon on Ventura Blvd.' (408 rows) and
'Sit-down restaurant on Ventura Blvd.' (425 rows) now read 'Hair salon
in Sherman Oaks.' / 'Sit-down restaurant in Encino.' — a single
deterministic UPDATE that rewrites both headline + description in
place. Distinct headline strings: ~60 → 170 (3x more variety, ~11
rows per phrasing avg).

Plus matching change to scripts/seed-corridor-all.js so future
re-seeds bake the city in at insert time instead of needing a
post-hoc UPDATE.

Files touched

Diff

commit 5a49679128263c6595619dbfd8af8a6e39cecc2c
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu May 7 13:48:06 2026 -0700

    Inject neighborhood into seeded headlines (170 distinct phrasings, was ~60)
    
    Templated headlines like 'Hair salon on Ventura Blvd.' (408 rows) and
    'Sit-down restaurant on Ventura Blvd.' (425 rows) now read 'Hair salon
    in Sherman Oaks.' / 'Sit-down restaurant in Encino.' — a single
    deterministic UPDATE that rewrites both headline + description in
    place. Distinct headline strings: ~60 → 170 (3x more variety, ~11
    rows per phrasing avg).
    
    Plus matching change to scripts/seed-corridor-all.js so future
    re-seeds bake the city in at insert time instead of needing a
    post-hoc UPDATE.
---
 scripts/seed-corridor-all.js | 103 +++++++++++++++++++++++--------------------
 1 file changed, 54 insertions(+), 49 deletions(-)

diff --git a/scripts/seed-corridor-all.js b/scripts/seed-corridor-all.js
index ce586e4..a3c3b10 100644
--- a/scripts/seed-corridor-all.js
+++ b/scripts/seed-corridor-all.js
@@ -165,76 +165,81 @@ function isPersonNameOrJunk(name) {
   return false;
 }
 
-function buildHeadline(vertical, row) {
+function buildHeadline(vertical, row, city) {
   const tags = (row.raw && row.raw.tags) || {};
   const cat = row.category || '';
   const cr = row.category_raw || '';
   const cuisine = tags.cuisine ? tags.cuisine.replace(/[_;]/g,' ').replace(/\b\w/g, c => c.toUpperCase()) : null;
+  // city-suffix: 'in Sherman Oaks.' replaces the bland 'on Ventura Blvd.'
+  // tail. Keeps headlines deterministic but generates 5x as many distinct
+  // phrasings (one per neighborhood) — better SEO match for 'X in <city>'
+  // searches and reduces visible repetition on the find grid.
+  const SUF = ` in ${city}.`;
 
   if (vertical === 'food') {
-    if (cuisine && cat === 'amenity: restaurant') return `${cuisine} restaurant on Ventura Blvd.`;
-    if (cuisine && cat === 'amenity: fast food')   return `${cuisine} — quick-serve on the Boulevard.`;
-    if (cat === 'amenity: cafe') return 'Coffee + light fare on Ventura Blvd.';
-    if (cat === 'amenity: bar')  return 'Neighborhood bar on the Boulevard.';
-    if (cat === 'amenity: restaurant') return 'Sit-down restaurant on Ventura Blvd.';
-    if (cat === 'amenity: fast food')  return 'Quick-serve on the Boulevard.';
-    if (/Coffee|Tea/i.test(cr))   return 'Coffee + tea on Ventura Blvd.';
-    if (/Caterer/i.test(cr))      return 'Caterer + food service on Ventura Blvd.';
-    if (/Drinking places/i.test(cr)) return 'Bar on Ventura Blvd.';
-    return 'Local food + drink on Ventura Blvd.';
+    if (cuisine && cat === 'amenity: restaurant') return `${cuisine} restaurant${SUF}`;
+    if (cuisine && cat === 'amenity: fast food')   return `${cuisine} — quick-serve${SUF}`;
+    if (cat === 'amenity: cafe') return `Coffee + light fare${SUF}`;
+    if (cat === 'amenity: bar')  return `Neighborhood bar${SUF}`;
+    if (cat === 'amenity: restaurant') return `Sit-down restaurant${SUF}`;
+    if (cat === 'amenity: fast food')  return `Quick-serve${SUF}`;
+    if (/Coffee|Tea/i.test(cr))   return `Coffee + tea${SUF}`;
+    if (/Caterer/i.test(cr))      return `Caterer + food service${SUF}`;
+    if (/Drinking places/i.test(cr)) return `Bar${SUF}`;
+    return `Local food + drink${SUF}`;
   }
   if (vertical === 'beauty') {
-    if (cat === 'shop: hairdresser') return 'Hair salon on Ventura Blvd.';
-    if (cat === 'shop: beauty')      return 'Beauty studio on Ventura Blvd.';
-    if (cat === 'shop: cosmetics')   return 'Cosmetics + beauty supply on Ventura Blvd.';
-    if (/Barber/i.test(cr))          return 'Barber shop on Ventura Blvd.';
-    if (/Nail/i.test(cr))            return 'Nail salon on Ventura Blvd.';
-    if (/Cosmetics/i.test(cr))       return 'Cosmetics + beauty supply on Ventura Blvd.';
-    if (/Beauty salons/i.test(cr))   return 'Hair + beauty salon on Ventura Blvd.';
-    return 'Beauty service on Ventura Blvd.';
+    if (cat === 'shop: hairdresser') return `Hair salon${SUF}`;
+    if (cat === 'shop: beauty')      return `Beauty studio${SUF}`;
+    if (cat === 'shop: cosmetics')   return `Cosmetics + beauty supply${SUF}`;
+    if (/Barber/i.test(cr))          return `Barber shop${SUF}`;
+    if (/Nail/i.test(cr))            return `Nail salon${SUF}`;
+    if (/Cosmetics/i.test(cr))       return `Cosmetics + beauty supply${SUF}`;
+    if (/Beauty salons/i.test(cr))   return `Hair + beauty salon${SUF}`;
+    return `Beauty service${SUF}`;
   }
   if (vertical === 'retail') {
-    if (cat === 'shop: clothes')      return 'Clothing boutique on Ventura Blvd.';
-    if (cat === 'shop: furniture')    return 'Furniture store on Ventura Blvd.';
-    if (cat === 'shop: department store') return 'Department store on Ventura Blvd.';
-    if (/Jewelry/i.test(cr))          return 'Jewelry store on Ventura Blvd.';
-    if (/Furniture|Home furnishings/i.test(cr)) return 'Home + furniture store on Ventura Blvd.';
-    if (/Florists/i.test(cr))         return 'Florist on Ventura Blvd.';
-    if (/clothing|Apparel/i.test(cr)) return 'Clothing + apparel on Ventura Blvd.';
-    if (/Books/i.test(cr))            return 'Bookstore on Ventura Blvd.';
-    if (/Optical/i.test(cr))          return 'Optical + eyewear on Ventura Blvd.';
-    if (/Musical instrument/i.test(cr)) return 'Music + instrument shop on Ventura Blvd.';
-    if (/Gift/i.test(cr))             return 'Gift + novelty shop on Ventura Blvd.';
-    return 'Local retail on Ventura Blvd.';
+    if (cat === 'shop: clothes')      return `Clothing boutique${SUF}`;
+    if (cat === 'shop: furniture')    return `Furniture store${SUF}`;
+    if (cat === 'shop: department store') return `Department store${SUF}`;
+    if (/Jewelry/i.test(cr))          return `Jewelry store${SUF}`;
+    if (/Furniture|Home furnishings/i.test(cr)) return `Home + furniture store${SUF}`;
+    if (/Florists/i.test(cr))         return `Florist${SUF}`;
+    if (/clothing|Apparel/i.test(cr)) return `Clothing + apparel${SUF}`;
+    if (/Books/i.test(cr))            return `Bookstore${SUF}`;
+    if (/Optical/i.test(cr))          return `Optical + eyewear${SUF}`;
+    if (/Musical instrument/i.test(cr)) return `Music + instrument shop${SUF}`;
+    if (/Gift/i.test(cr))             return `Gift + novelty shop${SUF}`;
+    return `Local retail${SUF}`;
   }
   if (vertical === 'fitness') {
-    if (cat.startsWith('leisure: fitness')) return 'Fitness studio on Ventura Blvd.';
-    return 'Fitness studio on Ventura Blvd.';
+    if (cat.startsWith('leisure: fitness')) return `Fitness studio${SUF}`;
+    return `Fitness studio${SUF}`;
   }
   if (vertical === 'pet_services') {
-    if (cat === 'shop: pet') return 'Pet supply + service on Ventura Blvd.';
-    return 'Pet care service on Ventura Blvd.';
+    if (cat === 'shop: pet') return `Pet supply + service${SUF}`;
+    return `Pet care service${SUF}`;
   }
   if (vertical === 'auto_detail') {
-    return 'Auto detail on Ventura Blvd.';
+    return `Auto detail${SUF}`;
   }
   if (vertical === 'cleaning') {
-    if (/Janitorial/i.test(cr)) return 'Janitorial + commercial cleaning on Ventura Blvd.';
-    if (/Drycleaning/i.test(cr)) return 'Dry cleaning + laundry on Ventura Blvd.';
+    if (/Janitorial/i.test(cr)) return `Janitorial + commercial cleaning${SUF}`;
+    if (/Drycleaning/i.test(cr)) return `Dry cleaning + laundry${SUF}`;
     if (cat.startsWith('shop: laundry') || cat.startsWith('shop: dry'))
-      return 'Dry cleaning + laundry on Ventura Blvd.';
-    return 'Cleaning service on Ventura Blvd.';
+      return `Dry cleaning + laundry${SUF}`;
+    return `Cleaning service${SUF}`;
   }
   if (vertical === 'creative') {
-    if (/Photographic/i.test(cr))    return 'Photographer on Ventura Blvd.';
-    if (/Florists/i.test(cr))        return 'Florist on Ventura Blvd.';
-    if (/Specialized design/i.test(cr)) return 'Design studio on Ventura Blvd.';
-    if (/Promoters/i.test(cr))       return 'Event + promotion company on Ventura Blvd.';
-    if (/Performing arts/i.test(cr)) return 'Performing arts on Ventura Blvd.';
-    if (/Sound recording/i.test(cr)) return 'Recording studio on Ventura Blvd.';
-    return 'Creative studio on Ventura Blvd.';
+    if (/Photographic/i.test(cr))    return `Photographer${SUF}`;
+    if (/Florists/i.test(cr))        return `Florist${SUF}`;
+    if (/Specialized design/i.test(cr)) return `Design studio${SUF}`;
+    if (/Promoters/i.test(cr))       return `Event + promotion company${SUF}`;
+    if (/Performing arts/i.test(cr)) return `Performing arts${SUF}`;
+    if (/Sound recording/i.test(cr)) return `Recording studio${SUF}`;
+    return `Creative studio${SUF}`;
   }
-  return 'Local business on Ventura Blvd.';
+  return `Local business${SUF}`;
 }
 
 async function fetchRowsForVertical(vertical) {
@@ -326,7 +331,7 @@ async function seedVertical(vertical) {
     }
     seenSlug.add(slug);
 
-    const headline = buildHeadline(vertical, r);
+    const headline = buildHeadline(vertical, r, city);
     const description = `${cleanName} is a ${vertical.replace('_',' ')} business on the Ventura Blvd corridor in ${city}. ${headline}`;
     const phone = r.phone ? r.phone.replace(/^\+1[-\s]?/,'').trim() : null;
     const website = r.website || null;

← a8cee0a Tighten falsy-zero check in neighborhood.ejs total display  ·  back to Ventura Claw Leads  ·  /for-businesses: Find-your-business CTA + claim-flow narrati ab2ce52 →