// FERRAMENTA GRATUITA · VALIDADOR DE SITEMAP XML

Validador de sitemap XML

Cole seu sitemap.xml — ou solte o arquivo aqui — e veja cada erro de protocolo com o número da linha e a correção: loc, lastmod, priority, changefreq, o pareamento de hreflang e o limite de 50.000 URLs. Grátis, no seu navegador, sem enviar nada.

GratuitoNa horaSem cadastroRoda no navegador

Também emEnglishDeutschEspañolFrançais日本語한국어Português (Brasil)繁體中文

sitemap.xml · validador

A validação roda conforme você digita. Você também pode soltar um sitemap.xml ou sitemap.xml.gz direto nesta caixa — o arquivo é lido e descompactado pelo seu navegador e nunca sai dele.

Erros e avisos
    Relatório
    
              

    Como validar um sitemap XML

    Três passos, todos nesta página. O validador lê o arquivo que você entrega — ele não busca o seu site, então cole o XML ou solte o arquivo em vez de digitar uma URL.

    1. Cole ou solte o arquivo. Cole o XML na caixa da esquerda, ou arraste o sitemap.xml (ou sitemap.xml.gz — seu navegador descompacta) para cima dela. A validação roda na hora, a cada tecla.
    2. Desça pelos achados. Cada achado vem com o número da linha e a correção. Erros são coisas que um rastreador vai recusar ou ler errado; avisos são XML válido que ainda assim custa alguma coisa, como um lastmod no futuro ou uma URL repetida.
    3. Copie o relatório, corrija, verifique de novo. O painel da direita traz um relatório em texto puro — tipo de arquivo, quanto falta para os limites de 50.000 URLs e 50 MB, e todos os achados — que dá para colar numa tarefa. Corrija, cole o arquivo novo e confirme que ele volta limpo.

    O que este validador de sitemap verifica

    Ele passa três vezes pelo arquivo que você cola. Primeiro, se o XML está bem formado: tags sem fechar ou mal aninhadas, um & sem escape numa query string, um prefixo de namespace não declarado — cada coisa apontada na linha em que acontece, e não como um único "erro de parsing". Depois, o protocolo do sitemaps.org: a raiz é <urlset> ou <sitemapindex> no namespace http://www.sitemaps.org/schemas/sitemap/0.9, cada entrada tem exatamente um <loc> absoluto, <lastmod> é um W3C Datetime de verdade, <priority> fica entre 0.0 e 1.0 e <changefreq> é uma das sete palavras permitidas. Por fim, os limites e as referências cruzadas: 50.000 URLs, 50 MB sem compactação, URLs repetidas, hosts misturados e as anotações hreflang de xhtml:link conferidas nos dois sentidos.

    Um sitemap XML é um arquivo publicado em uma URL fixa que lista as páginas que você quer que sejam rastreadas: cada uma como um elemento <loc>, opcionalmente com <lastmod>, agrupadas sob uma raiz <urlset> — ou sob um <sitemapindex> que aponta para vários arquivos desse tipo. O protocolo é isso, e continua sendo o esquema 0.9 que os buscadores combinaram. É justamente por isso que vale rodar um validador de sitemap exatamente uma vez a cada mudança no gerador: as falhas são mecânicas, e cada uma vira uma correção de uma linha assim que alguma coisa te diz qual é a linha.

    E o que ele não responde, dito logo: se a página do <loc> devolve mesmo 200, se ela tem noindex, se o robots.txt aponta para o arquivo. Isso exige uma requisição por URL — trabalho de servidor, e não algo que uma página rodando no seu navegador consiga fazer (o motivo está mais abaixo). Formato correto e conteúdo correto são duas perguntas diferentes; esta página cuida da primeira.

    pt-BR, pt-PT ou só pt: os códigos que vazam do sistema para o sitemap

    Se você já abriu um arquivo de tradução, um config/locales ou uma variável de ambiente, você viu pt_BR escrito com underscore mil vezes. É a forma de locale do POSIX, do Java, do gettext, do Rails — e é a forma que a aplicação tem à mão na hora de gerar o sitemap. Daí para a anotação de hreflang é um passo, e é um passo errado: hreflang usa hífen. pt_BR é um erro aqui, e o validador aponta. Não é descuido de quem escreveu: é o identificador certo, do lugar errado.

    No arquivoO que o validador dizSignifica
    ptválido, sem comentáriosportuguês, qualquer variante
    pt-BR / pt-PTválido, sem comentáriosportuguês do Brasil / de Portugal
    pt_BRerro: underscoreforma de locale de sistema
    pt-braviso: região em maiúsculao certo é pt-BR
    brnada — passa em silênciobretão, língua da Bretanha francesa

    Essa última linha merece atenção porque é a única da tabela que nenhum validador pega, nem este. br existe no ISO 639-1, então é um código de idioma perfeitamente válido — só que o idioma é o bretão, e não o português do Brasil. O arquivo passa limpo, o Google aceita a anotação, e a sua versão brasileira fica anunciada como se fosse escrita para leitores da Bretanha. Ninguém avisa. O mesmo vale para uk, que é ucraniano e não Reino Unido. A regra que evita a família toda de enganos: o que vem antes do hífen é sempre um idioma; país só depois do hífen. Brasil é BR em pt-BR, nunca sozinho.

    Falta a decisão que não é de sintaxe: pt sozinho já cobre todo mundo que busca em português. Só vale separar pt-BR de pt-PT se as versões forem diferentes de verdade — preço em real e em euro, CPF e NIF, frete, formas de pagamento, atendimento. Se a versão de Portugal é a brasileira com o mesmo texto, duas anotações regionais não te dão nada e ainda te dão um grafo maior para manter em dia. E o inverso é pior: anunciar pt-PT quando o seu único português é o brasileiro entrega ao leitor português uma página que fala de PIX e de boleto. Se você tem as duas versões de verdade, o padrão que funciona é pt-BR + pt-PT + um x-default para quem não é nenhum dos dois.

    O botão Exemplo com erros lá em cima carrega exatamente esse cenário: pt_BR com underscore, br passando calado, pt-br em minúscula, uma data 01/09/2026, um changefreq traduzido para "diariamente" e um caminho com cedilha sem codificar. Para montar a anotação certa desde o começo em vez de depurar, o gerador de tags hreflang produz de um único padrão de URL tanto o bloco <link> do head quanto o bloco xhtml:link do sitemap — gere lá, cole aqui, e os links de retorno saem certos por construção.

    50.000 URLs, 50 MB e como dividir direito

    Dois números duros: 50.000 URLs e 50 MB sem compactação por arquivo de sitemap. O tamanho é medido antes do gzip, então compactar um arquivo de 60 MB não o coloca abaixo do limite — só encurta o download. O relatório acima dos achados mostra o quanto você está perto dos dois, e esse é o número que vale acompanhar num site que cresce, porque passar de qualquer um dos limites invalida o arquivo inteiro em vez de cortá-lo.

    Passado isso, divida por seção e publique um <sitemapindex>: um arquivo por tipo de conteúdo, ou por mês — o que deixar os valores de <lastmod> honestos. Um índice comporta até 50.000 entradas <sitemap>, cada uma com um <loc> e, opcionalmente, um <lastmod> — sem <priority>, sem <changefreq> e sem elementos <url> misturados, coisas que este validador aponta. O protocolo não deixa um índice listar outro índice, então a árvore tem exatamente dois níveis. Cole um arquivo de índice aqui e o validador troca para as regras de índice sozinho; seguir as URLs filhas ele não consegue, já que não busca nada.

    Uma última que não é limite mas se comporta como um: mantenha o arquivo honesto. Toda URL nele deve devolver 200 e ser indexável — um <loc> que redireciona, dá 404 ou carrega noindex ensina o rastreador a confiar menos no sitemap. Conferir isso custa uma requisição por URL, o que é trabalho de servidor. É o que o clize seo check --domain seudominio.com.br faz, colocando o resultado lado a lado com os dados do Search Console.

    Depois de válido: o ping de sitemap acabou

    Várias ferramentas ainda oferecem "avisar o Google" quando o seu arquivo passa. Aquele endpoint — google.com/ping?sitemap= — foi descontinuado em 2023 e não faz mais nada. Se um validador ainda vende isso como recurso, isso te diz quando aquela página foi mexida pela última vez.

    O que substitui é mais sem graça e funciona. Coloque a URL absoluta do sitemap no robots.txt, como uma linha Sitemap: — todo rastreador lê por conta própria, no ritmo dele, e não exige conta nenhuma. Envie o arquivo uma vez no Search Console e no Bing Webmaster Tools, e depois deixe quieto; reenviar não acelera nada. Mantenha o <lastmod> correto, porque é o único campo do arquivo que o Google diz que usa, e é um valor correto que torna um novo rastreamento digno de ser agendado. Se você usa IndexNow, avise na publicação — esse está vivo.

    E depois disso, meça em vez de adivinhar. O clize seo check --domain seudominio.com.br lê o seu sitemap e a sua propriedade do Search Console juntos e mostra as páginas que estão no arquivo mas nunca conseguiram uma impressão, com o status HTTP e o estado de indexação atuais — a resposta honesta para "adiantou ter enviado?", que nenhum validador consegue dar. Ainda na camada legível por máquinas, dois vizinhos seguem a mesma regra desta página, a de gerar o arquivo de uma fonte só em vez de editar na mão: o validador de llms.txt, para o índice que os agentes leem, e o gerador de schema de FAQ, para uma marcação que precisa bater palavra por palavra com a página visível.

    // Perguntas frequentes

    O que um validador de sitemap XML verifica?

    Três coisas. Que o arquivo seja XML bem formado — tags fechadas e aninhadas, ampersands com escape, prefixos de namespace declarados. Que ele siga o protocolo do sitemaps.org — raiz <urlset> ou <sitemapindex> no namespace 0.9, exatamente um <loc> absoluto por entrada, um W3C Datetime válido no <lastmod>, <priority> entre 0.0 e 1.0 e <changefreq> da lista permitida. E que fique dentro dos limites e seja coerente consigo mesmo — abaixo de 50.000 URLs e 50 MB sem compactação, sem URLs repetidas, e com as versões alternativas de hreflang apontando umas para as outras.

    Escrevo pt-BR, pt-PT ou só pt no hreflang?

    Se você tem uma única versão em português, escreva pt: ela cobre qualquer pessoa que busque nesse idioma. Só separe em pt-BR e pt-PT se as páginas forem realmente diferentes — moeda, documento fiscal, frete, formas de pagamento, atendimento. Se separar, mantenha as duas anotações completas e recíprocas, e considere um x-default para quem não se encaixa em nenhuma. O que nunca funciona é anunciar pt-PT numa página escrita em português do Brasil.

    Posso usar hreflang="br" para o Brasil?

    Não, e esse é o erro mais perigoso da lista porque nenhuma ferramenta reclama dele. br existe no ISO 639-1, só que significa bretão, a língua da Bretanha, na França. Como o código é formalmente válido, este validador e todos os outros deixam passar em silêncio, e a sua versão brasileira acaba anunciada para o público errado. O primeiro elemento do hreflang é sempre um idioma; país só depois do hífen: pt-BR.

    Por que o lastmod dá erro se a data está certa?

    Quase sempre é a forma de escrever, não a data. Valem AAAA-MM-DD ou AAAA-MM-DDThh:mm:ss com fuso horário. O formato 01/09/2026 não vale, espaço no lugar do T não vale, e horário sem fuso também não. Se o seu gerador escreve o horário local, o mais seguro é gravar em UTC com Z no fim, ou tirar o horário e deixar só a data. O horário de Brasília é -03:00 quando você quiser mesmo escrever o deslocamento.

    Dá para validar um arquivo de índice de sitemaps?

    Dá. Cole um arquivo cuja raiz seja <sitemapindex> e o validador troca para as regras de índice: cada entrada precisa ser um <sitemap> com um <loc> e no máximo um <lastmod>, sem <priority>, <changefreq> ou elementos <url> misturados. Ele não consegue seguir os sitemaps filhos, porque nunca busca nada — valide cada arquivo filho colando um de cada vez.

    Dá para validar um sitemap.xml.gz compactado?

    Dá. Solte o arquivo .gz na caixa, ou escolha pelo botão de arquivo, e o seu navegador descompacta localmente antes de rodar a verificação. Só lembre que gzip não muda o limite de tamanho: o teto de 50 MB é medido no arquivo sem compactação, que é o que o relatório mostra.

    Meu arquivo é enviado para algum servidor, e por que não dá para informar uma URL?

    Nada é enviado. O validador é um script rodando no seu navegador: nada do que você cola ou solta sai da página, não há conta nem cadastro, e depois que a página carrega ele funciona offline. É também por isso que ele não consegue buscar uma URL — a política de mesma origem impede que uma página de um domínio leia um arquivo de outro, a não ser que esse outro envie cabeçalhos CORS, o que praticamente nenhum site faz com o sitemap. Baixe o arquivo com curl e cole a saída; em troca, você também consegue verificar arquivos ainda não publicados, gerados na CI ou atrás de um login.

    clize seo check — grátis para o seu próprio domínio

    Arquivo válido é o piso. Agora descubra o que foi indexado.

    Verificar o seu próprio site não custa nada: ele lê o seu sitemap e a sua propriedade do Search Console juntos, lista as páginas com o status HTTP e o estado de indexação reais, marca as que nunca conseguiram uma impressão e mostra o tráfego por origem, com os motores de IA contados à parte. Um comando de dentro do seu agente.

    $ npm i -g @clize/clize && clize install
    $ clize seo check --domain seudominio.com.br
    [ Agent SEO by Clize → ]