yarn add next-sitemap next-sitemap requer um arquivo de configuração básico ( next-sitemap.config.js ) sob sua raiz do projeto
✅
next-sitemapcarregará variáveis de ambiente de arquivos.envpor padrão.
/** @type {import('next-sitemap').IConfig} */
module . exports = {
siteUrl : process . env . SITE_URL || 'https://example.com' ,
generateRobotsTxt : true , // (optional)
// ...other options
}Adicione o Next-Sitemap como seu script postbuild
{
"build" : " next build " ,
"postbuild" : " next-sitemap "
} Você também pode usar um arquivo de configuração personalizado em vez do next-sitemap.config.js . Basta aprovar --config <your-config-file>.js para construir comando (exemplo: arquivo de configamento personalizado)
{
"build" : " next build " ,
"postbuild" : " next-sitemap --config awesome.config.js "
} Ao usar o PNPM, você precisa criar um arquivo .npmrc na raiz do seu projeto, se desejar usar uma etapa pós -construção:
//.npmrc
enable-pre-post-scripts=true
No next-sitemap v2.x em diante, sitemap.xml será o SITEMAP INDEX. Ele conterá URLs de todos os outros pontos de extremidade do sitemap gerado.
A geração de mapa do sitemap de índice pode ser desligada ao Configurar generateIndexSitemap: false no arquivo de configuração do próximo sitemap. (Isso é útil para sites pequenos/hobby que não requerem um mapa de sites de índice) (Exemplo: sem-sitemaps)
Defina a propriedade sitemapSize em next-sitemap.config.js para dividir um grande sitemap em vários arquivos.
/** @type {import('next-sitemap').IConfig} */
module . exports = {
siteUrl : 'https://example.com' ,
generateRobotsTxt : true ,
sitemapSize : 7000 ,
} Acima está a configuração mínima para dividir um grande sitemap. Quando o número de URLs em um sitemap é superior a 7000, next-sitemap criará os arquivos Sitemap (por exemplo, sitemap-0.xml, sitemap-1.xml) e index (por exemplo, sitemap.xml).
| propriedade | descrição | tipo |
|---|---|---|
| siteurl | URL base do seu site | corda |
| saída (opcional) | Modos de saída do próximo.js. Verifique a documentação. | standalone , export |
| Changefreq (opcional) | Alterar frequência. Padrão daily | corda |
| prioridade (opcional) | Prioridade. Padrão 0.7 | número |
| SitemapBaseFilename (Opcional) | O nome do arquivo Sitemap gerado antes da extensão do arquivo. "sitemap" padrão | corda |
| alternaterefs (opcional) | Denotar suporte multi-idioma por URL exclusivo. Padrão [] | Alternateref [] |
| Sitemapsize (opcional) | Divida o grande mapa do site em vários arquivos especificando o tamanho do sitemap. Padrão 5000 | número |
| AutolastMod (opcional) | Adicionar <lastmod/> Propriedade. Padrão true | verdadeiro |
| exclua (opcional) | Matriz de caminhos relativos (padrão curinga suportado) para excluir da listagem em sitemap.xml ou sitemap-*.xml . por exemplo: ['/page-0', '/page-*', '/private/*'] .Além desta opção next-sitemap também oferece uma opção transform personalizada que pode ser usada para excluir URLs que correspondem a padrões específicos | corda[] |
| Soucedir (opcional) | NEXT.JS Construir diretório. Padrão .next | corda |
| OUTIR (OPCIONAL) | Todos os arquivos gerados serão exportados para este diretório. public padrão | corda |
| Transformar (opcional) | Uma função de transformação, que é executada para cada relative-path no mapa do site. O retorno do valor null da função de transformação resultará na exclusão desse path específico da lista de mapa do site gerado. | função assíncrona |
| Paths adicionais (opcional) | Função assíncrona que retorna uma lista de caminhos adicionais a serem adicionados à lista de mapa do site gerado. | função assíncrona |
| GereateIndexSitemap | Gerar mapas de sitemas de índice. Padrão true | booleano |
| GeneraterBotStxt (Opcional) | Gere um arquivo robots.txt e liste os sitemaps gerados. Padrão false | booleano |
| robotstxtoptions.transformroBotStxt (opcional) | Função do transformador Robots.txt personalizado. (Exemplo: Custom-Robots-TXT-Transformer) Padrão: async(config, robotsTxt)=> robotsTxt | função assíncrona |
| robotstxtoptions.policies (opcional) | Políticas para gerar robots.txt .Padrão: [{ userAgent: '*', allow: '/' }] | Irobotpolicy [] |
| robotstxtoptions.additionalsitemaps (opcional) | Opções para adicionar sitemaps adicionais ao robots.txt Entrada do host | corda[] |
| robotstxtoptions.includenonindexsItemaps (opcional) | A partir da v2.4x, o Gerated robots.txt conterá apenas o URL do index sitemap e os pontos de extremidade fornecidos personalizados de robotsTxtOptions.additionalSitemaps .Isso evita o envio de URL duplicado (uma vez por meio de índice -sitemap -> sitemap -url e uma vez por robots.txt -> host) Defina esta opção true para adicionar todos os pontos de extremidade do sitemap gerado ao robots.txtfalse padrão (recomendado) | booleano |
A transformação personalizada fornece um método de extensão para adicionar, remover ou excluir path ou properties de um conjunto de URL. A função de transformação é executada para cada relative path no mapa do site. E use a key : objeto value para adicionar propriedades no XML.
O retorno do valor null da função de transformação resultará na exclusão desse relative-path específico da lista de mapas de site gerado.
/** @type {import('next-sitemap').IConfig} */
module . exports = {
transform : async ( config , path ) => {
// custom function to ignore the path
if ( customIgnoreFunction ( path ) ) {
return null
}
// only create changefreq along with path
// returning partial properties will result in generation of XML field with only returned values.
if ( customLimitedField ( path ) ) {
// This returns `path` & `changefreq`. Hence it will result in the generation of XML field with `path` and `changefreq` properties only.
return {
loc : path , // => this will be exported as http(s)://<config.siteUrl>/<path>
changefreq : 'weekly' ,
}
}
// Use default transformation for all other cases
return {
loc : path , // => this will be exported as http(s)://<config.siteUrl>/<path>
changefreq : config . changefreq ,
priority : config . priority ,
lastmod : config . autoLastmod ? new Date ( ) . toISOString ( ) : undefined ,
alternateRefs : config . alternateRefs ?? [ ] ,
}
} ,
} additionalPaths Esta função pode ser útil se você tiver uma grande lista de páginas, mas não deseja renderizar todas elas e usar fallback: true. O resultado da execução desta função será adicionado à lista geral de caminhos e processado com sitemapSize . Você está livre para adicionar caminhos dinâmicos, mas, diferentemente additionalSitemap , não precisa dividir a lista de caminhos em diferentes arquivos, caso haja muitos caminhos para um arquivo.
Se sua função retornar um caminho que já existe, ela será simplesmente atualizada, a duplicação não acontecerá.
/** @type {import('next-sitemap').IConfig} */
module . exports = {
additionalPaths : async ( config ) => {
const result = [ ]
// required value only
result . push ( { loc : '/additional-page-1' } )
// all possible values
result . push ( {
loc : '/additional-page-2' ,
changefreq : 'yearly' ,
priority : 0.7 ,
lastmod : new Date ( ) . toISOString ( ) ,
// acts only on '/additional-page-2'
alternateRefs : [
{
href : 'https://es.example.com' ,
hreflang : 'es' ,
} ,
{
href : 'https://fr.example.com' ,
hreflang : 'fr' ,
} ,
] ,
} )
// using transformation from the current configuration
result . push ( await config . transform ( config , '/additional-page-3' ) )
return result
} ,
} O conjunto de URL pode conter sitemaps adicionais definidos pelo Google. Estes são o Google News Sitemap, o Image Sitemap ou o Video Sitemap. Você pode adicionar os valores para esses sitemaps, atualizando a entrada na função transform ou adicionando -a com additionalPaths . Você precisa devolver uma entrada no sitemap em ambos os casos, por isso é o melhor lugar para atualizar a saída. Este exemplo adicionará uma tag de imagem e notícias a cada entrada, mas o IRL você, é claro, o usaria com alguma condição ou no resultado additionalPaths .
/** @type {import('next-sitemap').IConfig} */
const config = {
transform : async ( config , path ) => {
return {
loc : path , // => this will be exported as http(s)://<config.siteUrl>/<path>
changefreq : config . changefreq ,
priority : config . priority ,
lastmod : config . autoLastmod ? new Date ( ) . toISOString ( ) : undefined ,
images : [ { loc : 'https://example.com/image.jpg' } ] ,
news : {
title : 'Article 1' ,
publicationName : 'Google Scholar' ,
publicationLanguage : 'en' ,
date : new Date ( ) ,
} ,
}
} ,
}
export default config Aqui está um exemplo de configuração next-sitemap.config.js com todas as opções
/** @type {import('next-sitemap').IConfig} */
module . exports = {
siteUrl : 'https://example.com' ,
changefreq : 'daily' ,
priority : 0.7 ,
sitemapSize : 5000 ,
generateRobotsTxt : true ,
exclude : [ '/protected-page' , '/awesome/secret-page' ] ,
alternateRefs : [
{
href : 'https://es.example.com' ,
hreflang : 'es' ,
} ,
{
href : 'https://fr.example.com' ,
hreflang : 'fr' ,
} ,
] ,
// Default transformation function
transform : async ( config , path ) => {
return {
loc : path , // => this will be exported as http(s)://<config.siteUrl>/<path>
changefreq : config . changefreq ,
priority : config . priority ,
lastmod : config . autoLastmod ? new Date ( ) . toISOString ( ) : undefined ,
alternateRefs : config . alternateRefs ?? [ ] ,
}
} ,
additionalPaths : async ( config ) => [
await config . transform ( config , '/additional-page' ) ,
] ,
robotsTxtOptions : {
policies : [
{
userAgent : '*' ,
allow : '/' ,
} ,
{
userAgent : 'test-bot' ,
allow : [ '/path' , '/path-2' ] ,
} ,
{
userAgent : 'black-listed-bot' ,
disallow : [ '/sub-path-1' , '/path-2' ] ,
} ,
] ,
additionalSitemaps : [
'https://example.com/my-custom-sitemap-1.xml' ,
'https://example.com/my-custom-sitemap-2.xml' ,
'https://example.com/my-custom-sitemap-3.xml' ,
] ,
} ,
} Acima da configuração, gerará mapas de site com base no seu projeto e em um robots.txt como este.
# *
User-agent: *
Allow: /
# test-bot
User-agent: test-bot
Allow: /path
Allow: /path-2
# black-listed-bot
User-agent: black-listed-bot
Disallow: /sub-path-1
Disallow: /path-2
# Host
Host: https://example.com
# Sitemaps
Sitemap: https://example.com/sitemap.xml # Index sitemap
Sitemap: https://example.com/my-custom-sitemap-1.xml
Sitemap: https://example.com/my-custom-sitemap-2.xml
Sitemap: https://example.com/my-custom-sitemap-3.xml next-sitemap agora fornece duas APIs para gerar sitemaps laterais do servidor. Isso ajudará a gerar dinamicamente o (s) index-sitemap (s) e sitemap (s) de índice (s), adquirindo dados do CMS ou da fonte personalizada.
getServerSideSitemapIndex : gera mapas de sitém de índice com base nos URLs fornecidos e retorna application/xml . Suporta o arquivo próximo13+. {TS, JS} arquivo.
getServerSideSitemapIndexLegacy . getServerSideSitemap : gera mapa do site com base nos inteiros do campo e retorna a resposta application/xml . Suporta o arquivo próximo13+. {TS, JS} arquivo.
getServerSideSitemapLegacy .Aqui está um script de amostra para gerar índice-sitemap no lado do servidor.
Criar arquivo app/server-sitemap-index.xml/route.ts .
// app/server-sitemap-index.xml/route.ts
import { getServerSideSitemapIndex } from 'next-sitemap'
export async function GET ( request : Request ) {
// Method to source urls from cms
// const urls = await fetch('https//example.com/api')
return getServerSideSitemapIndex ( [
'https://example.com/path-1.xml' ,
'https://example.com/path-2.xml' ,
] )
} Crie pages/server-sitemap-index.xml/index.tsx .
// pages/server-sitemap-index.xml/index.tsx
import { getServerSideSitemapIndexLegacy } from 'next-sitemap'
import { GetServerSideProps } from 'next'
export const getServerSideProps : GetServerSideProps = async ( ctx ) => {
// Method to source urls from cms
// const urls = await fetch('https//example.com/api')
return getServerSideSitemapIndexLegacy ( ctx , [
'https://example.com/path-1.xml' ,
'https://example.com/path-2.xml' ,
] )
}
// Default export to prevent next.js errors
export default function SitemapIndex ( ) { } Agora, next.js está servindo o Index-Sitemap dinâmico de http://localhost:3000/server-sitemap-index.xml .
Liste a página dinâmica do sitemap em robotsTxtOptions.additionalSitemaps e exclua esse caminho da lista estática do sitemap.
// next-sitemap.config.js
/** @type {import('next-sitemap').IConfig} */
module . exports = {
siteUrl : 'https://example.com' ,
generateRobotsTxt : true ,
exclude : [ '/server-sitemap-index.xml' ] , // <= exclude here
robotsTxtOptions : {
additionalSitemaps : [
'https://example.com/server-sitemap-index.xml' , // <==== Add here
] ,
} ,
} Dessa forma, next-sitemap gerenciará os sitemaps para todas as suas páginas estáticas e seu index-sitemap será listado no robots.txt.
Aqui está um script de amostra para gerar sitemaps no lado do servidor.
Criar arquivo app/server-sitemap.xml/route.ts .
// app/server-sitemap.xml/route.ts
import { getServerSideSitemap } from 'next-sitemap'
export async function GET ( request : Request ) {
// Method to source urls from cms
// const urls = await fetch('https//example.com/api')
return getServerSideSitemap ( [
{
loc : 'https://example.com' ,
lastmod : new Date ( ) . toISOString ( ) ,
// changefreq
// priority
} ,
{
loc : 'https://example.com/dynamic-path-2' ,
lastmod : new Date ( ) . toISOString ( ) ,
// changefreq
// priority
} ,
] )
} Crie pages/server-sitemap.xml/index.tsx .
// pages/server-sitemap.xml/index.tsx
import { getServerSideSitemapLegacy } from 'next-sitemap'
import { GetServerSideProps } from 'next'
export const getServerSideProps : GetServerSideProps = async ( ctx ) => {
// Method to source urls from cms
// const urls = await fetch('https//example.com/api')
const fields = [
{
loc : 'https://example.com' , // Absolute url
lastmod : new Date ( ) . toISOString ( ) ,
// changefreq
// priority
} ,
{
loc : 'https://example.com/dynamic-path-2' , // Absolute url
lastmod : new Date ( ) . toISOString ( ) ,
// changefreq
// priority
} ,
]
return getServerSideSitemapLegacy ( ctx , fields )
}
// Default export to prevent next.js errors
export default function Sitemap ( ) { } Agora, next.js está servindo o sitemap dinâmico de http://localhost:3000/server-sitemap.xml .
Liste a página dinâmica do sitemap em robotsTxtOptions.additionalSitemaps e exclua esse caminho da lista estática do sitemap.
// next-sitemap.config.js
/** @type {import('next-sitemap').IConfig} */
module . exports = {
siteUrl : 'https://example.com' ,
generateRobotsTxt : true ,
exclude : [ '/server-sitemap.xml' ] , // <= exclude here
robotsTxtOptions : {
additionalSitemaps : [
'https://example.com/server-sitemap.xml' , // <==== Add here
] ,
} ,
} Dessa forma, next-sitemap gerenciará os sitemaps para todas as suas páginas estáticas e seu sitemap dinâmico será listado no robots.txt.
Adicione a seguinte linha de código em seu next-sitemap.config.js para um bom tigelo de tipas-descrito! ?
/** @type {import('next-sitemap').IConfig} */
module . exports = {
// YOUR CONFIG
} 
Todos os PRs são bem -vindos :)