feat: internal linking hubs for gated servers (indexing recovery slice 4)#101
Merged
Conversation
…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]>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Slice 4 of the mcpfind.org indexing recovery plan (
specs/stage-6-slices/00-recovery-plan.md). Ensures everyisIndexable()-gated server (Slice 2, PR #100) is reachable in ≤3 clicks from the homepage.Deliverables
/categories/[category]) — now link the full gated set per category via newgetIndexableServersByCategory()(paginates past Supabase's 1,000-row cap, unlike the oldgetServersByCategory()'s 200-row raw-active cap). Added/categoriesindex page — a crawlable hub-of-hubs, and fills the previously-dangling${SITE_URL}/categoriesbreadcrumb target thatgenerateCategoryJsonLdalready referenced./serverspagination — confirmed already real SSR<a href="/servers?page=N">vianext/link(PaginationLink), rendered inside thechildrenpassed through the"use client"ServersFilterswrapper, 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.components/RelatedServersForCategory.tsx) — re-pointed from the old unfilteredgetServersByCategory()to the new gatedgetIndexableServersByCategory(), 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 viacurrentSlug.FeaturedServersSectionnow uses newgetIndexableTopServers()instead of the unfilteredgetTopServers(), so the top-6-by-stars homepage linking surface never resurfaces a thin/non-gated page.Exit criterion — ≤3 clicks from
//servers(stars-desc default fronts the gated cluster) → paginated page → server = 2-3 clickscategoryassigned) fall back to the/serversand Featured Servers paths, since they won't appear on any category hub.Hard constraints respected
isIndexable()-gated servers in all new/modified linking surfaces — never resurfaces thin/non-gated pages.isIndexable()semantics or sitemap gating logic from Slice 2.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/categoriesstatic 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, includingRelatedServersForCategory.test.tsx.🤖 Generated with Claude Code