the engagement · how we deliver
From invisible to inevitable.
A prerender layer that makes you legible to Google and AI in two weeks — then the public site that owns organic and AI demand. Built entirely in front of your product. Your Flutter app, your API, your AWS pipeline: untouched.
How it sits in your stack
🤖 Crawler / AI bot
Gets server-rendered HTML
Built live from your public therapist API — real profiles, schema, meta. The content search engines and ChatGPT can finally read. → rendered
Cloudflare edge layer
Ours. One route. Detects the requester and decides — in front of your app, deploying nothing to your repos.
🧑 Human visitor
Gets your live app
Passed straight through to your Flutter app on CloudFront. Same speed, same UX, zero change. → untouched
Two integration points, total: your read-only therapist API (already public) and a DNS change window. Rollback = delete one route.
Phase 1Visibility
NextTherapist becomes legible to Google and AI search — without touching your app.
≈ 2 weeks from access
- Baseline & instrumentation. Verify Google Search Console + Bing Webmaster, submit the first sitemap, snapshot GA4, and lock the ~20 search + AI queries we'll be graded on. needs: Search Console + GA4 access
- Prerender edge layer. A Cloudflare Worker in front of the app hostname. Crawlers — Googlebot, Bingbot, GPTBot, ClaudeBot, PerplexityBot, facebookexternalhit — get cached, server-rendered HTML built from your public API (real content, not a JS shell). Humans pass straight through to Flutter. Edge-cached with scheduled refresh. needs: DNS at Cloudflare · zero code changes for your team
- Meta & social remediation. Real
<title>, description, OpenGraph and Twitter cards per public route — injected by the same layer.
- Root-domain fix. Stop
nexttherapist.com / www 301-ing crawlers into the app; serve a real, crawlable landing surface (interim now, Next.js in Phase 2).
- Machine-readability. Organization + WebSite JSON-LD,
llms.txt, robots.txt, sitemap — so both Google and AI fetchers can parse and cite you.
Exit criteria — measurable, not vibes: any fetcher receives real HTML · GSC indexed-count climbing off zero · NextTherapist cited in ChatGPT / Google AI answers on the agreed seed queries within 30 days.
Phase 2The public layer
Own organic and AI demand — the inventory-backed pages that rank and convert.
≈ 8 weeks from the Phase 1 gate
- Next.js site at the root. WordPress stays as a headless content backend — your existing content workflow is unchanged.
- SSR therapist profiles at your existing
/therapist/[slug] — Person + ProfilePage + MedicalBusiness schema, incrementally cached ~1–6h (availability changes hourly), public fields only. This is the single read-only integration with your team — and it already exists.
- Then the programmatic grid — deliberately in this order, because templated pages shipped before real inventory trigger Google's scaled-content penalty:
/therapists/[state] — up to 50 state pages, each rendering live therapists
/therapists/[state]/[city] — the 30 cities you actually have inventory in today (SLC, Lehi, Draper, Bountiful, St. George…)
/[specialty] & /[specialty]/[state] — driven by your 16 specialization + 41 modality enums × states with inventory
- every page = live therapist cards + FAQ schema — inventory-backed, never thin
- Conversion & comparison pages — "Psychology Today alternative," "switch from PT in 15 minutes," public pricing — the high-intent queries you're invisible on today.
- Authority content under Stephanie's byline — E-E-A-T for a your-money-your-life category Google scrutinizes hardest — with entity-linked schema and IndexNow.
- Standing measurement — a live GSC/GA4 dashboard plus a monthly AI-citation panel.
The scale it unlocks, from your own taxonomy: 68 profile pages + ~30 city pages + 16 specialties × 41 modalities × states-with-inventory = hundreds of inventory-backed pages that don't exist today.
Phase 3Growth engine
Compounding owned-channel growth.
ongoing retainer
- Content cadence under clinical authorship, expanding the specialty/city grid as inventory grows.
- App-store optimization + paid spend rebalanced against owned-channel data (your GA4 shows 78% paid social at ~2s engagement today — there's margin to reclaim).
- Therapist-referral ops — turning ranked pages into provider sign-ups, the supply side of the marketplace.
Division of labor — the entire inter-team surface
You own
Your product
- The Flutter app
- The API + data
- Booking & payments
- Your AWS pipeline
Nothing changes.
We own
The visibility layer
- The edge prerender layer
- The Next.js public site
- Schema + SEO/AI infra
- Content + measurement
Strategy Solutions.
Touchpoints
Two, total
- Your read-only
/therapists/* API — already public - DNS change windows
That's the whole surface area.
What we need to start — in dependency order
GitHub view ✓→
Search Console + GA4→
DNS (domain-manager)→
confirm prod API host→
WordPress admin→
Google Ads + Meta (read)
Why this is safe to say yes to
Every phase is additive and reversible. The edge layer is a single route — remove it and you're exactly where you started. We never deploy to your repos, never touch booking, and never hold a production credential beyond read-only. The first two weeks prove visibility on queries we agree on up front — you see the result before you commit to Phase 2.