diff --git a/apps/web/app/categories/[category]/page.tsx b/apps/web/app/categories/[category]/page.tsx index 3cb8884..db5e876 100644 --- a/apps/web/app/categories/[category]/page.tsx +++ b/apps/web/app/categories/[category]/page.tsx @@ -1,4 +1,4 @@ -import { getServersByCategory, getCategoryCount } from '@/lib/queries'; +import { getIndexableServersByCategory, getCategoryCount } from '@/lib/queries'; import { generateCategoryMetadata, generateCategoryJsonLd } from '@/lib/metadata'; import { getQualityStatus } from '@/lib/quality-status'; import { safeJsonLd } from '@/lib/json-ld'; @@ -45,10 +45,14 @@ export default async function CategoryPage({ if (!(CATEGORIES as readonly string[]).includes(category)) notFound(); const label = CATEGORY_LABELS[category as keyof typeof CATEGORY_LABELS] || category; - // Fetch servers (up to 200 for display) and the true total count in parallel. - // The true count feeds JSON-LD numberOfItems; servers feeds the card grid. + // Indexing-recovery Slice 4: this hub must link every isIndexable() (gated) + // server in the category — getIndexableServersByCategory() is the full, + // uncapped, pre-filtered set (not getServersByCategory()'s 200-row raw + // cap), so a large category can never silently drop gated servers from + // its own hub page. categoryCount (JSON-LD numberOfItems) intentionally + // still reflects the true active-server count, not just the gated subset. const [servers, categoryCount] = await Promise.all([ - getServersByCategory(category), + getIndexableServersByCategory(category), getCategoryCount(category), ]); @@ -90,7 +94,7 @@ export default async function CategoryPage({

- {categoryCount} servers in this category + {servers.length} servers in this category