Generate the sitemaps per request, and give every change its own page

Featurekamo-marketing
Shipped
September 11, 2026 at 2:49 PM UTC
Author
Kamo
Commit
de020f8

/sitemap.xml was a metadata file prerendered at build time, in a container that cannot reach KBService or SecurityService, so every deploy shipped a sitemap with no help-center article in it until the first ISR refresh. And /api/sitemap kept a second copy of the page list that had drifted from it. - /sitemap.xml is a sitemap index generated per request. It lists /sitemaps/pages.xml (hand-written pages, collection pages, blog posts and every knowledge-base article, with hreflang) and /sitemaps/changelog/<n>.xml (5,000 changelog entries each). /api/sitemap and /api/sitemap/changelog/<n> are the JSON renderings of the same module, app/lib/sitemap-source.ts. - The hand-written page list lives once, in app/lib/sitemap-pages.ts, and guard:sitemap fails the build when a static route is neither listed nor excluded with a reason. - /changelog is paged on the server: ?page=N, with ?project= and ?type= answered by SecurityService, where the old filters only hid entries among the 50 on screen. Each page is its own canonical; filtered views are noindex, follow. - Every entry has its own page at /changelog/<slug>, linked to the entries either side of it. It is canonical to English where the locale has no translation yet, and an older spelling of its address 308s to the current one. The homepage strip links to these pages. - Stats and filters are read on the server. The /api/changelog/stats route they came from had been serving the build container's total of 0.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing