The visual sitemap — /sitemap and fuzzy search
The visual sitemap at /sitemap is a human-friendly index of every public page on ImtehanHub. Cards group pages by category (Subjects, Blog, Knowledge base, About, Pricing, Community, etc.) with a fuzzy search bar at the top. Distinct from /sitemap.xml, which is the machine-readable feed for search-engine crawlers.
TL;DR —
/sitemapfor humans (cards + search)./sitemap.xmlfor Googlebot, GPTBot, ClaudeBot, PerplexityBot, etc. Both are emitted by the build pipeline.
What the page shows
The page header lists prominent links to the machine-readable counterparts:
/sitemap.xml— full URL list withlastmodtimestamps for crawlers./feed.xml— RSS 2.0 feed of recent blog and knowledge-base content.
Below the header, cards grouped into categories:
| Category | Pages |
|---|---|
| Public | Home, About, Pricing, Contact, Privacy, Terms, Permissions |
| Discovery | Subjects, Blog, Knowledge base, Community |
| Account | Dashboard, Profile, Theme, Billing, Bookmarks, Leaderboard, History |
| Community | Contribute, My submissions, Achievements, Verification |
| Legal | Privacy, Terms, Cookie policy, Account deletion |
Each card shows the page title (English + Urdu), a one-line description, a category badge, and a clickable SVG icon. Click anywhere on the card to navigate.
Fuzzy search
The search bar at the top filters cards in real time. The match is substring-based after light normalisation (lowercase, whitespace, accent stripping). Match hits the page title, description, and tags.
Performance: with ~50-100 cards, the filter runs in under 2 ms per keystroke — instant feel.
This is the same fuzzy-search pattern used on the Knowledge base for entry search. Pre-computed searchBlob per item, substring match per keystroke.
Why a visual sitemap
Three reasons:
- For students who explore. Some students learn the platform by clicking around. A visual sitemap lets them see every surface at a glance.
- For sharing. Teachers point students to specific pages. A copyable URL on each card makes that easy.
- For accessibility. Screen readers traverse the sitemap as a list of links — easier than the navigation menu for many assistive-tech users.
How it relates to the XML sitemap
Both are auto-generated by the build pipeline. They differ in audience:
/sitemap | /sitemap.xml | |
|---|---|---|
| Audience | Humans | Crawlers (Google, Bing, GPTBot, ClaudeBot, PerplexityBot) |
| Format | React-rendered + prerendered HTML | XML following sitemap.org schema |
| Content | Page cards + descriptions + categories | URLs + <lastmod> + <changefreq> + <priority> |
| Includes | Static + dynamic public pages | Static + dynamic public pages, including all 583 chapter pages and 61 subject pages |
| Updated | On every deploy | On every deploy |
The XML sitemap is referenced from robots.txt so crawlers can find it without us submitting manually. Search Console submission is still recommended for faster discovery.
What's NOT on the sitemap
Pages excluded from /sitemap:
- Authenticated app pages that have no public anchor (e.g. specific test session URLs like
/app/test/session/:sessionId). These are tied to your account. - Admin pages at
/admin/*. - Generated dynamic deep links (e.g. specific bookmark IDs).
These pages are also excluded from /sitemap.xml so crawlers do not waste effort.
Bilingual
The sitemap page respects your language toggle. Urdu mode renders card titles and descriptions in Urdu (using urduName / urduDescription fields), and the page direction flips to RTL.
Adding pages to the sitemap
When the team ships a new public route, the route must also be added to:
- The
SITEMAP_ENTRIESarray in the React component (powers the/sitemappage). - The
postbuild-seo.mjsPUBLIC_PAGES list (powers/sitemap.xml). - The blog/knowledge-base auto-generation logic if dynamic.
Keeping these in sync is part of the project's freshness rule (root CLAUDE.md tracks Sitemap/Feed Last Updated).
Common questions
Can I bookmark the sitemap page?
It is just a regular page — bookmark it in your browser. The platform's per-question bookmarks (Bookmarks) are for question content, not navigation.
Why does my new submission's page not show up on the sitemap?
Your submission page is at /community/submission/:id — this is not on the sitemap because submission pages are too dynamic to enumerate. They are still indexed via the search bar and the community feed. They appear in /sitemap.xml for crawlers.
What if a page on the sitemap returns 404?
That should never happen — the sitemap is auto-generated from the live route table. If you find a broken link, please report via the Contact page.
Is the sitemap mobile-friendly?
Yes — cards reflow to a single column on narrow viewports. The search bar stays sticky at the top.
Next
- Feed — the RSS counterpart.
- Search and filters — search across the whole site.
- Knowledge base — same fuzzy-search pattern for content.