← back to Ventura Claw Leads
yolo tick 17: per-vertical SEO landing pages + home FAQ section
8634cfdd9f1845cab497b6d187be8cabd8ca2294 · 2026-05-06 21:04:31 -0700 · Steve Abrams
PER-VERTICAL TITLE / H1 / META
- routes/public.js GET /find: when ?vertical= or ?city= is set (or both),
build a custom <title>, meta description, and H1 specific to that filter.
Eight vertical-keyed landing pages now distinguish themselves to Google
('Food & drink on Ventura Blvd' vs 'Beauty in Sherman Oaks on Ventura
Blvd' vs the generic 'Find a business — Ventura Claw'). Long-tail SEO
for every (vertical × neighborhood) combination — already in sitemap.xml
from tick 4, just now actually distinct content.
- views/public/find.ejs: H1 swapped to <%= customH1 %>, route picks the right
string. Fallback for the unfiltered case = 'Search Ventura Blvd'.
HOME FAQ
- views/public/home.ejs: 5-question FAQ section between featured grid and
category browser, addresses the questions visitors actually have:
· How does this differ from Yelp/Google Maps?
· Why aren't doctors, lawyers, or contractors listed?
· How do leads get to the business?
· How much does it cost — for me, for the business?
· I own a business on Ventura Blvd. How do I claim my listing?
- public/css/public.css: <details>/<summary> styling — brass + rotation
on the indicator, max-width on the answer copy, semantic markup so the
FAQ is searchable + accessible (collapse/expand via keyboard).
Verified live: /find?vertical=food → 'Food & drink on Ventura Blvd' title
+ H1; /find?vertical=beauty&city=Sherman+Oaks → 'Beauty in Sherman Oaks on
Ventura Blvd'. Home / shows FAQ. 46/46 tests still pass.
Files touched
M public/css/public.cssM routes/public.jsM views/public/find.ejsM views/public/home.ejs
Diff
commit 8634cfdd9f1845cab497b6d187be8cabd8ca2294
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed May 6 21:04:31 2026 -0700
yolo tick 17: per-vertical SEO landing pages + home FAQ section
PER-VERTICAL TITLE / H1 / META
- routes/public.js GET /find: when ?vertical= or ?city= is set (or both),
build a custom <title>, meta description, and H1 specific to that filter.
Eight vertical-keyed landing pages now distinguish themselves to Google
('Food & drink on Ventura Blvd' vs 'Beauty in Sherman Oaks on Ventura
Blvd' vs the generic 'Find a business — Ventura Claw'). Long-tail SEO
for every (vertical × neighborhood) combination — already in sitemap.xml
from tick 4, just now actually distinct content.
- views/public/find.ejs: H1 swapped to <%= customH1 %>, route picks the right
string. Fallback for the unfiltered case = 'Search Ventura Blvd'.
HOME FAQ
- views/public/home.ejs: 5-question FAQ section between featured grid and
category browser, addresses the questions visitors actually have:
· How does this differ from Yelp/Google Maps?
· Why aren't doctors, lawyers, or contractors listed?
· How do leads get to the business?
· How much does it cost — for me, for the business?
· I own a business on Ventura Blvd. How do I claim my listing?
- public/css/public.css: <details>/<summary> styling — brass + rotation
on the indicator, max-width on the answer copy, semantic markup so the
FAQ is searchable + accessible (collapse/expand via keyboard).
Verified live: /find?vertical=food → 'Food & drink on Ventura Blvd' title
+ H1; /find?vertical=beauty&city=Sherman+Oaks → 'Beauty in Sherman Oaks on
Ventura Blvd'. Home / shows FAQ. 46/46 tests still pass.
---
public/css/public.css | 15 +++++++++++++++
routes/public.js | 23 ++++++++++++++++++++---
views/public/find.ejs | 2 +-
views/public/home.ejs | 24 ++++++++++++++++++++++++
4 files changed, 60 insertions(+), 4 deletions(-)
diff --git a/public/css/public.css b/public/css/public.css
index ed6c43f..85432a6 100644
--- a/public/css/public.css
+++ b/public/css/public.css
@@ -120,6 +120,21 @@
.long-form ul { font-size: 15px; line-height: 1.65; padding-left: 22px; }
.long-form li { margin: 6px 0; }
+/* FAQ */
+.faq { padding: 32px 28px 56px; max-width: 720px; margin: 0 auto; }
+.faq h2 { margin: 0 0 20px; }
+.faq-item { border-bottom: 1px solid var(--border); padding: 14px 0; }
+.faq-item:last-child { border-bottom: none; }
+.faq-item summary {
+ font-family: var(--serif); font-size: 18px; font-weight: 500;
+ cursor: pointer; padding: 4px 0; list-style: none;
+ display: flex; align-items: baseline; justify-content: space-between; gap: 12px;
+}
+.faq-item summary::-webkit-details-marker { display: none; }
+.faq-item summary::after { content: '+'; color: var(--brass); font-weight: 400; flex-shrink: 0; transition: transform 0.15s; }
+.faq-item[open] summary::after { transform: rotate(45deg); }
+.faq-item p { font-size: 15px; line-height: 1.6; color: var(--fg-muted); margin: 12px 0 0; max-width: 64ch; }
+
/* For-businesses tier cards */
.tiers { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 18px; margin: 32px 0; }
.tier-card { padding: 24px; border: 1px solid var(--border); background: var(--bg); border-radius: 6px; }
diff --git a/routes/public.js b/routes/public.js
index 222fe63..d585212 100644
--- a/routes/public.js
+++ b/routes/public.js
@@ -79,11 +79,28 @@ router.get('/find', async (req, res, next) => {
LIMIT 200
`, params);
+ // Per-vertical custom title + H1 = real SEO value. Each vertical filter is
+ // a distinct landing page in Google's eyes — 8 vertical-specific URLs that
+ // can rank for "[vertical] sherman oaks" / "studio city [vertical]" etc.
+ const verticalLabel = v && BY_KEY[v] ? BY_KEY[v].label : null;
+ const cityLabel = city || null;
+ const titlePartsList = [verticalLabel, cityLabel ? 'in ' + cityLabel : null].filter(Boolean);
+ const customTitle = titlePartsList.length
+ ? `${titlePartsList.join(' ')} on Ventura Blvd · Ventura Claw`
+ : 'Find a business — Ventura Claw';
+ const customMeta = titlePartsList.length
+ ? `${businesses.length} ${verticalLabel ? verticalLabel.toLowerCase() : 'local'} businesses on Ventura Blvd${cityLabel ? ' in ' + cityLabel : ''}. Search by name or message a business directly — Ventura Claw routes leads with no markup.`
+ : `Browse ${businesses.length} local businesses on Ventura Blvd.${v ? ' Filtered by ' + (BY_KEY[v]?.label || v) + '.' : ''}`;
+ const customH1 = titlePartsList.length
+ ? `${titlePartsList.join(' ')} on Ventura Blvd`
+ : 'Search Ventura Blvd';
+
res.render('public/find', {
- title: 'Find a business — Ventura Claw',
- metaDescription: `Browse ${businesses.length} local businesses on Ventura Blvd.${v ? ' Filtered by ' + (BY_KEY[v]?.label || v) + '.' : ''}`,
+ title: customTitle,
+ metaDescription: customMeta,
businesses, q, v, city, verticals: VERTICALS,
- sort: orderClauses[sortKey] ? sortKey : 'featured'
+ sort: orderClauses[sortKey] ? sortKey : 'featured',
+ customH1, verticalLabel
});
} catch (err) { next(err); }
});
diff --git a/views/public/find.ejs b/views/public/find.ejs
index 3698653..d59c3a5 100644
--- a/views/public/find.ejs
+++ b/views/public/find.ejs
@@ -26,7 +26,7 @@
<section class="find-page">
<p class="kicker">Find a business</p>
- <h1 class="display-sm">Search Ventura Blvd</h1>
+ <h1 class="display-sm"><%= customH1 %></h1>
<form action="/find" method="get" class="find-filters" role="search">
<div class="filter-row">
diff --git a/views/public/home.ejs b/views/public/home.ejs
index e4cebd0..e5685dc 100644
--- a/views/public/home.ejs
+++ b/views/public/home.ejs
@@ -59,6 +59,30 @@
</div>
</section>
+<section class="faq">
+ <h2>Common questions</h2>
+ <details class="faq-item">
+ <summary>How does this differ from Yelp or Google Maps?</summary>
+ <p>Ventura Claw is curated, narrow, and local — limited to small businesses on the Ventura Blvd corridor (Sherman Oaks → Woodland Hills). No reviews, no ranking algorithm, no ads on consumer surfaces. Just a clean way to find a business near you and message them directly.</p>
+ </details>
+ <details class="faq-item">
+ <summary>Why aren't doctors, lawyers, or contractors listed?</summary>
+ <p>State-licensed professions (medical, legal, financial, real estate, licensed trades) have their own referral and fee-splitting rules. Ventura Claw intentionally only lists businesses where the work is done by the business itself, not by a regulated individual. This keeps the platform structurally simple and our pricing structurally honest.</p>
+ </details>
+ <details class="faq-item">
+ <summary>How do leads get to the business?</summary>
+ <p>When you fill out a contact form on a business profile, your message routes to the business's email within five minutes via our lead-delivery cron. The reply-to is set to your email, so when they hit reply you get the response directly — Ventura Claw is never on the chain.</p>
+ </details>
+ <details class="faq-item">
+ <summary>How much does it cost — for me, for the business?</summary>
+ <p>For visitors: zero. Always. We never charge consumers anything. Businesses pay a monthly subscription ($0 free / $49 starter / $99 standard / $199 premier) for premium placement. We don't take a cut of any transaction between consumers and businesses.</p>
+ </details>
+ <details class="faq-item">
+ <summary>I own a business on Ventura Blvd. How do I claim my listing?</summary>
+ <p>Find your business in the <a href="/find">directory</a> and click "Claim this listing" on the profile page. We'll email you a confirmation link, you set a password, and you're in your dashboard with a lead inbox, profile editor, and tier picker. Free tier always available.</p>
+ </details>
+</section>
+
<% if (featured && featured.length > 0) { %>
<section class="find-page">
<h2>Featured this week</h2>
← 53d59c1 yolo tick 16: profile activity badge (≥3 threshold) + /find
·
back to Ventura Claw Leads
·
yolo tick 18: per-business cover photo upload (multer + 2MB 65c0b91 →