Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

96
Visualizações
Mapa del sitio de Next.js con parámetros de URL

Estoy tratando de crear un mapa del sitio para el proyecto en el que estoy trabajando y actualmente estoy usando next-sitemap para generar. El problema con este enfoque y prácticamente otra solución que encontré es que el mapa del sitio se genera para las páginas que se crean durante el tiempo de compilación.

Mi caso de uso también requiere agregar parámetros de URL en el mapa del sitio que no generen nuevas páginas durante el tiempo de compilación.

Este es también el enfoque más cercano que creo que debería funcionar, pero tendré que acceder a los datos JSON para cada página dinámica generada durante el tiempo de compilación.

 /pages/sitemap.xml.js const staticPages = fs .readdirSync("pages") .filter((staticPage) => { return ![ "_app.js", "_document.js", "_error.js", "sitemap.xml.js", ].includes(staticPage); }) .map((staticPagePath) => { return `${baseUrl}/${staticPagePath}`; }); const sitemap = `<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> ${staticPages .map((url) => { return ` <url> <loc>${url}</loc> <lastmod>${new Date().toISOString()}</lastmod> <changefreq>monthly</changefreq> <priority>1.0</priority> </url> `; }) .join("")} </urlset> `
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Aparentemente, Next.js guarda todo el JSON de cada página dinámica en .next/server/pages/dynamicPage y podemos usar node fs para leer los archivos y luego analizarlos. Esto resolvió el problema.

Entonces, el enfoque que funcionó para mi caso de uso:

 const staticPages = fs .readdirSync('.next/server/pages/scheme') .filter((file) => path.extname(file).toLowerCase() === '.json'); const schemeFiles = ['https://schemes.openbudgetsindia.org']; staticPages.forEach((staticPagePath) => { const schemeName = staticPagePath.split('.')[0]; schemeFiles.push( `https://schemes.openbudgetsindia.org/scheme/${schemeName}` ); const schemeObj = JSON.parse( fs.readFileSync(`.next/server/pages/scheme/${staticPagePath}`, 'utf8') ); const { indicators } = schemeObj.pageProps.scheme.metadata; indicators.forEach((indicator) => schemeFiles.push( `https://schemes.openbudgetsindia.org/scheme/${schemeName}?indicator=${indicator}` ) ); });

Después de eso, simplemente cree los datos XML :

 const sitemap = `<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> ${staticPages .map((url) => { return ` <url> <loc>${url}</loc> <lastmod>${new Date().toISOString()}</lastmod> <changefreq>monthly</changefreq> <priority>1.0</priority> </url> `; }) .join("")} </urlset> res.setHeader('Content-Type', 'text/xml'); res.write(sitemap); res.end();
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda