import seriesData from "@/public/series.json"; import frameworksData from "@/public/frameworks.json"; import { SITE } from "@/lib/seo"; import { ENABLED_LOCALES, getLocalizedHref } from "@/i18n/links"; const LANG_MAP = { pt: "pt-BR", en: "en", es: "es-419", fr: "fr", de: "de", "zh-CN": "zh-CN", }; /** * Sitemap gerado a partir dos próprios dados do site e dos idiomas ativos. * Inclui URLs apenas para ENABLED_LOCALES, com hreflang/alternates correspondentes. * O livro só entra para a versão em português. */ export default function sitemap() { const dataRevisao = new Date("2026-08-25T00:00:00.000Z"); const fixas = [ { rota: "", prioridade: 1.0, frequencia: "weekly" }, { rota: "/series", prioridade: 0.9, frequencia: "weekly" }, { rota: "/comparacao", prioridade: 0.9, frequencia: "weekly" }, { rota: "/diagnostico", prioridade: 0.9, frequencia: "weekly" }, { rota: "/seletor", prioridade: 0.8, frequencia: "monthly" }, { rota: "/frameworks", prioridade: 0.8, frequencia: "monthly" }, { rota: "/componentes", prioridade: 0.8, frequencia: "weekly" }, { rota: "/livro", prioridade: 0.7, frequencia: "monthly", apenasPt: true }, { rota: "/glossario", prioridade: 0.7, frequencia: "monthly" }, { rota: "/catalogo", prioridade: 0.6, frequencia: "weekly" }, { rota: "/sobre", prioridade: 0.4, frequencia: "yearly" }, ]; const series = Object.keys(seriesData).map((chave) => ({ rota: `/series/${chave}`, prioridade: 0.9, frequencia: "monthly", })); const frameworks = Object.keys(frameworksData).map((chave) => ({ rota: `/frameworks/${encodeURIComponent(chave)}`, prioridade: 0.6, frequencia: "monthly", })); const todasRotas = [...fixas, ...series, ...frameworks]; const entries = []; for (const item of todasRotas) { for (const loc of ENABLED_LOCALES) { if (item.apenasPt && loc !== "pt") continue; const href = getLocalizedHref(`/pt${item.rota}`, loc); const url = `${SITE.url}${href}`; const languages = {}; for (const l of ENABLED_LOCALES) { if (item.apenasPt && l !== "pt") continue; languages[LANG_MAP[l] || l] = `${SITE.url}${getLocalizedHref(`/pt${item.rota}`, l)}`; } entries.push({ url, lastModified: dataRevisao, changeFrequency: item.frequencia, priority: item.prioridade, alternates: { languages, }, }); } } return entries; }