spb/company-atlas
Public
Python 66.3%
TypeScript 22.7%
JavaScript 8.6%
HTML 1.4%
CSS 0.7%
1import type { MetadataRoute } from 'next';2import { api, safe } from '@/lib/api';3import { SITE_URL } from '@/lib/site';45/**6 * Sharded sitemaps via `generateSitemaps` → served at /sitemaps/sitemap/<id>.xml; the index at /sitemap.xml is `app/sitemap.xml/route.ts`. Shards: `static`, `companies-<page>` (only `indexed = true` companies, per the API),7 * `industries`, `countries`. Built from `GET /sitemap?kind&page`.8 */9export const revalidate = 3600;1011export async function generateSitemaps(): Promise<{ id: string }[]> {12 const ids: { id: string }[] = [{ id: 'static' }, { id: 'industries' }, { id: 'countries' }];13 const first = await safe(api.sitemap('companies', 0));14 const pages = Math.max(1, first?.pages ?? 1);15 for (let p = 0; p < pages; p++) ids.push({ id: `companies-${p}` });16 return ids;17}1819const STATIC = ['/', '/live', '/companies', '/events', '/rankings', '/industry', '/country', '/company/compare', '/about', '/methodology', '/api', '/system', '/bot'];2021export default async function sitemap(props: { id: Promise<string> }): Promise<MetadataRoute.Sitemap> {22 const id = await props.id;23 const now = new Date();24 if (id === 'static') return STATIC.map((p) => ({ url: `${SITE_URL}${p}`, lastModified: now, changeFrequency: p === '/' || p === '/live' ? 'hourly' : 'daily', priority: p === '/' ? 1 : 0.7 }));25 if (id === 'industries') {26 const d = await safe(api.sitemap('industries', 0));27 return (d?.items ?? []).map((i) => ({ url: `${SITE_URL}/industry/${i.slug}`, lastModified: i.updated_at ? new Date(i.updated_at) : now, changeFrequency: 'daily', priority: 0.6 }));28 }29 if (id === 'countries') {30 const d = await safe(api.sitemap('countries', 0));31 return (d?.items ?? []).map((i) => ({ url: `${SITE_URL}/country/${i.slug.toLowerCase()}`, lastModified: i.updated_at ? new Date(i.updated_at) : now, changeFrequency: 'daily', priority: 0.6 }));32 }33 const m = /^companies-(\d+)$/.exec(id);34 if (!m) return [];35 const d = await safe(api.sitemap('companies', Number(m[1])));36 return (d?.items ?? []).map((i) => ({ url: `${SITE_URL}/company/${i.slug}`, lastModified: i.updated_at ? new Date(i.updated_at) : now, changeFrequency: 'daily', priority: 0.8 }));37}38