News sitemap no WordPress: por que falta e como resolver

News sitemap no WordPress: por que falta e como resolver

Resposta rápida

O /sitemap-news.xml que abre a home tem duas causas somadas: RankMath e Yoast free não geram news sitemap, e o módulo de redirecionamento manda o 404 pra home, escondendo o problema. Um snippet no functions.php (hook init, prioridade 5) resolve sem plugin pago.

  • News sitemap é recurso pago no RankMath e no Yoast — na versão free ele nunca existiu.
  • O redirect de 404 para a home mascara o erro: o robô recebe HTML onde esperava XML.
  • Diagnóstico em 1 segundo: curl -I na URL — 301 para a home é o sintoma.
  • O hook precisa ser init (prioridade 5); em template_redirect o redirecionador age antes.
  • Purgue o cache depois de publicar: CDN pode servir a resposta antiga sem chamar o PHP.
  • Sitemap vazio sem posts nas últimas 48h é comportamento correto, não bug.
  • É pré-requisito para o Google News, não passaporte: falta a aprovação no Publisher Center.
Janela do formatoÚltimas 48 horas
RankMath/Yoast freeNão geram news sitemap (recurso pago)
Sintoma típico301 da URL do sitemap para a home
Hook corretoinit, prioridade 5
Content-Type esperadoapplication/xml
Header recomendadoX-Robots-Tag: noindex

O sintoma: um sitemap que promete e não entrega

Se você quer entrar no Google News, precisa de um news sitemap: um XML com os artigos das últimas 48 horas, em formato próprio, que avisa o Google que aquele conteúdo é notícia fresca. Muita gente descobre do pior jeito que o seu não existe — o robots.txt anuncia /sitemap-news.xml, mas a URL devolve a home do site.

Foi exatamente o que encontramos aqui no WPRaiz esta semana, e o diagnóstico tem duas camadas que confundem qualquer um.

Camada 1: o RankMath free não gera news sitemap

O módulo de News é recurso pago do RankMath. Na versão gratuita, o sitemap principal (sitemap_index.xml) funciona normalmente, mas o de notícias simplesmente não é criado. O Yoast segue lógica parecida: news sitemap é extensão paga.

Ou seja: o arquivo nunca existiu. Só que — e aqui está a parte cruel — a URL não devolve 404, que seria o comportamento honesto e fácil de diagnosticar.

Camada 2: o redirecionador engole o 404

Plugins de SEO costumam trazer um módulo de redirecionamento com a opção “redirecionar 404 para a home”. É uma configuração popular — parece boa para o usuário e some com páginas de erro. O efeito colateral: a URL do sitemap inexistente responde 301 para a home, com status 200 no final.

Para você, no navegador, parece que o site está bem. Para o robô do Google News, o que chega é uma página HTML onde deveria haver XML — um sitemap inválido. Você não recebe erro, não recebe aviso: recebe silêncio.

Teste rápido no terminal, que revela a verdade em um segundo:

curl -I https://seusite.com.br/sitemap-news.xml
# 301 + Location: https://seusite.com.br/  →  o problema é este
# 200 + Content-Type: application/xml     →  está tudo certo

A solução sem plugin novo: gerar o XML você mesmo

O formato do Google News é simples — URL, nome da publicação, idioma, data e título — e o WordPress já tem tudo isso. Este código, no functions.php do tema filho, serve o sitemap direto:

add_action('init', function () {
    if (parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) !== '/sitemap-news.xml') return;

    $posts = get_posts([
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'posts_per_page' => 100,
        'date_query'     => [ [ 'after' => '48 hours ago' ] ],
    ]);

    status_header(200);
    header('Content-Type: application/xml; charset=UTF-8');
    header('X-Robots-Tag: noindex');

    echo '<?xml version="1.0" encoding="UTF-8"?>';
    echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" '
       . 'xmlns:news="http://www.google.com/schemas/sitemap-news/0.9">';
    foreach ($posts as $p) {
        echo '<url><loc>' . esc_url(get_permalink($p)) . '</loc>'
           . '<news:news><news:publication>'
           . '<news:name>SEU SITE</news:name><news:language>pt-BR</news:language>'
           . '</news:publication>'
           . '<news:publication_date>' . get_post_time('c', true, $p) . '</news:publication_date>'
           . '<news:title>' . htmlspecialchars(get_the_title($p), ENT_XML1) . '</news:title>'
           . '</news:news></url>';
    }
    echo '</urlset>';
    exit;
}, 5);

Troque SEU SITE pelo nome da sua publicação — ele precisa bater com o cadastro no Publisher Center.

Os três detalhes que fazem o código funcionar (ou não)

  1. O hook tem que ser init, não template_redirect. Este é o pulo do gato: o redirecionador do plugin de SEO age antes do template_redirect, então um código pendurado ali nunca chega a rodar — a URL já foi mandada pra home. No init com prioridade baixa (5), você chega primeiro. Perdemos uma rodada inteira nisso.
  2. Purgue o cache depois de subir. Se o LiteSpeed, o WP Rocket ou o Cloudflare já cachearam a resposta antiga daquela URL, a requisição nem chega no PHP. Você jura que o código não funciona e o problema é cache servindo fantasma.
  3. Mande X-Robots-Tag: noindex. O sitemap é para robô ler, não para rankear.

Quando vale usar plugin em vez de código

Nem todo site deve carregar snippet no tema. O critério prático:

CenárioMelhor caminho
Você mexe em código e tem tema filhoSnippet — zero peso, controle total
Site de cliente que outra pessoa mantémPlugin (RankMath Pro ou dedicado): quem assume depois entende
Publicação com editorias, autores e seçõesSolução paga — o formato News aceita metadados que o snippet simples não cobre
Tema sem filho, editado diretoPlugin de snippets (WPCode) — código no tema pai some na atualização

O aviso que vale ouro: nunca cole isso no functions.php do tema pai. Na próxima atualização o arquivo é sobrescrito e o sitemap desaparece sem ninguém perceber — e você só descobre semanas depois, olhando o Search Console.

Como validar de verdade

Não confie no navegador — ele renderiza qualquer coisa. Valide assim:

  • curl -I na URL: precisa devolver 200 e Content-Type: application/xml;
  • abra o XML e confira que existe <news:news> em cada <url>;
  • no Search Console, envie o sitemap-news.xml em Sitemaps e acompanhe o status;
  • lembre que o sitemap fica vazio se você não publicou nada nas últimas 48h — isso é normal, não é bug.

Um alerta final de expectativa: o news sitemap é pré-requisito, não passaporte. Sem publicação aprovada no Google Publisher Center, ele não coloca ninguém no Google News — só deixa a casa pronta para quando a aprovação sair.

Perguntas frequentes

Por que meu /sitemap-news.xml abre a home do site?

Porque o arquivo não existe (news sitemap é recurso pago no RankMath/Yoast) e o módulo de redirecionamento do plugin manda todo 404 para a home, mascarando o problema.

Preciso de plugin pago para ter news sitemap?

Não. O formato do Google News é simples e o WordPress já tem os dados. Um snippet no functions.php do tema filho resolve sem plugin novo.

Por que o hook precisa ser init e não template_redirect?

O redirecionador do plugin de SEO age antes do template_redirect. Pendurado ali, seu código nunca roda — a URL já foi redirecionada. No init com prioridade 5 você responde primeiro.

Meu news sitemap está vazio. É bug?

Provavelmente não: o formato cobre apenas as últimas 48 horas. Sem publicação nesse período, ele fica vazio — e isso é o comportamento correto.

Ter o news sitemap me coloca no Google News?

Não. É pré-requisito técnico. A entrada depende de uma publicação aprovada no Google Publisher Center.