Skip to content

feat: internal linking hubs for gated servers (indexing recovery slice 4)#101

Merged
gusmar2017 merged 1 commit into
mainfrom
recovery/slice-4-internal-linking
Jul 17, 2026
Merged

feat: internal linking hubs for gated servers (indexing recovery slice 4)#101
gusmar2017 merged 1 commit into
mainfrom
recovery/slice-4-internal-linking

Conversation

@gusmar2017

Copy link
Copy Markdown
Contributor

Summary

Slice 4 of the mcpfind.org indexing recovery plan (specs/stage-6-slices/00-recovery-plan.md). Ensures every isIndexable()-gated server (Slice 2, PR #100) is reachable in ≤3 clicks from the homepage.

Deliverables

  1. Category hub pages (/categories/[category]) — now link the full gated set per category via new getIndexableServersByCategory() (paginates past Supabase's 1,000-row cap, unlike the old getServersByCategory()'s 200-row raw-active cap). Added /categories index page — a crawlable hub-of-hubs, and fills the previously-dangling ${SITE_URL}/categories breadcrumb target that generateCategoryJsonLd already referenced.
  2. Crawlable /servers pagination — confirmed already real SSR <a href="/servers?page=N"> via next/link (PaginationLink), rendered inside the children passed through the "use client" ServersFilters wrapper, so it stays in the initial SSR payload. No behavior change needed; added a comment documenting why this already satisfies the requirement, plus the stars-desc default sort fronting the gated cluster.
  3. Related-servers block (components/RelatedServersForCategory.tsx) — re-pointed from the old unfiltered getServersByCategory() to the new gated getIndexableServersByCategory(), and wired onto every server detail page (/servers/[slug]) for the first time — previously only used on category hubs and blog posts. Self-excludes the current server via currentSlug.
  4. Homepage top-NFeaturedServersSection now uses new getIndexableTopServers() instead of the unfiltered getTopServers(), so the top-6-by-stars homepage linking surface never resurfaces a thin/non-gated page.

Exit criterion — ≤3 clicks from /

  • Home → footer category link → category hub (full gated list) → server = 2 clicks
  • Home → Featured Servers (gated top-6) = 1 click
  • Home → /servers (stars-desc default fronts the gated cluster) → paginated page → server = 2-3 clicks
  • Category-less gated servers (a server can pass the 3-of-6 quality bar without a category assigned) fall back to the /servers and Featured Servers paths, since they won't appear on any category hub.

Hard constraints respected

  • Only links isIndexable()-gated servers in all new/modified linking surfaces — never resurfaces thin/non-gated pages.
  • Did not touch isIndexable() semantics or sitemap gating logic from Slice 2.
  • Did not touch migrations or mcpfind-ai-summary / feat/registry-auto-ingest.

Verification

  • pnpm --filter @mcpfind/web type-check — clean, no errors.
  • pnpm --filter @mcpfind/web build — succeeds (115 pages, new /categories static route, /categories/[category] prerendered).
  • pnpm --filter @mcpfind/web lint — clean (one pre-existing unrelated warning).
  • pnpm --filter @mcpfind/web test — 206/206 tests pass across 11 files, including RelatedServersForCategory.test.tsx.

🤖 Generated with Claude Code

…e 4)

Ensures every isIndexable() (Slice 2 gated) server is reachable in <=3
clicks from the homepage:

- Category hubs (/categories/[category]) now link the FULL gated set per
  category via new getIndexableServersByCategory(), not the old 200-row
  raw-active-servers query.
- New /categories index page (crawlable hub-of-hubs; fills the
  previously-dangling breadcrumb target referenced by generateCategoryJsonLd).
- RelatedServersForCategory now sources from the gated query and is wired
  onto every server detail page (previously only used on category hubs and
  blog posts) — self-excludes the current server, category-scoped.
- Homepage "Featured Servers" now uses new getIndexableTopServers() instead
  of the unfiltered getTopServers(), so the top-N-by-stars linking surface
  never resurfaces a thin/non-gated page.
- /servers pagination confirmed already SSR-crawlable (real next/link
  hrefs via PaginationLink, passed through the client filter wrapper as
  children) — documented with a comment, no behavior change needed.
- Homepage footer links to /categories in two places for redundant crawl
  paths.

Click-depth: home -> category hub (1) -> server (2); home -> Featured
Servers top-6 (1); home -> /servers paginated, stars-desc default fronts
the gated cluster (2-3). Category-less gated servers fall back to the
/servers and Featured Servers paths.

Co-Authored-By: Claude Fable 5 <[email protected]>
@vercel

vercel Bot commented Jul 13, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
mcp-find-web Ready Ready Preview, Comment Jul 13, 2026 11:18pm

Request Review

@gusmar2017
gusmar2017 merged commit cf84f6e into main Jul 17, 2026
4 checks passed
@gusmar2017
gusmar2017 deleted the recovery/slice-4-internal-linking branch July 17, 2026 15:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant