feat: add SEO and sitemap functionality

- Implemented robots.txt to guide search engine indexing.
- Created layout components for the selector and series pages to manage metadata.
- Developed a dynamic sitemap generator based on existing series and frameworks data.
- Centralized SEO information in a new lib/seo.js file to maintain consistency across the site.
- Added SVG logos for branding.
This commit is contained in:
Lucas Rayan committed 2026-08-23 11:16:13 -03:00
1 parent 3de4f2501d
commit 37971056c2
74 files changed
+563 -41337

No files matched your search

+44
View File
@@ -0,0 +1,44 @@
import seriesData from "@/public/series.json";
import frameworksData from "@/public/frameworks.json";
import { SITE } from "@/lib/seo";
/**
* Sitemap gerado a partir dos próprios dados do site.
*
* Antes não existia sitemap nenhum, então o Google só chegava às páginas de
* série e de framework se topasse com um link. Como são geradas a partir de
* JSON, uma série nova entra aqui sozinha.
*/
export default function sitemap() {
const agora = new Date();
const fixas = [
{ caminho: "", prioridade: 1.0, frequencia: "weekly" },
{ caminho: "/series", prioridade: 0.9, frequencia: "weekly" },
{ caminho: "/comparacao", prioridade: 0.9, frequencia: "weekly" },
{ caminho: "/seletor", prioridade: 0.8, frequencia: "monthly" },
{ caminho: "/frameworks", prioridade: 0.8, frequencia: "monthly" },
{ caminho: "/glossario", prioridade: 0.7, frequencia: "monthly" },
{ caminho: "/catalogo", prioridade: 0.6, frequencia: "weekly" },
{ caminho: "/sobre", prioridade: 0.4, frequencia: "yearly" },
];
const series = Object.keys(seriesData).map((chave) => ({
caminho: `/series/${chave}`,
prioridade: 0.9,
frequencia: "monthly",
}));
const frameworks = Object.keys(frameworksData).map((chave) => ({
caminho: `/frameworks/${encodeURIComponent(chave)}`,
prioridade: 0.6,
frequencia: "monthly",
}));
return [...fixas, ...series, ...frameworks].map(({ caminho, prioridade, frequencia }) => ({
url: `${SITE.url}${caminho}`,
lastModified: agora,
changeFrequency: frequencia,
priority: prioridade,
}));
}