Next.js

Cómo evitar que Google indexe los archivos de /_next/ en Next.js

AutorAngel Cruz
Publicado
Lectura4 min de lectura
Actualizado
Cómo evitar que Google indexe los archivos de /_next/ en Next.js

Revisando el informe de cobertura de Google Search Console de este blog me encontré con decenas de URLs raras en la lista de "Rastreada: actualmente sin indexar": archivos como /_next/static/chunks/4bd1b696-…js y hojas de estilo /_next/static/css/…css. No son páginas, son los recursos estáticos que genera Next.js. Google los estaba descubriendo, rastreando e intentando indexar. Esto es lo que pasa y cómo lo resolví sin romper nada.

Por qué Google intenta indexar /_next/

Cuando compilas una app de Next.js, todo el JavaScript y el CSS se sirven con un hash en la ruta, bajo /_next/static/. Tu HTML los referencia con etiquetas <script> y <link>, y ahí está el problema: Google sigue esos enlaces. Descubre las URLs de los assets, las rastrea y, como cualquier URL que encuentra, evalúa si las indexa.

No las indexa de verdad (un chunk de JS no tiene contenido que rankear), pero sí aparecen en el informe como "Rastreada: actualmente sin indexar". El resultado: tu informe de cobertura se llena de ruido, cuesta distinguir las páginas que sí importan, y se gasta algo de presupuesto de rastreo en archivos que nunca deberían estar ahí.

El error común: bloquearlo en robots.txt

La reacción instintiva es agregar esto al robots.txt:

# NO hagas esto
User-agent: *
Disallow: /_next/

Es un tiro en el pie. Si bloqueas /_next/ en robots.txt, le impides a Google descargar el JavaScript y el CSS de tu sitio. Y Google necesita esos recursos para renderizar tus páginas: sin el CSS y el JS, ve una versión rota o vacía de tu contenido. Google lo dice explícitamente en su documentación: no bloquees los recursos necesarios para el renderizado.

La diferencia es sutil pero importante:

  • Disallow en robots.txt = "ni siquiera descargues esto". Rompe el renderizado.
  • noindex = "descárgalo si lo necesitas, pero no lo indexes como una URL". Es justo lo que queremos.

La solución: X-Robots-Tag: noindex en el header

La forma correcta es enviar la cabecera HTTP X-Robots-Tag: noindex solo en las respuestas de /_next/static/. Así Google puede seguir descargando los assets para renderizar tus páginas, pero entiende que no debe indexarlos como URLs independientes.

En Next.js esto se configura en el headers() de next.config.ts:

// next.config.ts
const nextConfig = {
  async headers() {
    return [
      // ...tus otros headers (seguridad, caché, etc.)...
 
      // Assets estáticos con hash de build (JS/CSS/fuentes): noindex para que
      // no aparezcan como "Crawled - not indexed" en Search Console.
      {
        source: "/_next/static/:path*",
        headers: [{ key: "X-Robots-Tag", value: "noindex" }],
      },
    ];
  },
};
 
export default nextConfig;

Eso es todo. El patrón /_next/static/:path* aplica la cabecera a cualquier archivo dentro de esa ruta, sin tocar el resto del sitio.

Por qué solo /_next/static y no /_next/image

Fíjate que el source apunta a /_next/static/, no a todo /_next/. Es a propósito: Next.js sirve las imágenes optimizadas bajo /_next/image, y esas las quieres en el índice — son las que aparecen en Google Imágenes y pueden traer tráfico. Si pusieras noindex a todo /_next/, sacarías tus imágenes optimizadas de la búsqueda. Limita la regla a /_next/static/ y deja /_next/image intacto.

Cómo verificar que funciona

Una vez desplegado, comprueba la cabecera con curl:

curl -sI https://tu-sitio.com/_next/static/chunks/main.js | grep -i x-robots-tag
# x-robots-tag: noindex

Si ves x-robots-tag: noindex, el header está activo. En Search Console, usa la Inspección de URL sobre uno de esos assets: con el tiempo pasará de "Rastreada: actualmente sin indexar" a "Excluida por la etiqueta 'noindex'", que es el estado esperado y limpio. La limpieza del informe no es instantánea —depende de cuándo Google vuelva a rastrear—, pero el ruido desaparece solo.

Preguntas frecuentes

¿Por qué Google indexa los archivos de /_next/?

Porque tu HTML los referencia con etiquetas <script> y <link>. Google sigue esas URLs, las rastrea y las evalúa para indexarlas, igual que haría con cualquier enlace. Los marca como "Rastreada: actualmente sin indexar" en Search Console.

¿Puedo bloquear /_next/ en robots.txt?

No deberías. Bloquearlo impide que Google descargue el JS y el CSS necesarios para renderizar tus páginas, lo que perjudica tu SEO. Usa X-Robots-Tag: noindex en su lugar: permite la descarga y solo evita la indexación.

¿La cabecera noindex afecta el rendimiento o el renderizado?

No. X-Robots-Tag es una instrucción solo para los buscadores; los navegadores la ignoran. Tus usuarios descargan y ejecutan los assets con normalidad, y Google también puede descargarlos para renderizar.

¿Esto saca mis imágenes de Google Imágenes?

No, siempre que limites la regla a /_next/static/. Las imágenes optimizadas de Next.js se sirven bajo /_next/image y quedan fuera de la regla, así que siguen siendo indexables.

Cierre

El ruido de /_next/static en Search Console es inofensivo, pero ensucia el informe de cobertura y complica detectar problemas reales de indexación. La solución no es bloquear con robots.txt —eso rompe el renderizado—, sino enviar X-Robots-Tag: noindex solo en esos assets desde el headers() de next.config.ts. Dos líneas de configuración y el informe vuelve a mostrar únicamente lo que importa: tus páginas.