Commit 1cb8654
authored
feat(registry): generalize component-page SEO (prose + FAQ + related) (#487)
## What
From Search Console: component pages earn impressions but rank page 1-2,
and the pages ranking best are exactly the ~13 AI components with
hand-written copy (`ai-seo.ts`). This generalizes that treatment to the
wider catalog — the striking-distance and vllnt-distinctive pages the
data flags (e.g. **"react callout"** = 22 impressions at pos 79).
## Changes (2 files, +850)
- **New `lib/component-seo.ts`** — general counterpart to `ai-seo.ts`.
Hand-written, **source-verified** (each entry authored after reading the
actual component) SEO for **26 components**: title, meta description, a
usage prose paragraph, **3 FAQs**, and related slugs. Targets: marquee,
data-table, callout, live-cursor, edge-label, canvas-view, anchor-port,
workspace-switcher, viewport-bookmarks, timeline-scrubber, gantt-chart,
quiz, checklist, search-dialog, segmented-control, border-beam,
carousel, toggle, select, command, hover-card, form, sheet,
dropdown-menu, calendar, table.
- **`components/[slug]/page.tsx`** consumes it:
- title/description precedence: `ai-seo` → `component-seo` → registry
(AI wedge unchanged).
- a "What it is & when to use" prose block (mirrors the AI block; links
to the component's family).
- **FAQPage structured data + a visible FAQ** — `searchAppearance` is
currently empty (zero rich results); this is the GEO / AI-overview
citation hook.
- a **Related components** section — internal linking, curated slugs
with a same-family-siblings fallback so *every* component page gains
related links.
## Why (data)
`docs/seo/gsc-improvement-plan.md`. The AI-wedge pages already rank pos
5-7 with this exact treatment; the rest of the catalog had generic
`"{Name} - VLLNT UI"` titles + one thin sentence. This is the proven
lever.
## Validation
- `eslint` clean, `tsc --noEmit` 0 errors (workspace deps installed in
an isolated worktree).
- 26 entries assembled from 6 parallel authoring passes; all slugs +
related verified against `component-metadata.json`.
- Full build + preview via CI; will spot-check a component page (e.g.
`/components/callout`) renders the FAQ + Related sections on the
preview.
## Not included (separate concerns)
- Off-site authority (shadcn registry index, Context7) — not code in
this repo.
- More components can be added incrementally to `component-seo.ts` using
the same shape.
Closes #486
Co-authored-by: bntvllnt <bntvllnt@users.noreply.github.com>1 parent ec8c0bb commit 1cb8654
2 files changed
Lines changed: 850 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| 23 | + | |
23 | 24 | | |
24 | 25 | | |
| 26 | + | |
25 | 27 | | |
26 | 28 | | |
27 | 29 | | |
| |||
91 | 93 | | |
92 | 94 | | |
93 | 95 | | |
| 96 | + | |
94 | 97 | | |
95 | 98 | | |
96 | | - | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
97 | 103 | | |
98 | 104 | | |
99 | 105 | | |
| |||
113 | 119 | | |
114 | 120 | | |
115 | 121 | | |
116 | | - | |
| 122 | + | |
117 | 123 | | |
118 | 124 | | |
119 | 125 | | |
| |||
132 | 138 | | |
133 | 139 | | |
134 | 140 | | |
| 141 | + | |
135 | 142 | | |
136 | 143 | | |
137 | | - | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
138 | 149 | | |
139 | 150 | | |
140 | 151 | | |
| |||
195 | 206 | | |
196 | 207 | | |
197 | 208 | | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
198 | 226 | | |
199 | 227 | | |
200 | 228 | | |
| |||
203 | 231 | | |
204 | 232 | | |
205 | 233 | | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
206 | 238 | | |
207 | 239 | | |
208 | 240 | | |
| |||
224 | 256 | | |
225 | 257 | | |
226 | 258 | | |
| 259 | + | |
227 | 260 | | |
228 | 261 | | |
229 | 262 | | |
| |||
299 | 332 | | |
300 | 333 | | |
301 | 334 | | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
302 | 359 | | |
303 | 360 | | |
304 | 361 | | |
| |||
393 | 450 | | |
394 | 451 | | |
395 | 452 | | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
396 | 495 | | |
397 | 496 | | |
398 | 497 | | |
| |||
0 commit comments