Capítulo 163 de 456

generateSitemaps

Core Idea

Divide um sitemap grande em vários sitemaps menores, cada um servido em /.../sitemap/[id].xml, contornando o limite de 50.000 URLs do Google por arquivo.

Key Concepts

  • generateSitemaps(): função async exportada de sitemap.ts que retorna um array de objetos { id }, um por sub-sitemap a gerar.
  • id como Promise: desde v16.0.0, o id é passado à função sitemap default como Promise<string>, não mais valor síncrono.
  • URL gerada: cada sitemap fica acessível em /product/sitemap/[id].xml (ex. /product/sitemap/1.xml).

Code Examples

// app/product/sitemap.ts
import type { MetadataRoute } from 'next'
import { BASE_URL } from '@/app/lib/constants'

export async function generateSitemaps() {
  return [{ id: 0 }, { id: 1 }, { id: 2 }, { id: 3 }]
}

export default async function sitemap(props: {
  id: Promise<string>
}): Promise<MetadataRoute.Sitemap> {
  const id = await props.id
  const start = id * 50000
  const end = start + 50000
  const products = await getProducts(
    `SELECT id, date FROM products WHERE id BETWEEN ${start} AND ${end}`
  )
  return products.map((product) => ({
    url: `${BASE_URL}/product/${product.id}`,
    lastModified: product.date,
  }))
}
  • O que demonstra: paginação de sitemap por faixa de IDs, cada id retornado vira um arquivo XML separado.

Reference Tables

VersionChanges
v16.0.0id passado como Promise<string> para a função sitemap
v15.0.0URLs consistentes entre dev e produção
v13.3.2generateSitemaps introduzido

Key Takeaways

  1. Use quando o catálogo excede 50.000 URLs por sitemap.
  2. generateSitemaps só retorna os IDs; a lógica de busca de dados fica na função sitemap default, filtrada pelo id.
  3. A partir do v16, sempre await o id antes de usá-lo.

Connects To

  • sitemap.xml (file convention): define o arquivo sitemap.ts onde generateSitemaps é exportado.