Mientras estaba registrando el sitio en Bing, me enteré de que Bing ofrece una función llamada IndexNow.
Lo esencial es que, usando una clave de API, puedes enviar una solicitud de indexación en cuanto publicas un artículo.

Si creas una solicitud como la siguiente con fetch y la vinculas a la funcionalidad de publicación, puedes guardar el artículo en la base de datos y al mismo tiempo enviar la solicitud de creación de índice.
POST /IndexNow HTTP/1.1
Content-Type: application/json; charset=utf-8
Host: api.indexnow.org
{
"host": "www.example.org",
"key": "f9ee84af58564dacb6bfe55d808a252c",
"keyLocation": "https://www.example.org/f9ee84af58564dacb6bfe55d808a252c.txt",
"urlList": [
"https://www.example.org/url1",
"https://www.example.org/folder/url2",
"https://www.example.org/url3"
]
}Entonces revisé también las API de otros sitios y vi que Naver y Google tenían API.
En Naver, Webmaster ya admite IndexNow.
Solo cambia el host; los demás elementos son todos iguales.
Así que decidí probar IndexNow.

1. ¿Qué es IndexNow?

En el método de búsqueda tradicional, el motor de búsqueda rastrea tu sitio por su cuenta, comprueba si hay actualizaciones y luego realiza la indexación.
Si el rastreo no se produce, no queda más que esperar indefinidamente.
La tecnología que surgió para resolver este problema es precisamente IndexNow.

Cada vez que se crea, elimina o modifica un artículo del sitio, se hace un push al servidor.
Cuando el propio sitio web envía la solicitud, el motor de búsqueda programa la indexación de la URL.
2. Motores de búsqueda compatibles
Actualmente los siguientes motores de búsqueda admiten IndexNow.
Ten en cuenta que el host de la API varía un poco según el sitio.

Para la información que proporciona Naver, consulta el siguiente enlace.
3. Método de implementación
1) Crear el archivo de clave
Coloca un archivo <key>.txt en la raíz del sitio para verificar la propiedad del sitio.
Dentro de este bloc de notas solo debe estar la cadena de la clave.
https://example.com/1234567890ABCDEF.txt2) Enviar los cambios de URL al motor de búsqueda
Envía el siguiente JSON mediante POST.
Cuando el motor de búsqueda recibe la solicitud, programa un recrawl rápido de esas URL.
{
"host": "example.com",
"key": "1234567890ABCDEF",
"keyLocation": "https://example.com/1234567890ABCDEF.txt",
"urlList": [
"https://example.com/post/123",
"https://example.com/about"
]
}
4. Uso en Nextjs
Existe una librería npm para IndexNow, pero como el código en sí es sencillo, mejor creamos simplemente una función.
Puedes hacerla tú mismo sin problema, pero gpt o el hermano claude la dejan perfecta.
No es algo especialmente importante, así que pídele que la genere y al menos léela con atención.
type IndexNowPayload = {
host: string;
key: string;
keyLocation: string;
urlList: string[];
};
const INDEXNOW_ENDPOINT = "https://api.indexnow.org/indexnow"; // Bing/공용용
export async function submitToIndexNow(
urls: string[],
options?: {
host?: string;
key?: string;
keyLocation?: string;
endpoint?: string; // 필요하면 네이버용 endpoint 등으로 바꿔 쓰기
}
): Promise<void> {
if (!urls.length) return;
const host =
options?.host ??
process.env.INDEXNOW_HOST ?? // 예: "earthscience.kr"
new URL(urls[0]).host;
const key = options?.key ?? process.env.INDEXNOW_KEY;
const keyLocation =
options?.keyLocation ??
process.env.INDEXNOW_KEY_LOCATION ?? // 예: "https://earthscience.kr/1234567890ABCDEF.txt"
`https://${host}/${key}.txt`;
const endpoint = options?.endpoint ?? INDEXNOW_ENDPOINT;
if (!key) {
throw new Error("IndexNow key가 설정되지 않았습니다. 환경변수 INDEXNOW_KEY를 확인하세요.");
}
const payload: IndexNowPayload = {
host,
key,
keyLocation,
urlList: urls,
};
const res = await fetch(endpoint, {
method: "POST",
headers: {
"Content-Type": "application/json; charset=utf-8",
},
body: JSON.stringify(payload),
});
if (!res.ok) {
const text = await res.text().catch(() => "");
throw new Error(
`IndexNow 요청 실패: ${res.status} ${res.statusText} ${text ? `- ${text}` : ""}`
);
}
}
Ten en cuenta que el endpoint de Naver es distinto, así que si quieres que cubra también Naver tienes que hacer fetch dos veces.
Ahora basta con añadir esto suavemente a las API de crear, editar y eliminar artículos.
export async function Post(request: NextRequest){
...
const post = await createPost({
title,
excerpt: excerpt || "",
content,
category: category || "기타",
categoryId: categoryId || null,
thumbnail: thumbnail || null,
published: published || false,
});
// IndexNow에 새 글 알림 (published인 경우만)
if (post.published && post.slug) {
try {
const postUrl = `${process.env.NEXT_PUBLIC_URL}/post/${post.slug}`;
await submitToIndexNow([postUrl]);
console.log('IndexNow 제출 성공:', postUrl);
} catch (indexError) {
console.error('IndexNow 제출 실패:', indexError);
// IndexNow 실패해도 글 발행은 성공으로 처리
}
}
...
}5. Solución de problemas
En Bing el registro funcionaba bien, pero en Naver se producía un fallo al registrarlo.
Buscando información, vi que en Naver, al introducir el host, hay que omitir https://.
Hay que extraer únicamente el host real mediante un proceso como el siguiente.
options?.origin ??
process.env.NEXT_PUBLIC_URL ?? // 보통 https://도메인
new URL(urls[0]).origin;
const originUrl = new URL(origin);
const host = options?.host ?? originUrl.host; // ✅ 도메인만Por ejemplo, hay que cambiarlo como se muestra a continuación.
{
"host": "https://earthscience.kr" // ¡Provoca error 422!
"host": "earthscience.kr" // Esto sí pasa
}6. Reseña

Probé a publicar y modificar una vez este mismo artículo que estoy escribiendo ahora como prueba y parece que funciona bien.
Pensar que de ahora en adelante Bing y Naver se rastrearán automáticamente sin tener que acceder por separado resulta bastante cómodo.
Durante un tiempo observaré cómo se comporta.
댓글을 불러오는 중...