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.
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 certoA 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)
- O hook tem que ser
init, nãotemplate_redirect. Este é o pulo do gato: o redirecionador do plugin de SEO age antes dotemplate_redirect, então um código pendurado ali nunca chega a rodar — a URL já foi mandada pra home. Noinitcom prioridade baixa (5), você chega primeiro. Perdemos uma rodada inteira nisso. - 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.
- 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ário | Melhor caminho |
|---|---|
| Você mexe em código e tem tema filho | Snippet — zero peso, controle total |
| Site de cliente que outra pessoa mantém | Plugin (RankMath Pro ou dedicado): quem assume depois entende |
| Publicação com editorias, autores e seções | Solução paga — o formato News aceita metadados que o snippet simples não cobre |
| Tema sem filho, editado direto | Plugin 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 -Ina URL: precisa devolver 200 eContent-Type: application/xml;- abra o XML e confira que existe
<news:news>em cada<url>; - no Search Console, envie o
sitemap-news.xmlem 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.






