SPB Git forge
28commits 1branches 0releases
7.7 MBsize
maindefault branch
10 days agolast push
Python 66.3% TypeScript 22.7% JavaScript 8.6% HTML 1.4% CSS 0.7%
2.2 KB · 38 lines typescript
Raw Blame History
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