Como criar um Sitemap Dinâmico no Next - Sem Biblioteca
A criação do Sitemap é essencial para facilitar o entendimento dos rastreadores do Google sobre a estrutura de páginas do seu site.

Criando o arquivo Sitemap.xml na estrutura do Next
O lugar ideal para o sitemap é no caminho: www.dominio.com.br/sitemap.xml.
Então, na estrutura do Next, dentro da pasta pages, crie o arquivo sitemap.xml.jsx.
- pages - api - _app.jsx - _document.jsx - index.jsx * - sitemap.xml.jsx
Preparando o arquivo
Nesse arquivo, você pode criar 3 funções.
function generateSiteMap(){
}
function SiteMap(){
}
export async function getServerSideProps({ res }) {
}
export default SiteMap;Repare que já exportamos a função Sitemap como default.
Gerando o XML
Você deve utilizar a função generateSiteMap para retornar o XML, dessa forma:
function generateSiteMap(){
return `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://tavanoblog.com.br/</loc>
</url>
</urlset>
`;
}Vale destacar que aqui, criamos um XML apenas com a página principal do domínio, que no exemplo é do Blog.
Para deixá-lo disponível ao Browser, configuramos a função getServerSideProps:
export async function getServerSideProps({ res }) {
const sitemap = generateSiteMap();
res.setHeader('Content-Type', 'text/xml');
res.write(sitemap);
res.end();
return {
props: {},
}
}Agora, vamos aprender a torná-lo dinâmico.
Como tornar o Sitemap Dinâmico?
Para tornar o Sitemap Dinâmico, você precisa se adaptar a estrutura da sua aplicação.
No exemplo a seguir, vamos incluir os posts do blog no Sitemap.
export async function getServerSideProps({ res }) {
const response = await fetch('/api/posts');
const posts = await response.json();
const sitemap = generateSiteMap(posts);
res.setHeader('Content-Type', 'text/xml');
res.write(sitemap);
res.end();
return {
props: {},
}
}Fizemos uma requisição para receber a lista de posts e passamos para a função que gera o XML.
Agora, vamos adaptar a função generateSiteMap para receber esses posts.
function generateSiteMap(posts){
return `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://tavanoblog.com.br/</loc>
</url>
${posts.map(post => {
return `<url>
<loc>${`https://tavanoblog.com.br/post/${post.id}`}</loc>
</url>`;
})
</urlset>
`;
}Pronto, agora o XML gerado será dinâmico com base nos posts que recebemos da API.
Arquivo Final
function generateSiteMap(posts){
return `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://tavanoblog.com.br/</loc>
</url>
${posts.map(post => {
return `<url>
<loc>${`https://tavanoblog.com.br/post/${post.id}`}</loc>
</url>`;
})
</urlset>
`;
}
function SiteMap(){
}
export async function getServerSideProps({ res }) {
const response = await fetch('/api/posts');
const posts = await response.json();
const sitemap = generateSiteMap(posts);
res.setHeader('Content-Type', 'text/xml');
res.write(sitemap);
res.end();
return {
props: {},
}
}
export default SiteMap;
Como acessar?
Depois do deploy, seu arquivo ficará na rota: www.dominio.com.br/sitemap.xml
Enviando para o Google
Não esqueça de fazer o upload do sitemap no Google Search Console.

Dicas para Trabalhar na Gestão de TI
Algoritmo que resolve Cubo Mágico com Javascript - Parte 2
Algoritmo que resolve Cubo Mágico com Javascript - Parte 1