$npx -y skills add Hainrixz/claude-seo-ai --skill seo-vertical-detectClassify a website as ecommerce, local-business, blog-publisher, saas, docs, or generic (multiple may apply), and report detected locales. Used by seo-orchestrator to decide which conditional modules to run and how to reweight the scores.
| 1 | # seo-vertical-detect |
| 2 | |
| 3 | Given the PageSnapshot, classify the site so the orchestrator can route conditional modules. Read `references/routing.md` for the signal table. |
| 4 | |
| 5 | ## Method |
| 6 | Score each vertical from observable signals (not guesses): |
| 7 | - **ecommerce** — `Product`/`Offer` JSON-LD, cart/checkout/add-to-cart routes or buttons, price + currency elements, `og:type=product`. |
| 8 | - **local-business** — `LocalBusiness` JSON-LD, NAP block (name/address/phone), maps embed, opening hours, store-locator. |
| 9 | - **blog-publisher** — `Article`/`BlogPosting` JSON-LD, author bylines/author pages, RSS/Atom `<link>`, dated post archives. |
| 10 | - **saas** — pricing/signup/login routes, `SoftwareApplication` schema, feature/integration/docs pages. |
| 11 | - **docs** — docs/reference routes, sidebar/version nav, dense code blocks, present `llms.txt`. |
| 12 | - **generic** — none dominates. |
| 13 | |
| 14 | A site can match several; return all that clear the threshold, ranked, plus a `primary`. |
| 15 | |
| 16 | **Locales**: detect `hreflang` tags, `<html lang>`, and locale-prefixed routes (`/es/`, `/fr/`). If >1 locale, flag multilingual so M20 (hreflang) activates. |
| 17 | |
| 18 | ## Output |
| 19 | ```json |
| 20 | { "primary": "ecommerce", "also": ["blog-publisher"], "multilingual": true, "locales": ["en","es"], |
| 21 | "signals": { "ecommerce": ["Product JSON-LD on /p/...", "cart route /cart"], "...": [] } } |
| 22 | ``` |
| 23 | Base every classification on a cited signal in `signals` — never label a vertical without evidence. |