diff --git a/app/sitemap.ts b/app/sitemap.ts index b1e4a2f9..fc337949 100644 --- a/app/sitemap.ts +++ b/app/sitemap.ts @@ -28,56 +28,62 @@ export default async function sitemap(): Promise { }); } - for (const year of years) { - urls.push({ - url: `${baseUrl}/${year}`, - lastModified: new Date(), - changeFrequency: "daily", - priority: 0.9, - }); + const yearUrls = await Promise.all( + years.map(async (year) => { + const urls: MetadataRoute.Sitemap = []; - const yearPages = ["speakers", "talks", "schedule", "job-offers", "cfp", "diversity", "sponsorship", "travel"]; - for (const page of yearPages) { urls.push({ - url: `${baseUrl}/${year}/${page}`, + url: `${baseUrl}/${year}`, lastModified: new Date(), - changeFrequency: "weekly", - priority: 0.8, + changeFrequency: "daily", + priority: 0.9, }); - } - const speakers = await getSpeakers(year); - for (const speaker of speakers) { - urls.push({ - url: `${baseUrl}/${year}/speakers/${speaker.id}`, - lastModified: new Date(), - changeFrequency: "weekly", - priority: 0.7, - }); - } + const yearPages = ["speakers", "talks", "schedule", "job-offers", "cfp", "diversity", "sponsorship", "travel"]; + for (const page of yearPages) { + urls.push({ + url: `${baseUrl}/${year}/${page}`, + lastModified: new Date(), + changeFrequency: "weekly", + priority: 0.8, + }); + } + + const [speakers, sessionGroups] = await Promise.all([getSpeakers(year).catch(() => []), getTalks(year).catch(() => [])]); - const sessionGroups = await getTalks(year); - for (const group of sessionGroups) { - for (const talk of group.sessions) { + for (const speaker of speakers) { urls.push({ - url: `${baseUrl}/${year}/talks/${talk.id}`, + url: `${baseUrl}/${year}/speakers/${speaker.id}`, lastModified: new Date(), changeFrequency: "weekly", priority: 0.7, }); } - } - const companies = getJobOffersByYear(year); - for (const company of companies) { - urls.push({ - url: `${baseUrl}/${year}/job-offers/${slugify(company.name)}`, - lastModified: new Date(), - changeFrequency: "monthly", - priority: 0.5, - }); - } - } + for (const group of sessionGroups) { + for (const talk of group.sessions) { + urls.push({ + url: `${baseUrl}/${year}/talks/${talk.id}`, + lastModified: new Date(), + changeFrequency: "weekly", + priority: 0.7, + }); + } + } + + const companies = getJobOffersByYear(year); + for (const company of companies) { + urls.push({ + url: `${baseUrl}/${year}/job-offers/${slugify(company.name)}`, + lastModified: new Date(), + changeFrequency: "monthly", + priority: 0.5, + }); + } + + return urls; + }) + ); - return urls; + return urls.concat(...yearUrls); }