From 9f455bc9bf77052f8a2debb700b0639fdf0fc9f7 Mon Sep 17 00:00:00 2001 From: porbot Date: Tue, 15 Sep 2026 17:59:39 +0000 Subject: [PATCH] Replace guessed genre matrices with sourced Core 3 field map Salon/bakery packs are application notes only; attributes blocked until live pull. --- docs/product/genre-packs.md | 7 ++- docs/product/genre-packs/bakery.md | 63 ++++++++------------- docs/product/genre-packs/core3-field-map.md | 30 ++++++++++ docs/product/genre-packs/salon.md | 60 +++++++------------- docs/strategy/BUSINESS_PLAN.md | 1 + 5 files changed, 81 insertions(+), 80 deletions(-) create mode 100644 docs/product/genre-packs/core3-field-map.md diff --git a/docs/product/genre-packs.md b/docs/product/genre-packs.md index 9980125..95682da 100644 --- a/docs/product/genre-packs.md +++ b/docs/product/genre-packs.md @@ -12,10 +12,11 @@ **Core 3 coverage rule:** **GBP** is richest; Apple Business Connect mid; Bing Places thinnest. Pack actions: set on GBP; mirror on Apple/Bing where the field exists. -## Deep example packs (planning-rev2) +## Sourced Core 3 map + deep examples (planning-rev2) -- [Salon](./genre-packs/salon.md) — parent/child × Core 3 field matrix w/ example entries -- [Bakery](./genre-packs/bakery.md) — same shape +- [Core 3 sourced field map](./genre-packs/core3-field-map.md) — **SoT for fields** (no guessing) +- [Salon](./genre-packs/salon.md) — genre application notes (illustrative only) +- [Bakery](./genre-packs/bakery.md) — same ## Earlier planned packs (from main / prior docs) diff --git a/docs/product/genre-packs/bakery.md b/docs/product/genre-packs/bakery.md index fa3e313..f0d1e11 100644 --- a/docs/product/genre-packs/bakery.md +++ b/docs/product/genre-packs/bakery.md @@ -1,56 +1,41 @@ # Genre pack — Bakery (deep example) **Status:** working shell — **not locked** -**Vertical:** local retail / food — products & known-for more than “book a slot” -**Assumes Layer A** (Discovery foundation) already ranked or clean. +**Vertical:** local retail / food -**Evidence honesty (2026-09-15):** first matrices were SME/local-SEO practice + invented example businesses, **not** a live Core 3 schema dump. After Desk’s source check: Layer A fields are real across Core 3; dine-in/takeout/delivery and rich amenities are **GBP-strong** (Apple Good to Know partial; Bing thinner). “Homemade muffins” is **not** a Core-3 checkbox — description/photos/products + known-for. +**Schema SoT:** [core3-field-map.md](./core3-field-map.md) (sourced). This file is **genre application notes + illustrative examples only** — not a guessed schema. -**Core 3 rule:** set on **GBP** first; mirror on Apple / Bing where the field exists. -**Confidence:** `sourced` = field family confirmed in official docs; `placeholder example` = illustrative cell value only. +**Assumes Layer A** from the sourced Core 3 map is ranked or clean first. --- -## Field matrix — parent / child × Core 3 +## How bakery uses the sourced Core 3 map -Example business (placeholder): **Whidbey Muffin Co.** - -| Parent | Child | GBP | Apple Business Connect | Bing Places | Confidence | Why it matters | -| :--- | :--- | :--- | :--- | :--- | :--- | :--- | -| Identity | Name | Whidbey Muffin Co. | Whidbey Muffin Co. | Whidbey Muffin Co. | sourced field; placeholder example | NAP — foundation for all discovery | -| Identity | Address | 88 Harbor Rd, Coupeville, WA 98239 | same | same | sourced field; placeholder example | Place match; wrong pin = wrong local answers | -| Identity | Phone | (360) 555-0199 | same | same | sourced field; placeholder example | Reachability + validation path | -| Identity | Website | https://whidbeymuffins.example | same | same | sourced field; placeholder example | Menu/order proof when platform commerce fields are thin | -| Category | Primary | Bakery | Bakery | Bakery | sourced field; placeholder example | Drives attribute/service shapes and assistant expectations | -| Category | Secondary | Coffee shop *(if true)* | Cafe / Coffee *(if true)* | Cafe *(if true)* | sourced field; placeholder example | Only if true — wrong secondary confuses “what is this place?” | -| Hours | Weekly | Tue–Sun 7–3; Mon closed | same | same | sourced field; placeholder example | Bakeries live/die on early/weekend hours accuracy | -| Hours | Special *(rec)* | Thanksgiving: closed | same | same | sourced field family; placeholder example | Stops “open now” lies on holidays | -| Description | Short bio | “Sourdough & homemade muffins on Whidbey.” | same idea ≤ limit | same | sourced field; placeholder example | Primary carrier for known-for when no product checkbox exists | -| Service options | Dine-in / takeout / delivery | Dine-in: Yes; Takeout: Yes; Delivery: No | partial amenity / Good to Know | partial | **GBP-strong**; Apple/Bing partial | Matches how people ask (“can I get takeout?”) | -| Links | Menu / order URL | https://…/menu | URL / website | URL / website | sourced where URL/Actions exist; placeholder example | Bridges recommend → buy without full marketplace integration | -| Attributes | Amenities *(rec)* | Outdoor seating; Wi‑Fi; Kid-friendly *(verify per GBP category)* | Outdoor / Wi‑Fi if Good to Know offers | limited | not all universal — verify | Real ask filters; never invent | -| Products / proof | Known-for *(rec)* | Photos: muffins, sourdough *(not a checkbox)* | product/storefront photos | if supported | capability sourced; “muffin attribute” **not** a Core-3 field | Proof for AI readiness “would recommend for muffins” | +| Sourced child | Bakery note | Core 3 parity | +| :--- | :--- | :--- | +| Name / Address / Phone / Website | Must match (illustrative: Whidbey Muffin Co.) | Full | +| Primary + additional categories | Bakery; Coffee shop / Cafe **only if true** | Full | +| Regular / special hours | Early open + weekend accuracy; holiday closed | Full | +| Description / profile | Primary home for known-for (“sourdough & muffins”) — **not** a fake checkbox | GBP `profile`; Bing `Description`; Apple place-card copy | +| Service area | Storefront vs delivery-only must match reality | GBP `serviceArea`; Bing `ServiceAreas` / `HideAddress`; Apple SAB confirm in UI | +| Services list | Usually **not** the salon-shaped `serviceItems` story — prefer description + menu/order links + photos | Don’t invent Apple/Bing service arrays | +| Links / Actions | Menu / order URLs when they sell online | GBP actions/attrs if listed; Apple Actions; Bing `MenuURL` / `OrderURL` / related *(category-dependent)* | +| Attributes | dine-in / takeout / wifi / outdoor / etc. — **only after live attribute lists** | GBP `attributes.list`; Apple Good to Know; Bing `Attributes[]` | +| Photos | Product proof for known-for | GBP / Apple / Bing photos | --- -## Must vs recommended (summary) +## Illustrative ranked punch list (3–7) -**Must (beyond Layer A):** category; known-for in description; hours; service options; menu/order URL if online sales. -**High-value recommended:** verified amenities; product photos; special hours when seasonal. +1. Align NAP + website on Core 3 +2. Set Bakery (+ Cafe only if true) +3. Lock weekly + special hours +4. Known-for sentence in description everywhere it exists +5. Menu/order URL via Actions / URL fields + website +6. Product photos on GBP/Apple --- -## Example ranked punch list (3–7) +## Blocked until evidence pull -1. Set category Bakery (+ Coffee shop if true) on Core 3 -2. Put “sourdough & muffins” in short description everywhere -3. Confirm weekend / early-open hours on Core 3 -4. Set dine-in + takeout on GBP; mirror where Apple/Bing allow -5. Add menu or order URL on GBP + website -6. Add 5 product photos on GBP - ---- - -## Out of scope / next evidence pass - -Per-category GBP attributes for Bakery (US); Apple Good to Know food amenities; Bing depth. MCP/endpoints out of scope here. +Amenity/attribute checkbox rows (takeout, outdoor seating, …) until GBP `attributes.list` for bakery `gcid` (US) + Apple Good to Know enums. diff --git a/docs/product/genre-packs/core3-field-map.md b/docs/product/genre-packs/core3-field-map.md new file mode 100644 index 0000000..d66de65 --- /dev/null +++ b/docs/product/genre-packs/core3-field-map.md @@ -0,0 +1,30 @@ +# Core 3 — sourced field map (Discovery foundation) + +**Status:** working — **sourced**, not guessed +**Rule:** never invent platform fields. Attributes for a genre = only after live `attributes.list` (GBP) / Good to Know enums (Apple) for that category + country. + +**Sources cited by SEO & AEO Desk (2026-09-15):** +- GBP Location API + Attributes API +- Apple Business Connect “Add a location” + Good to Know (support docs) +- Bing Places API documentation + +Example values in genre packs are **illustrative only** — they are not schema claims. + +| Parent | Child (API / UI name) | GBP | Apple Business Connect | Bing Places | Why it matters | +| :--- | :--- | :--- | :--- | :--- | :--- | +| Identity | Name | `title` | Display name | `BusinessName` | NAP consistency — assistants + Maps match on this | +| Identity | Address | `storefrontAddress` | Address + map pin | `AddressLine*` / City / State / Zip / Country | Same | +| Identity | Phone | `phoneNumbers` | Phone | `PhoneNumber` | Same | +| Identity | Website | `websiteUri` | Website (or social URL allowed) | `MainWebSite` | Reachable + verification path | +| Category | Primary | `categories` (primary) | Primary category (exactly one) | `PrimaryCategory` | Routes discovery queries | +| Category | Additional | additional categories | up to 19 optional | `BusinessCategories` (up to 10) | Secondary intent | +| Hours | Regular | `regularHours` | Normal hours | `OperatingHours` / `Open24Hours` | “Are you open?” — high AI failure mode | +| Hours | Special / holiday | `specialHours` | Special hours | `HolidayHours` | Same for peak days | +| Description | Profile / description | `profile` | *(not in add-location core; place card copy elsewhere)* | `Description` (rich attrs / listing) | “What you do” in plain language | +| Service area | Mode / areas | `serviceArea` | *(storefront vs SAB — confirm in Apple UI)* | `ServiceAreas` + `HideAddress` | Stops wrong “visit us” vs mobile | +| Services | Service list | `serviceItems` | **not on Location core** — use categories / Good to Know / Actions | **no generic services array** — category-specific | Salon P1 on GBP; don’t claim Apple/Bing parity | +| Attributes | Amenities / access | **dynamic** via `attributes.list` | **Good to Know** (amenities list) | `Attributes[]` rich attrs (category-dependent) + hotel-only `Amenities` | Genre-gated; **must pull live list** — never hardcode full schema | +| Links | Appointment / menu / order | Place Actions + attrs like `url_menu` *(if listed)* | **Actions** | `url_appointment`, `MenuURL`, `OrderURL`, `url_order_ahead` *(category-dependent)* | Conversion paths | +| Media | Photos | *(Photos API / UI — not Location JSON)* | Photos | `Photos[]` | Proof for known-for | + +**Hard rule:** do not add salon/bakery attribute *rows* until GBP `attributes.list` for that `gcid` (US) and Apple Good to Know enums are pulled. diff --git a/docs/product/genre-packs/salon.md b/docs/product/genre-packs/salon.md index de268cd..7170128 100644 --- a/docs/product/genre-packs/salon.md +++ b/docs/product/genre-packs/salon.md @@ -2,55 +2,39 @@ **Status:** working shell — **not locked** **Vertical:** appointment-based beauty / hair -**Assumes Layer A** (Discovery foundation) already ranked or clean. -**Evidence honesty (2026-09-15):** first matrices were SME/local-SEO practice + invented example businesses, **not** a live Core 3 schema dump. After Desk’s source check: Layer A identity/hours/category/website fields are real across Core 3; services are **GBP-strong**; rich attributes are **GBP + Apple “Good to Know”**, Bing thinner. Category-specific checkboxes (e.g. women-led) stay **unverified universal** until per-category attribute lists are pulled. +**Schema SoT:** [core3-field-map.md](./core3-field-map.md) (sourced). This file is **genre application notes + illustrative examples only** — not a guessed schema. -**Core 3 rule:** set on **GBP** first; mirror on Apple Business Connect / Bing Places where the field exists. -**Confidence:** `sourced` = field family confirmed in official product/API docs; `placeholder example` = illustrative cell value only. +**Assumes Layer A** from the sourced Core 3 map is ranked or clean first. --- -## Field matrix — parent / child × Core 3 +## How salon uses the sourced Core 3 map -Example business (placeholder): **Maria's Hair Studio**. - -| Parent | Child | GBP | Apple Business Connect | Bing Places | Confidence | Why it matters | -| :--- | :--- | :--- | :--- | :--- | :--- | :--- | -| Identity | Name | Maria's Hair Studio | Maria's Hair Studio | Maria's Hair Studio | sourced field; placeholder example | NAP identity — mismatches break discovery on all Core 3 | -| Identity | Address | 12 Main St, Cameron Park, CA 95682 | same | same | sourced field; placeholder example | Same — address is primary match key with name/phone | -| Identity | Phone | (530) 555-0142 | same | same | sourced field; placeholder example | Reachability + NAP consistency; OTP/validation often uses it | -| Identity | Website | https://mariashair.example | same | same | sourced field; placeholder example | Proof + deep links; booking/menu often live here when platform fields are thin | -| Category | Primary | Hair salon | Hair Salon | Hair Salon | sourced field; placeholder example | Controls which attribute/services shapes apply; wrong category = wrong recommendations | -| Category | Secondary | Nail salon; Beauty salon | Nail Salon (if offered) | Beauty Salon (if offered) | sourced field (limits differ); placeholder example | Helps “knows what you do” without stuffing unrelated primaries | -| Hours | Weekly | Mon–Sat 9–6; Sun closed | same | same | sourced field; placeholder example | Assistants and Maps refuse bad open/closed answers — foundation trust | -| Description | Short bio | “Cameron Park salon — cuts, color, curly specialists.” | same idea ≤ platform limit | same | sourced field; placeholder example | Carries known-for when attributes/services are thin on Apple/Bing | -| Services | Service items | Haircut; Color; Balayage; Blowout | *(thin)* fold into description | *(thin)* fold into description | **GBP-strong** (`serviceItems`); Apple/Bing weaker | Turns “hair salon” into actionable offer list — big jump on “knows what you do” | -| Links | Booking URL | https://book.squareup.com/… | Appointment / website URL | Website / URL field | sourced where Actions/URL fields exist; placeholder example | Converts recommend → book; often GBP + website first | -| Attributes | Accessibility | Wheelchair accessible entrance: Yes | Good to Know / accessibility if offered | if field exists | sourced family; availability varies | High-intent filter; only set if true | -| Attributes | Amenities *(rec)* | Wi‑Fi; Women-led *(GBP category-specific — verify)* | Good to Know if offered | limited | **not verified universal** — confirm per category/country | Helps filters/asks; fake checkboxes hurt trust — prefer description if unsure | -| Media | Photos *(rec)* | 5–10 real work photos | storefront + interior | if supported | sourced capability; placeholder guidance | Proof for specialties (bridal, curly) when checkboxes don’t exist | +| Sourced child | Salon note | Core 3 parity | +| :--- | :--- | :--- | +| Name / Address / Phone / Website | Must match everywhere (illustrative: Maria's Hair Studio) | Full | +| Primary + additional categories | e.g. Hair salon + Nail salon / Beauty salon *(illustrative labels — use each platform’s category picker)* | Full | +| Regular / special hours | Same | Full | +| Description / profile | Carry specialties (“curly specialists”, bridal) here when Apple/Bing lack services | GBP `profile`; Bing `Description`; Apple place-card copy (not add-location core) | +| `serviceItems` (GBP) | **Salon P1** — Haircut, Color, Balayage, Blowout *(illustrative)* | **GBP only** — no Apple/Bing services array on Location core | +| Links / Actions | Booking URL (Square/Mindbody/etc.) | GBP Place Actions + website; Apple **Actions**; Bing appointment/URL fields if category allows | +| Attributes | **Do not hardcode** (women-led, wifi, wheelchair, …) until `attributes.list` for salon `gcid` + US | GBP dynamic; Apple Good to Know; Bing category-dependent | +| Photos | Real work photos *(illustrative guidance)* | GBP Photos UI/API; Apple Photos; Bing `Photos[]` | --- -## Must vs recommended (summary) +## Illustrative ranked punch list (3–7) -**Must (beyond Layer A):** primary + secondaries; services list (GBP); booking URL; accessibility where true. -**High-value recommended:** verified amenities; known-for in description/photos/services; real work photos. +1. Align NAP + website on Core 3 +2. Set primary category Hair salon (+ real secondaries) +3. Add GBP `serviceItems` (top services) +4. Add booking Action / URL on GBP + Apple Actions + website +5. Put known-for specialties in description +6. Photos on GBP/Apple --- -## Example ranked punch list (3–7) +## Blocked until evidence pull -1. Fix primary category (Hair salon) on Core 3 -2. Add booking link on GBP + website -3. List top 4 services on GBP -4. Add “curly specialists” to description (known-for) -5. Upload 5 real work photos on GBP -6. Mirror hours + booking URL on Apple Business Connect - ---- - -## Out of scope / next evidence pass - -Live pull of GBP `attributes.list` for Hair salon (US); Apple Good to Know enum; Bing amenity matrix. MCP/endpoints out of scope here. +Any amenity/attribute checkbox rows for salon. Next: GBP `attributes.list` for hair salon (US) + Apple Good to Know enums. diff --git a/docs/strategy/BUSINESS_PLAN.md b/docs/strategy/BUSINESS_PLAN.md index d7b568d..5de0b7e 100644 --- a/docs/strategy/BUSINESS_PLAN.md +++ b/docs/strategy/BUSINESS_PLAN.md @@ -183,6 +183,7 @@ If something here conflicts with `CANONICAL_STRATEGY.md`, resolve on purpose in | 2026-09-15 | Essence: Layer A/B/C surfacing; deep pack shells for salon + bakery under docs/product/genre-packs/ | | 2026-09-15 | Salon + bakery packs: parent/child × Core 3 example field matrices checked in | | 2026-09-15 | Pack matrices: added Why it matters + sourced vs placeholder honesty after Desk Core 3 source check | +| 2026-09-15 | Replaced guessed genre matrices with sourced Core 3 field map (core3-field-map.md); salon/bakery = application notes only | ---