---
title: "Cómo evitar que Google indexe los archivos de /_next/ en Next.js"
excerpt: "Google intenta indexar los chunks JS y CSS de /_next/static y los marca como 'Rastreada: actualmente sin indexar' en Search Console. Te explico por qué pasa, por qué NO se arregla con robots.txt y cuál es la solución correcta con X-Robots-Tag."
date: "2026-06-16T20:00:00.000Z"
lastModified: "2026-06-16T20:00:00.000Z"
category: "Next.js"
tech_article: true
seo_title: "Evitar que Google indexe /_next/static en Next.js"
seo_description: "Google marca los chunks JS/CSS de /_next/static como 'Crawled - not indexed' en Search Console. Cómo pararlo con X-Robots-Tag sin romper el renderizado, con el código real."
author:
  name: "Angel Cruz"
  picture: "https://angelcruzdevcdn.nyc3.cdn.digitaloceanspaces.com/images/me/angel-cruz.png"
ogImage:
  url: "https://angelcruzdevcdn.nyc3.cdn.digitaloceanspaces.com/content/4/01KF4MJMCWDRH9M8H7J0P25GP9.png"
---

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`:

```bash
# 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`:

```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 **sí** 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`:

```bash
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.

---

## Sitemap

Índice completo del sitio: [/sitemap.md](https://www.angelcruz.dev/sitemap.md)

Canónico HTML: [https://www.angelcruz.dev/post/noindex-next-static-google](https://www.angelcruz.dev/post/noindex-next-static-google)
