IndexNow: avisar al instante a Bing, Yandex y otros · Lección 4 de 4
Automatizar el aviso al publicar
Lo práctico es un script que lea el sitemap publicado, compruebe que la clave responde bien y mande las direcciones por IndexNow en tandas de hasta 10.000. Se corre después de cada publicación, como un paso más del despliegue.
El script
// avisar-indexnow.mjs · Uso: node avisar-indexnow.mjs tusitio.com <clave> [--enviar]
const [host, clave, modo] = process.argv.slice(2);
const base = `https://${host}`;
const archivo = await fetch(`${base}/${clave}.txt`);
if (archivo.status !== 200 || (await archivo.text()).trim() !== clave) {
throw new Error("La clave no está publicada bien");
}
// Lee el sitemap; si es un índice de sitemaps, lee cada uno.
async function direcciones(url) {
const xml = await (await fetch(url)).text();
const locs = [...xml.matchAll(/<loc>([^<]+)<\/loc>/g)].map((m) => m[1].replace(/&/g, "&"));
if (!/<sitemapindex/i.test(xml)) return locs;
const todas = [];
for (const s of locs) todas.push(...(await direcciones(s)));
return todas;
}
const urls = await direcciones(`${base}/sitemap.xml`);
console.log(`${urls.length} direcciones en el sitemap`);
if (modo !== "--enviar") process.exit(0); // simulacro
for (let i = 0; i < urls.length; i += 10000) {
const r = await fetch("https://api.indexnow.org/indexnow", {
method: "POST",
headers: { "Content-Type": "application/json; charset=utf-8" },
body: JSON.stringify({ host, key: clave, keyLocation: `${base}/${clave}.txt`,
urlList: urls.slice(i, i + 10000) }),
});
console.log(`Tanda ${i / 10000 + 1}: ${r.status}`);
}Tiene un simulacro (sin --enviar) que solo cuenta las direcciones y comprueba la clave: correlo primero.
Conectarlo con la publicación
- En un proyecto con
package.json, agregá un comando:"indexnow": "node scripts/avisar-indexnow.mjs tusitio.com <clave> --enviar"y corrélo después de publicar. - En un servicio de despliegue continuo, sumalo como último paso, después de que el sitio nuevo esté en línea (si avisás antes, el robot puede encontrar la versión vieja).
- Para un catálogo enorme, filtrá por sección (
/producto/) y avisá solo lo que cambió.
Ejercicio sobre tu sitio
- Copiá el script, corré el simulacro con tu dominio y tu clave, y anotá cuántas direcciones encuentra.
- Corré el envío real y anotá el código de respuesta de cada tanda.
- Agregá el comando a tu proceso de publicación para no olvidarlo.
Preguntas frecuentes
¿Puedo avisar todo el sitemap en cada publicación?
En sitios chicos no es un problema. En sitios grandes conviene avisar solo lo nuevo o cambiado, para no mandar miles de direcciones que no cambiaron.
¿Funciona con índices de sitemaps?
Sí, si el script los recorre: lee el índice, abre cada sitemap que lista y junta todas las direcciones antes de enviar.