West Valley

Strategy

The local SEO behind this site

28 pages, 115 mapped keywords, and a decision log that includes the pages we planned and then deleted. Written for West Valley Massage in Forest Grove, Oregon — and left readable so you can check the reasoning rather than trust it.

28
pages, each owning one intent
115
keywords mapped to a page
31
unowned terms — the computed backlog
0
invented facts, ratings or drive times

The market

What the competitors were not doing

Before a word was written we read every massage business ranking in Forest Grove and Hillsboro — their own sites, their own published hours and prices. Three gaps came out of it, and all three are things a rival would have to change their business to close.

Nobody else is open when people are free

Every verified Forest Grove competitor is closed at least one day a week, and most close by 6:00 or 6:30 PM. West Valley is open 9 AM to 8 PM, seven days. That single fact answers an entire keyword cluster.

Nobody else takes walk-ins

West Valley takes walk-ins whenever a table is free, and keeps no card on file and no cancellation fee. Market research found that combination is close to unique locally, so it anchors the booking page and all six area pages.

Most publish no prices at all

This menu is 11 prices, one figure each, from $40 — no membership rate, no therapist tier, no fifty-minute hour. Machine-readable published prices are also what AI assistants quote when someone asks an assistant instead of searching.

None of that appears on the public site as a comparison. No competitor is named and no competitor's price is quoted anywhere — every claim is stated as a fact about this studio. It does the same work, ages better, and creates no liability.

Decision log

Five choices worth explaining

01

We deleted a page we had already planned

The original map had a /best-massage-forest-grove-or/ page. Autocomplete research returned nothing at all for "best massage in forest grove", and the page would have been a third URL chasing the same head term as the homepage and the menu page — in a city of 27,000 that will only ever rank one of them. It was cut, and its slot went to four hands massage, which has real demand and which almost nobody within twenty miles offers.

02

Three service pages point at Hillsboro, not Forest Grove

"Deep tissue massage hillsboro oregon" and "foot massage hillsboro oregon" are verified autocomplete suggestions. Their Forest Grove equivalents return nothing. Forest Grove is 27,000 people and cannot support eight distinct commercial search results; Hillsboro is 112,035 and can. The studio is still in Forest Grove — those pages say so plainly and are about serving Hillsboro, which is a 4.7-mile drive on one road.

03

The menu page targets price, not the town

West Valley publishes 11 prices, one figure per session, with no membership and no therapist tiers — and price research showed that transparency is rarer in this market than it should be. That makes "how much does a 60 minute massage cost" both a winnable query and a genuine advantage, and it frees the homepage to own the head term uncontested.

04

The site claims no rating, because none can be verified

A search snippet claimed a 4.9 for this business. It could not be confirmed on any page we fetched, so it appears nowhere on the site and nowhere in the structured data. That is not only honesty — Google's review-snippet policy bars a business from marking up its own rating anyway, so the alternative was a policy violation as well as a fabrication. Review acquisition is a business task; the site competes meanwhile on facts that are checkable.

05

Six near-me pages, six genuinely different pages

Google treats near-identical city pages as doorway pages and demotes the lot. Each of these carries the actual road you drive, a verified distance, a certified population figure, and landmarks true of exactly one town — the Cornelius one-way pair on Baseline and Adair, the farm-grid cut-across to North Plains, the Banks–Vernonia trailhead. A local reader is the harshest auditor these pages will ever get, which is precisely why they are written to survive one.

Keyword bank

115 keywords, 7 clusters, 84 with an owning page

The bank is generated from axes — services crossed with towns crossed with intent modifiers — rather than typed by hand, which is why it does not stop at whatever number someone got bored at. It also means the backlog is discovered rather than remembered: the 31 terms below with no owning page are the content plan for phase two.

Head local

6 terms · 6 owned

The town term itself. One page owns it — the homepage — and nothing else may compete.

  • massage forest grove or
  • massage forest grove oregon
  • massage forest grove near me
  • massage therapist forest grove
  • forest grove massage
  • massage places in forest grove oregon

Near a town

25 terms · 19 owned

Six pages, each carrying facts true of exactly one town. This is what stops them being doorway pages.

  • massage near cornelius or
  • massage cornelius oregon
  • massage therapist cornelius or
  • massage near hillsboro or
  • massage hillsboro oregon
  • massage therapist hillsboro or
  • +19 more

Service + place

40 terms · 15 owned

A named technique attached to a city. Three of ours point at Hillsboro, not Forest Grove — see below.

  • couples massage forest grove or
  • couples massage cornelius or
  • couples massage hillsboro or
  • couples massage near me
  • four hands massage forest grove or
  • four hands massage cornelius or
  • +34 more

Price intent

9 terms · 9 owned

The lane almost nobody local competes in, because almost nobody publishes prices.

  • how much does a 60 minute massage cost
  • how much is a 90 minute massage
  • massage prices forest grove
  • cost of massage oregon
  • massage no membership required
  • cheap massage forest grove
  • +3 more

Hours & walk-ins

9 terms · 9 owned

The cluster this business genuinely wins. Open 9–8 seven days is the answer to every query in it.

  • massage open now
  • massage open late near me
  • massage open sunday
  • walk in massage near me
  • same day massage appointment
  • book massage forest grove or
  • +3 more

Informational

21 terms · 21 owned

Six guides. Cheap authority, and almost no local competition producing content at all.

  • deep tissue vs swedish massage
  • is deep tissue massage supposed to hurt
  • what is swedish massage good for
  • how often should you get a massage
  • how often should you get a massage for stress
  • massage for back pain
  • +15 more

Brand

5 terms · 5 owned

Navigational. Cheap to win, and the last thing to worry about.

  • west valley massage
  • west valley massage forest grove
  • west valley massage phone number
  • west valley massage hours
  • west valley massage prices

Six shown per cluster; the count in each header is the real total. Dashed outlines are terms with no owning page yet. The whole bank lives in src/lib/seo/keyword-bank.ts.

The map

One page, one job

Core (8)

URL The query it owns
/ massage forest grove oregon
/services/ how much does a 60 minute massage cost
/service-areas/ massage near me, Washington County
/guides/ massage guides
/book/ book / walk in / same day massage
/contact/ address, hours, directions
/about/ brand + Oregon licensing
/faq/ what to wear, tipping, first visit

Services (8)

URL The query it owns
/couples-massage-forest-grove-or/ couples massage forest grove oregon
/four-hands-massage-forest-grove-or/ four hands massage
/deep-tissue-massage-hillsboro-or/ deep tissue massage hillsboro oregon
/hot-stone-massage-forest-grove-or/ hot stone massage forest grove
/foot-massage-forest-grove-or/ foot massage forest grove
/foot-massage-hillsboro-or/ foot massage hillsboro oregon
/cupping-therapy-forest-grove-or/ cupping therapy forest grove
/prenatal-massage-forest-grove-or/ prenatal massage forest grove

Areas (6)

URL The query it owns
/massage-near-cornelius-or/ massage cornelius oregon
/massage-near-hillsboro-or/ massage near hillsboro or
/massage-near-aloha-or/ massage aloha oregon
/massage-near-north-plains-or/ massage north plains oregon
/massage-near-banks-or/ massage banks oregon
/massage-open-late-forest-grove-or/ massage open now / open late / open sunday

Guides (6)

URL The query it owns
/guides/what-to-expect-at-your-first-massage/ what to expect at your first massage
/guides/deep-tissue-vs-swedish-massage/ deep tissue vs swedish massage
/guides/how-often-should-you-get-a-massage/ how often should you get a massage
/guides/massage-for-back-pain/ massage for back pain
/guides/massage-for-tension-headaches/ massage for tension headaches
/guides/massage-for-stress-and-anxiety/ massage for stress and anxiety

Under the hood

Why the pages cannot drift apart

One price, one source

Every figure on all 28 pages flows from one TypeScript file. Change the menu and the whole site changes, including the guides. A build-time audit fails the build if a price appears in prose that is not on the menu.

One address, one string

The NAP in the footer, the schema, the map link and llms.txt are the same string from the same object. Local ranking depends on that matching the Google profile exactly, so no page is allowed to retype it.

Static HTML, no JavaScript

Astro emits real HTML at build time. The pages ship zero JavaScript — no framework runtime, no hydration — so the content is in the document for the crawler that does not run scripts.

A schema graph, not snippets

LocalBusiness, Service, FAQPage, BreadcrumbList and Article nodes are generated by helper functions and emitted as one @graph per page, tied to a single business entity by @id.

Written for extraction

Every page opens with a standalone 40–60 word answer containing a real number, and carries at least one table. That is what AI answer engines quote, and quoting is the new ranking.

Audited, not asserted

Four scripts run against the built HTML: title and meta lengths, structured-data validity, price consistency, and a check that no previous client's tracking tags survived. All four have to pass.

Strategy FAQ

About this strategy

Why 28 pages rather than one good one?

Because intent is specific. Someone typing "couples massage forest grove oregon" wants a page about couples massage, in Forest Grove, with the price and the booking link on it. Each of these 28 pages owns one query family out of the 115-term bank. A single general page can rank precisely for none of them.

How is this different from a template site?

A template site fills the same skeleton with a different city name. These pages share a renderer but not their arguments: the near-me pages carry verified routes and landmarks specific to one town, the service pages each admit something inconvenient about the service, and the guides say where the evidence for massage is thin. That is work a template cannot do.

What did the research change?

Five planned pages were rewritten or killed outright, three moved city, one guide changed its target phrase after autocomplete showed the original wording was invented, and three of the fifteen authority links inherited from the brief turned out to be dead and were replaced.

Who builds this?

Wintra. The same structure — verified fact sheet, computed keyword bank, one page per intent, and a schema graph generated from a single data source — is a repeatable playbook for any local service business. See wintrabiz.com.

The same structure works for any local business.

A verified fact sheet, a computed keyword bank, one page per intent, and a schema graph built from a single source. Wintra builds it as a repeatable playbook.

Private rooms Open every day, 9 AM – 8 PM Walk-ins welcome

West Valley Massage
1911 Mountain View Ln #300
Forest Grove, OR 97116
Open daily, 9:00 AM – 8:00 PM · sessions from $40