IndexNow: a chave, o primeiro envio e como ler a resposta
O IndexNow se configura com três coisas: uma chave, um arquivo de texto no seu host e uma solicitação por publicação. Este capítulo traz os três passos, a tabela de códigos e um script de envio para inserir na sua publicação.

IndexNow é um ping de uma única solicitação que avisa os motores participantes de que uma URL foi adicionada, alterada ou removida. A configuração exige três coisas: uma chave, essa chave hospedada como arquivo de texto no seu próprio host e uma solicitação HTTP por publicação. O caminho é gratuito, leva cerca de vinte minutos e funciona igual em um site estático ou em um CMS.
Este capítulo supõe que sua página já é acessível e já está no sitemap. Se isso não foi confirmado, faça antes de enviar qualquer coisa: um ping para uma URL que devolve 404 é desperdiçado. A rotina de publicação em três passos da checklist de lançamento de produto cobre esse terreno, e este capítulo é a versão detalhada do terceiro passo.
Quais motores realmente escutam
IndexNow é um protocolo compartilhado: uma solicitação chega a todos os participantes. A lista é publicada no indexnow.org e é curta.
| Motor | Na lista |
|---|---|
| Microsoft Bing | Sim |
| Yandex | Sim |
| Naver | Sim |
| Seznam.cz | Sim |
| Yep | Sim |
| Não listado |
O Bing é quem paga pelos demais. O índice dele alimenta a busca do ChatGPT e do Copilot, então entrar cedo no Bing é o caminho mais curto para o conjunto de fontes de uma resposta de IA. O Google tem o próprio caminho, e por isso o passo anterior pede os dois.
Passo 1 — criar uma chave e hospedá-la
A chave prova ao motor que o envio veio de alguém que controla o host. É uma string que você inventa, com regras estreitas: de 8 a 128 caracteres, apenas a-z, A-Z, 0-9 e hífens. Um UUID sem chaves atende a tudo e é fácil de regenerar.
KEY=$(uuidgen | tr 'A-Z' 'a-z' | tr -d '{}')
echo -n "$KEY" > public/$KEY.txt
echo "https://example.com/$KEY.txt"
O arquivo precisa ser UTF-8, ter o nome da chave e conter a chave e nada mais. Faça o deploy e abra a URL no navegador. Se ela não devolver a chave em texto puro, pare aqui: todos os passos seguintes vão falhar com um 403 que não explica o motivo.
Você pode hospedar o arquivo fora da raiz, mas então a chave cobre apenas as URLs abaixo dessa pasta. Uma chave em /catalog/key.txt pode enviar /catalog/anything e não pode enviar /help/anything. A raiz evita a pergunta inteira.
Um ponto que muita gente inverte: a chave não é um segredo como um token de API. Você precisa publicá-la em uma URL que qualquer pessoa possa ler, porque esse arquivo público é a prova de controle. Colocá-la no repositório não é problema. O que importa é que o arquivo e o valor enviado fiquem sincronizados.
Passo 2 — enviar uma URL manualmente
Antes de automatizar, prove a ligação com um único GET. É a forma documentada para uma URL por vez.
curl -s -o /dev/null -w '%{http_code}\n' \
"https://api.indexnow.org/indexnow?url=https://example.com/your-page&key=$KEY"
Um 200 significa que o arquivo da chave foi encontrado e lido. Não significa que a página será indexada. A documentação do protocolo diz isso sem rodeios: 200 indica apenas que o motor recebeu sua URL.
Passo 3 — passar ao endpoint em lote
Uma URL por solicitação serve para um teste manual e não serve para uma esteira de publicação. A forma em lote aceita até 10 000 URLs em um único POST, mais do que a maioria dos sites precisa em um envio.
POST /indexnow HTTP/1.1
Host: api.indexnow.org
Content-Type: application/json; charset=utf-8
{
"host": "example.com",
"key": "your-key",
"keyLocation": "https://example.com/your-key.txt",
"urlList": [
"https://example.com/page-a",
"https://example.com/page-b"
]
}
O valor de host precisa coincidir com o host de cada URL da lista. Misturar dois nomes de host no mesmo payload é a causa mais comum de um 422 em um lote que parece correto.
Ler os códigos de resposta
Cinco códigos cobrem tudo o que o endpoint devolve, e cada um aponta para um erro diferente. Mantenha esta tabela aberta enquanto constrói.
| Código | Significado | O que corrigir |
|---|---|---|
| 200 | Recebido | Nada. Recebido, não indexado |
| 400 | Solicitação inválida | JSON malformado ou codificação de URL errada |
| 403 | Chave inválida | Arquivo ausente, ou presente com outra chave |
| 422 | Não processável | Uma URL não pertence ao host, ou a chave quebra o formato |
| 429 | Solicitações demais | Reduza os envios; você está sendo lido como spam |
O 403 é onde quase toda primeira tentativa cai, e tem duas causas: o arquivo não está onde você disse, ou está e a chave dentro dele não bate com a enviada. Busque o arquivo com curl e compare com o valor do script antes de mudar outra coisa. Um 422 em um lote que funcionava como URL única aponta para o campo host, não para a chave.
O entregável: um envio para inserir na sua publicação
Pegue este script, mude duas linhas e rode no fim do que publica o seu conteúdo. Ele lê o sitemap, envia tudo em um lote e imprime o código para que uma falha fique visível em vez de silenciosa.
#!/usr/bin/env bash
set -euo pipefail
HOST="example.com"
KEY="your-key"
URLS=$(curl -s "https://$HOST/sitemap.xml" \
| grep -o '<loc>[^<]*</loc>' \
| sed 's/<[^>]*>//g' \
| python3 -c 'import json,sys; print(json.dumps([l.strip() for l in sys.stdin if l.strip()]))')
curl -s -o /dev/null -w 'indexnow: %{http_code}\n' \
-X POST "https://api.indexnow.org/indexnow" \
-H 'Content-Type: application/json; charset=utf-8' \
-d "{\"host\":\"$HOST\",\"key\":\"$KEY\",\"keyLocation\":\"https://$HOST/$KEY.txt\",\"urlList\":$URLS}"
Dois hábitos mantêm isso de pé com o tempo. Registre o que foi enviado e quando, para que um envio repetido seja pulado em vez de repetido. E envie quando algo muda, não por calendário: um envio noturno de um sitemap sem mudanças é o que ganha um 429.
Três formas de arruinar a instalação
As três devolvem um código visível, e por isso a tabela de respostas é a primeira coisa a conferir.
- O arquivo da chave é servido com o tipo de conteúdo errado ou uma quebra de linha a mais. Continua parecendo certo no navegador. Busque com curl e compare byte a byte.
- O envio sai antes de o deploy terminar. O motor chega a uma URL que o host ainda não publicou e o ping é gasto em um 404.
- Cada build envia o sitemap inteiro. Nada quebra no começo, depois os envios passam a devolver 429 e os pings úteis se perdem no ruído.
O que o IndexNow não fará
Ele não fará uma página ser indexada. Ele antecipa a descoberta; o motor continua decidindo se a página merece ficar, e uma página fraca descoberta antes continua sendo uma página fraca. Não chega ao Google, que não está na lista de participantes, então nunca substitui a parte do Search Console na sua rotina.
Também não podemos dizer quanto tempo ele economiza. Medir isso direito exige um grupo de controle de URLs não enviadas acompanhadas por semanas, e ainda não fizemos esse teste nos nossos próprios sites. Quem citar um número específico de horas precisa ser perguntado sobre o grupo de controle.
O que vale revisar junto do IndexNow é o resto da esteira. Se o seu sitemap carimba cada URL com a hora do build, enviar com mais força não corrige o sinal; nosso levantamento de lastmod em sitemaps encontrou 13 de 24 sites nesse estado. O fluxo de divulgação do produto foi pensado para revisar a esteira inteira, não um único endpoint. A área de desenvolvedor de API e MCP mostra como ligar o envio à sua própria publicação.
Perguntas frequentes
O IndexNow funciona para o Google?
O Google não aparece entre os participantes listados no indexnow.org. Não testamos se o Google lê esses envios por outra via, então não afirmamos nem uma coisa nem outra.
Com que frequência posso enviar?
O protocolo não publica um limite por hora, mas o 429 existe justamente para excesso de envios. Para conteúdo gerado por usuários, a orientação oficial é reduzir de forma gradual: cada item até 20, depois um a cada cinco até 100, depois um a cada dez até 1000.
Preciso do Bing Webmaster Tools?
Não para enviar. Precisa para verificar: é onde você vê se as URLs foram recebidas, e é a única confirmação gratuita do protocolo.
Dá para trocar a chave depois?
Dá. Hospede o novo arquivo, troque o valor no script e mantenha o arquivo antigo por um tempo. Os motores releem o arquivo da chave a cada envio, então não existe cadastro para refazer.
Faz parte do guia do QueryWin · Nível 2


