Índice de sitemaps: o que é, limites e como ler um

Índice de sitemaps: o que é, limites e como ler um

Um índice de sitemaps é um arquivo XML que lista outros sitemaps em vez de páginas. O WordPress, o Yoast SEO e o Rank Math publicam um, e sites grandes precisam de um quando passam de 50.000 URLs. Veja o formato, os limites definidos pelo Google e pelo protocolo, os erros mais frequentes e três maneiras de ler todos os sitemaps filhos para os quais ele aponta.

Formato e limites do índice

Um índice lista sitemaps, não páginas. Os mecanismos de busca o abrem, depois abrem cada arquivo citado nele e só então chegam aos URLs das suas páginas. Sites grandes precisam de um porque um único sitemap comporta no máximo 50.000 URLs e 50 MB. O WordPress, o Yoast SEO e o Rank Math usam um mesmo em sites pequenos, porque dividem os URLs por tipo de conteúdo. Nosso guia mostra onde o WordPress publica o índice.

O elemento raiz é sitemapindex, no mesmo namespace de um sitemap comum. Cada arquivo listado ganha uma entrada sitemap com duas tags:

  • loc: o URL completo do sitemap filho. É obrigatória.
  • lastmod: quando esse arquivo foi modificado pela última vez, no formato W3C Datetime. É opcional.
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/post-sitemap.xml</loc>
    <lastmod>2026-10-28T09:12:00+00:00</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/page-sitemap.xml.gz</loc>
    <lastmod>2026-10-02</lastmod>
  </sitemap>
</sitemapindex>

Não existe changefreq nem priority em um índice. Repare no que lastmod quer dizer aqui: o sitemaps.org o define como a data em que o arquivo de sitemap mudou, não as páginas dentro dele. Um filho pode ser compactado com gzip, como na segunda entrada.

Os limites vêm do protocolo sitemaps.org, e o Google acrescenta alguns:

Regra Valor Fonte
Sitemaps listados em um índice 50.000 no máximo sitemaps.org, Google
Tamanho do arquivo 50 MB (52.428.800 bytes) sem compactação sitemaps.org, Google
Compactação gzip permitido sitemaps.org
Arquivos de índice por site no Search Console 500 Google
Índice dentro de um índice não permitido Google

O Google diz que todos os requisitos de sitemap também valem para os arquivos de índice, então o limite de 50 MB é medido depois da descompactação.

Regras de aninhamento e de mesmo host

O Google não aceita um índice dentro de outro. A ajuda do relatório de sitemaps diz que um índice pode listar só arquivos de sitemap, e o relatório mostra um erro de aninhamento quando encontra um. O protocolo não diz nada sobre isso, por isso alguns geradores ainda aninham índices. Achate a árvore: faça o arquivo principal apontar direto para os arquivos que contêm URLs. Com mais de 50.000 sitemaps, divida-os em vários arquivos de índice e envie cada um.

O protocolo também diz que um índice só pode listar sitemaps do mesmo site. O Google acrescenta dois detalhes:

  • Os sitemaps filhos precisam estar na mesma pasta do índice ou em um nível abaixo na hierarquia do site.
  • A regra do mesmo site deixa de valer se você configurar o envio entre sites, o que exige provar que você controla cada host.

Assim, um índice em https://example.com/sitemap.xml não deve listar https://cdn.example.net/products.xml nem http://www.example.com/posts.xml. Os dois contam como outros hosts. Para um URL em um nível acima ou em outro domínio, o relatório mostra «URL não permitido».

Enviar no Search Console e no robots.txt

No relatório de sitemaps, digite o URL do índice e clique em «Enviar». Esse único envio cobre todos os filhos. Para um índice, diz a página de ajuda, «Páginas encontradas» conta todos os URLs de todos os sitemaps filhos. Você também pode enviar um filho quando quiser uma linha e um status só para ele, mas não é obrigatório.

  • Redirecionamentos não são seguidos no URL enviado. Envie o endereço final, que responde com o status 200.
  • O relatório lista só os sitemaps enviados nele ou pela API, então um arquivo que o Google encontrou no robots.txt não aparece.

No robots.txt, acrescente uma linha com o URL completo, em qualquer lugar do arquivo:

Sitemap: https://example.com/sitemap_index.xml

O protocolo diz que, com um índice, você pode indicar só a localização desse arquivo. A linha faz parte do protocolo sitemaps.org, então não é exclusiva do Google.

Erros comuns e as causas

A maioria dos problemas vem dos filhos, não do arquivo de índice.

  • Filho em outro host. Uma mudança de http para https, ou de www para sem www, deixa URLs antigos no índice. Cada loc precisa usar o esquema e o host do índice.
  • URL relativo. <loc>/post-sitemap.xml</loc> não é válido. O Google informa um URL incompleto.
  • Filho que responde 404. Um plugin foi desativado, um tipo de conteúdo foi removido ou um cache serve um índice antigo.
  • Filho que responde HTML. Uma página de login, uma verificação de segurança ou a página 404 do tema enviada com o status 200. Nosso artigo sobre o status «Não foi possível buscar» mostra como identificar isso com um teste em tempo real.
  • Formato de lastmod errado. 15/10/2026 não é W3C Datetime. Escreva 2026-10-15, ou 2026-10-15T14:30:00+00:00 com horário e fuso horário. O Google informa «Data inválida».
  • Índice aninhado. Liste os arquivos que ele contém no lugar dele.

Como ler todos os sitemaps filhos

Abrir cinquenta arquivos um por um é lento. Veja três maneiras de ver todos.

Verificar o arquivo de índice com o verificador de sitemap

Cole o índice no verificador de sitemap gratuito, ou abra o arquivo .xml ou .xml.gz. Ele reconhece um índice e lista cada filho com o seu lastmod em uma tabela «Sitemaps». Ele aponta URLs relativos ou que não são http, datas inválidas, duplicados, filhos em vários hosts, entradas url ou changefreq e priority colocadas em um índice, e arquivos com mais de 50.000 entradas ou 50 MB.

Ele confere só esse arquivo. A página nunca se conecta a outros sites, então não abre os filhos e não consegue saber se algum responde 404 ou HTML. O resultado lembra você de conferir também cada sitemap listado.

Carregar todos os sitemaps filhos com o XMLNest

A extensão XMLNest para Chrome abre um índice publicado na visualização «Leitor». Clique em «Carregar todos os sitemaps filhos» e ela solicita os filhos um de cada vez, com uma linha de progresso e um botão «Cancelar»:

  • Só os filhos do mesmo site do índice (mesmo esquema, host e porta) são solicitados. Os outros mostram «Ignorado: em outro site, nunca solicitado».
  • Até 50 filhos, de 50 MB cada; os arquivos .gz são descompactados.
  • Redirecionamentos não são seguidos, e um índice aninhado é ignorado.
  • Cada falha diz o motivo: o status HTTP, um XML que não está bem formado ou «não é um sitemap» com a tag raiz encontrada, que é como uma página HTML aparece.

Visualização Leitor do XMLNest em um arquivo de índice do WordPress: Load all child sitemaps carregou 3 de 3 sitemaps, com 12, 5 e 4 URLs

O XMLNest no Chrome, com a interface em inglês, em um índice do WordPress, depois de «Load all child sitemaps» (Carregar todos os sitemaps filhos).

Os URLs de todos os filhos carregados vão para uma única tabela, com uma coluna para o arquivo de origem. A aba «Problemas» aplica as regras do verificador de sitemap a cada arquivo e lista os URLs encontrados em dois sitemaps filhos. Nosso artigo sobre como extrair os URLs de um sitemap explica a exportação em CSV e JSON.

Expandir o índice com Python

Esta função lê um índice, segue cada filho do mesmo host, descompacta o gzip e imprime cada URL de página uma única vez. Ela usa só a biblioteca padrão.

import gzip
import sys
import urllib.request
import xml.etree.ElementTree as ET
from urllib.parse import urlsplit

NS = "{http://www.sitemaps.org/schemas/sitemap/0.9}"

def fetch(url):
    req = urllib.request.Request(url, headers={"User-Agent": "expand-index/1.0"})
    with urllib.request.urlopen(req, timeout=30) as resp:
        data = resp.read()
    if data[:2] == b"\x1f\x8b":  # gzip, seja qual for o nome do arquivo
        data = gzip.decompress(data)
    return ET.fromstring(data)

def locs(root, entry):
    return [el.text.strip() for el in root.findall(f"{NS}{entry}/{NS}loc") if el.text]

def page_urls(index_url):
    root = fetch(index_url)
    if root.tag == NS + "urlset":
        return locs(root, "url")
    host = urlsplit(index_url).netloc
    pages = []
    for child in locs(root, "sitemap"):
        if urlsplit(child).netloc != host:
            print("skipped, other host:", child, file=sys.stderr)
            continue
        try:
            sub = fetch(child)
        except Exception as err:
            print("failed:", child, err, file=sys.stderr)
            continue
        if sub.tag != NS + "urlset":
            print("skipped, not a urlset:", child, file=sys.stderr)
            continue
        found = locs(sub, "url")
        print(f"{child}: {len(found)} URLs", file=sys.stderr)
        pages.extend(found)
    return pages

if __name__ == "__main__":
    for url in dict.fromkeys(page_urls(sys.argv[1])):
        print(url)

Execute python expand_index.py https://example.com/sitemap.xml > urls.txt. O relatório vai para a tela e os URLs para o arquivo. Rodamos o script em um índice de teste local com cinco entradas. Ele leu dois filhos, um deles compactado com gzip, e retornou os cinco URLs de páginas. Ignorou um índice aninhado e um filho em outro host, e informou “HTTP Error 404” para um arquivo ausente.

Lista de verificação antes do envio

  • A raiz é sitemapindex com o namespace do sitemaps.org, e cada entrada tem um loc completo.
  • No máximo 50.000 entradas e 50 MB sem compactação; nenhum índice dentro de outro.
  • Cada filho está no mesmo host e no mesmo esquema do índice, na mesma pasta ou abaixo dela.
  • Cada filho responde 200 com XML, e não com um redirecionamento, um 404 ou HTML.
  • O lastmod usa W3C Datetime e muda quando o arquivo muda.
  • Envie o índice uma vez no Search Console e acrescente uma linha Sitemap: ao robots.txt.

Dúvidas

Devo enviar o índice ou cada sitemap filho?

Enviar o índice basta: o Google lê os sitemaps listados nele, e a contagem de páginas encontradas do índice soma os URLs de todos os sitemaps filhos. Você também pode enviar um filho separadamente se quiser ver o status dele em uma linha própria.

Um índice de sitemaps pode listar outro índice?

Não. A ajuda do Google diz que um índice pode listar só arquivos de sitemap, e o relatório mostra o erro de índices de sitemap aninhados quando encontra um. Se você tem mais de 50.000 sitemaps, divida-os em vários arquivos de índice e envie cada um.

O lastmod de uma entrada do índice descreve as páginas?

Não. Em um índice de sitemaps, lastmod é a data em que o próprio arquivo de sitemap foi modificado. As datas das páginas ficam nas tags lastmod dos sitemaps filhos.

Fontes

  1. sitemaps.org: Protocolo (consultada em 29 de outubro de 2026)
  2. Google Search Central: Gerenciar sitemaps com arquivos de índice (consultada em 29 de outubro de 2026)
  3. Google Search Central: Criar e enviar um sitemap (consultada em 29 de outubro de 2026)
  4. Gerenciar sitemaps com o relatório de sitemaps - Ajuda do Search Console (consultada em 29 de outubro de 2026)
  5. Teste do XMLNest: o script em Python abaixo, executado com o Python 3.14.3 em um índice de exemplo local : Índice com 5 entradas: 2 sitemaps filhos lidos (um compactado com gzip, 5 URLs de páginas no total), 1 índice aninhado ignorado, 1 filho que responde 404, 1 filho em outro host ignorado. (consultada em 29 de outubro de 2026)