import { BotIcon, FileTextIcon, GaugeIcon, GlobeIcon, HouseIcon, ImageIcon, Link2Icon, ServerIcon, ShieldCheckIcon, SlidersHorizontalIcon, } from 'lucide-react'; import type { IconComponent } from '../navigation/nav-model'; export interface CheckupGroup { key: string; label: string; description: string; icon: IconComponent; } /** The `group` of each check, in the order the page and the menu list them. */ export const CHECKUP_GROUPS: CheckupGroup[] = [ { key: 'site', label: 'Site', description: 'Whether search engines may come in at all: indexing, permalinks, HTTPS, the sitemap.', icon: GlobeIcon, }, { key: 'crawlers', label: 'Crawlers', description: 'Who may read the site: robots.txt as crawlers get it, the search engines and each AI crawler, the sitemap line, a firewall that turns AI crawlers away, llms.txt.', icon: BotIcon, }, { key: 'settings', label: 'Settings', description: 'What the SEO settings still miss: the home description, the knowledge graph, social profiles, Local SEO.', icon: SlidersHorizontalIcon, }, { key: 'content', label: 'Content', description: 'Published pages without a description or keyword, scoring low, thin, duplicated or set to noindex.', icon: FileTextIcon, }, { key: 'links', label: 'Linking', description: 'Orphan pages, broken links and repeated 404s.', icon: Link2Icon, }, { key: 'media', label: 'Media', description: 'Images without alt text.', icon: ImageIcon, }, { key: 'page', label: 'Home page', description: 'The front page as a crawler receives it: title, description, headings, alt text, links, canonical, noindex, Open Graph, schema.', icon: HouseIcon, }, { key: 'performance', label: 'Performance', description: 'Response time, page weight, files loaded, compression, browser and page caches, the object cache, heavy images.', icon: GaugeIcon, }, { key: 'server', label: 'Server', description: 'PHP and its memory and limits, OPcache, the database server and what piled up in it, WP-Cron, updates, disk.', icon: ServerIcon, }, { key: 'security', label: 'Security', description: 'Errors printed into pages, the file editor, XML-RPC, directory listing, the SSL certificate, the "admin" account.', icon: ShieldCheckIcon, }, ]; export const checkupGroup = (key: string): CheckupGroup | undefined => CHECKUP_GROUPS.find(group => group.key === key);