import { ExternalLink, Home as HomeIcon } from 'lucide-react' import type { Metadata } from 'next' import Link from 'next/link' import { Suspense } from 'react' import { SearchResults } from '@/components/search/search-results' import { categories } from '@/lib/categories' import { getRoute } from '@/lib/routes' import { generateBaseMetadata } from '@/lib/seo/seo-config' import { tools } from '@/lib/tools' export const dynamic = 'force-dynamic' /** * Generate dynamic metadata for the search page based on search parameters * @param searchParams - Object containing search query parameters * @param searchParams.q - The search query string * @returns Promise resolving to Next.js Metadata object */ export async function generateMetadata({ searchParams }: { searchParams: Promise<{ q?: string }> }): Promise { const { q } = await searchParams const query = q || '' const shouldNoIndex = !!query // Don't index search results to avoid duplicate content const title = query ? `Search Results for "${query}"` : 'Search' const description = query ? `Search results for "${query}" in the llms.txt hub database.` : 'Search for AI-ready websites and tools in the llms.txt hub.' return generateBaseMetadata({ title, description, path: '/search', keywords: ['search', 'find', 'llms.txt', 'AI tools', 'documentation'], noindex: shouldNoIndex }) } export default async function SearchPage({ searchParams }: { searchParams: Promise<{ q?: string }> }) { const { q } = await searchParams const query = q || '' return (
{/* Search filters navigation with proper heading hierarchy */}

Search Filters

Categories

Tools

{query ? `Search Results for "${query}"` : 'Search'}

{query && (

Searching across all websites and tools

)}
} >
) }