Robots.txt: guía completa de configuración para SEO

Cómo afecta robots.txt al rastreo, dónde no puede controlar la indexación y cómo probar las directivas sin bloquear páginas que necesitas que se encuentren.

Robots.txt es un archivo de texto plano en la raíz del sitio que indica a los rastreadores de los buscadores qué secciones pueden visitar y cuáles deben evitar. Es lo primero que lee un rastreador al llegar a tu sitio. El archivo existe desde 1994 y sigue siendo el estándar de facto para controlar el rastreo.

Robots.txt es una recomendación, no un mecanismo de cumplimiento obligatorio. Los bots fiables (Googlebot, Yandex) respetan las directivas. Los rastreadores maliciosos y los scrapers ignoran el archivo por completo. Para proteger datos sensibles, usa controles de acceso en el servidor y autenticación, no robots.txt.

La limitación clave: una página bloqueada con Disallow no desaparece del índice de forma automática. Si otros sitios enlazan a ella, Google puede indexar la URL sin visitarla y mostrar un snippet vacío en los resultados de búsqueda. Para eliminar por completo una página del índice necesitas otras herramientas.

Árbol de decisión de Googlebot: robots.txt controla el rastreo y la metaetiqueta noindex controla la indexación. Combinados, dan cuatro resultados distintos.

Qué es robots.txt y sus limitaciones

El archivo robots.txt debe estar en la raíz del dominio: https://example.com/robots.txt. Los subdominios tienen sus propios archivos: el de blog.example.com está en https://blog.example.com/robots.txt. El Robots Exclusion Standard (REP) define las directivas básicas; Google y Yandex lo han ampliado con funciones adicionales.

Control del rastreo

Impide que los bots visiten ciertas secciones: reduce la carga innecesaria en el servidor y protege el presupuesto de rastreo para las páginas valiosas.

Indica el sitemap

La directiva Sitemap ayuda a los buscadores a encontrar tu sitemap XML de inmediato, sin configuración adicional.

No protege el contenido

Robots.txt es público. No cifra ni oculta el contenido de las páginas: solo pide a los bots que no las visiten.

Formato y sintaxis

El archivo se compone de bloques llamados registros. Cada registro empieza con una o más directivas User-agent y puede incluir cualquier número de líneas Disallow, Allow, Crawl-delay y Sitemap. Los registros se separan con una línea en blanco. Los comentarios empiezan con #.

DirectivaCompatibilidadDescripción
User-agentTodosIdentificador del bot. * significa «todos los rastreadores». Un mismo bloque puede tener varias líneas User-agent.
DisallowTodosRuta que no se puede rastrear. Un valor vacío significa «no se bloquea nada» (permitir todo).
AllowGoogle, YandexPermite explícitamente una ruta dentro de una sección bloqueada. Tiene prioridad sobre Disallow.
Crawl-delayYandex, BingRetardo mínimo en segundos entre las peticiones del bot. Google lo ignora.
SitemapGoogle, Yandex, BingURL absoluta del sitemap XML. Se permiten varias líneas Sitemap.

Comodines: * y $

Google y Yandex admiten dos caracteres comodín en las rutas de Disallow y Allow. El asterisco * equivale a cualquier secuencia de caracteres (incluida la cadena vacía). El signo de dólar $ marca el final de la URL: coincidencia exacta hasta el último carácter.

text
# Block all URLs with the ?sort= parameter
Disallow: /*?sort=

# Block only /page (exact match, not /page/child)
Disallow: /page$

# Block all PDFs across the entire site
Disallow: /*.pdf$
Si Disallow y Allow entran en conflicto, gana la regla más específica (la de más caracteres). Si la longitud es igual, gana Allow. Este comportamiento es específico de Google; otros bots pueden implementarlo de otra forma.

La directiva Sitemap puede ir en cualquier parte del archivo; no hace falta que esté dentro de un bloque User-agent concreto. Usa siempre una URL absoluta completa:

text
Sitemap: https://example.com/sitemap.xml
Si usas un Sitemap Index, basta con una línea Sitemap que apunte al archivo índice: no hace falta listar cada sitemap hijo. El buscador los descubre todos a través del índice.

Ejemplos listos para distintos escenarios

Escenario 1: sitio público sencillo

En un sitio pequeño sin secciones privadas basta con un archivo mínimo: permitir todo, bloquear el panel de administración y las rutas técnicas, e indicar el sitemap.

text
# robots.txt for example.com — simple public site
User-agent: *
Disallow: /admin/
Disallow: /login
Disallow: /dashboard/

Sitemap: https://example.com/sitemap.xml

Escenario 2: gran e-commerce con catálogo y páginas con parámetros

Una tienda online genera cientos de miles de URL a través de filtros, ordenación y paginación. La mayoría son duplicados o páginas sin valor propio. Bloquea las URL con parámetros usando Disallow con comodines y deja accesibles las páginas limpias de categorías y productos.

text
# robots.txt for e-commerce example.com
User-agent: *

# Technical and admin sections
Disallow: /admin/
Disallow: /checkout/
Disallow: /cart
Disallow: /account/
Disallow: /api/

# Parametric catalogue duplicates
Disallow: /*?sort=
Disallow: /*?filter=
Disallow: /*?page=
Disallow: /*?ref=
Disallow: /search

# Explicitly allow a useful parameter in one section
Allow: /catalog/shoes?size=

Crawl-delay: 1

Sitemap: https://example.com/sitemap.xml
En páginas con parámetros y contenido único (por ejemplo, un producto con una talla o un color concretos), es mejor usar una etiqueta canonical en lugar de Disallow: así se preserva el presupuesto de rastreo sin cerrar la página por completo.

Escenario 3: sitio con páginas de staging y temporales

Las landings de webinars, los borradores, las páginas plantilla y las secciones de staging deben quedar fuera del rastreo. Usa Disallow por prefijo de ruta y, si hace falta, un bloque aparte para bots concretos.

text
# robots.txt for example.com — main site with staging sections
User-agent: *
Disallow: /webinar-drafts/
Disallow: /templates/
Disallow: /staging/
Disallow: /_preview/
Disallow: /thank-you-test

# Block the entire site for a specific bot (e.g. an aggressive crawler)
User-agent: AhrefsBot
Disallow: /

User-agent: SemrushBot
Disallow: /

Sitemap: https://example.com/sitemap.xml
Bloquear una sección con robots.txt no significa que su contenido sea confidencial. Las URL de las páginas de staging pueden seguir indexándose si sitios externos enlazan a ellas. Para un aislamiento real, usa HTTP Basic Auth o una lista de IP permitidas en el servidor.

Disallow vs meta robots noindex vs X-Robots-Tag

Son tres herramientas distintas con funciones distintas. Confundirlas lleva a un error clásico: una página está bloqueada en robots.txt y, además, tiene una metaetiqueta noindex. Google no puede leer esa metaetiqueta porque la página está bloqueada para el rastreo, así que la directiva noindex nunca se ejecuta.

HerramientaDónde estáQué haceCuándo usarla
Disallow en robots.txtrobots.txtImpide que el bot visite la URL. No la elimina del índice si ya está ahí.Bloquear secciones técnicas y reducir el consumo innecesario de presupuesto de rastreo.
meta robots noindexHTML <head>Permite que el bot visite la página, pero prohíbe añadirla al índice. El bot lee la etiqueta y cumple la directiva.Quitar una página concreta del índice (páginas de «gracias», paginación, páginas de filtros).
X-Robots-TagCabecera de respuesta HTTPEquivale a meta robots, pero funciona con cualquier tipo de archivo: PDF, imágenes, documentos.Controlar la indexación de recursos que no son HTML (PDF, DOCX, imágenes).
Nunca combines Disallow y noindex en la misma página. Si una página está bloqueada en robots.txt, Google no puede leer su noindex y puede mantener la URL en el índice con un snippet vacío. Usa noindex solo en páginas que el rastreador puede visitar.

Ejemplo de X-Robots-Tag en una cabecera de respuesta HTTP (configurada en Nginx o en el código de la aplicación):

text
# Nginx: prevent indexation of all PDFs
location ~* \.pdf$ {
    add_header X-Robots-Tag "noindex, nofollow";
}

Cómo probar robots.txt

Valida siempre los cambios antes de publicarlos. Una sola errata puede bloquear todo el sitio para los rastreadores.

  • Google Search Console → Probador de robots.txt: integrado en GSC. Introduce una URL para comprobar si Googlebot y otros bots de Google pueden acceder o si están bloqueados.
  • Yandex Webmaster → Análisis de robots.txt: la herramienta equivalente para Yandex. Muestra cómo interpreta Yandex Bot tu archivo.
  • Screaming Frog SEO Spider → Configuración → Robots.txt: rastrea el sitio respetando robots.txt y enumera las URL bloqueadas en el informe.
  • curl: comprobación rápida desde la línea de comandos para leer el archivo y verificar el estado HTTP.
Ejemplo de robots.txt que aplica las recomendaciones anteriores:
bash
# Fetch robots.txt and inspect its contents
curl -s https://example.com/robots.txt

# Check HTTP status (must be 200)
curl -I https://example.com/robots.txt

Errores habituales y cómo corregirlos

ErrorSíntomaSolución
Disallow: / para todo el sitioGooglebot deja de rastrear todo. GSC muestra las páginas como «bloqueadas por robots.txt».Elimina la línea o sustitúyela por una ruta concreta. Suele colarse durante los despliegues.
Espacio accidental en la rutaDisallow: /admin / (con espacio): el bot lee la ruta literalmente y no se bloquea nada.Elimina los espacios. Las rutas distinguen mayúsculas y minúsculas y son sensibles a los espacios.
noindex + Disallow en la misma páginaLa página se queda en el índice; la directiva noindex nunca se ejecuta.Quita el Disallow y deja solo el noindex. El bot debe poder visitar la página para leer la etiqueta.
Falta User-agent antes de las reglasError de sintaxis: las reglas no se aplican a ningún bot.Añade User-agent: * antes del bloque Disallow/Allow.
robots.txt devuelve 404 o 500Un 404 se trata como «sin restricciones»; un 500 detiene el rastreo de forma temporal.Asegúrate de que responde con HTTP 200. Un archivo vacío equivale a «permitir todo».

Recomendaciones de seguridad

Robots.txt es público y lo indexan los buscadores: cualquiera puede leerlo. Publicar en robots.txt rutas a paneles de administración, copias de seguridad, APIs internas o archivos de configuración equivale, en la práctica, a entregar a un atacante un mapa de tu sitio.

No uses robots.txt como única protección de las secciones sensibles. Una ruta como Disallow: /internal-api/v2/keys/ indica al atacante exactamente dónde buscar.
  • No expongas rutas sensibles: copias de seguridad (.zip, .sql), archivos de configuración (.env, config.php) y APIs internas.
  • Protege las secciones confidenciales en el servidor: HTTP Basic Auth, lista de IP permitidas u OAuth, y no solo con robots.txt.
  • Mantén la lista de Disallow al mínimo: solo las rutas que realmente deban quedar fuera del rastreo por motivos de SEO.
  • Revisa robots.txt en GSC con regularidad: comprueba que ningún despliegue haya introducido un Disallow: / por error.

Lista de comprobación y ejemplo final

  • El archivo es accesible en https://example.com/robots.txt y devuelve HTTP 200
  • Codificación UTF-8, sin BOM (Byte Order Mark)
  • Cada bloque empieza con User-agent
  • Una línea en blanco separa los bloques de distintos User-agent
  • No hay combinación de Disallow + noindex en la misma página
  • No hay rutas sensibles expuestas públicamente
  • Crawl-delay configurado para Yandex si la carga del servidor es alta
  • La directiva Sitemap apunta al archivo índice raíz
  • El archivo está validado en GSC y en Yandex Webmaster
  • Screaming Frog muestra el número esperado de URL bloqueadas

Ejemplo final de robots.txt para example.com con comentarios: una plantilla universal que cubre la mayoría de los escenarios:

text
# robots.txt for example.com
# Updated: 2026-05-15

# Rules for all crawlers
User-agent: *

# Admin and auth sections
Disallow: /admin/
Disallow: /login
Disallow: /dashboard/
Disallow: /account/

# Technical paths
Disallow: /api/
Disallow: /_next/
Disallow: /cdn-cgi/

# Parametric duplicates (e-commerce)
Disallow: /*?sort=
Disallow: /*?filter=
Disallow: /*?ref=
Disallow: /search

# Staging and temporary pages
Disallow: /staging/
Disallow: /webinar-drafts/
Disallow: /templates/

# Explicit allow for a useful API path
Allow: /api/og-image/

# Crawl rate for Yandex
User-agent: Yandex
Crawl-delay: 1

# Aggressive SEO bots (optional)
User-agent: AhrefsBot
Disallow: /

User-agent: SemrushBot
Disallow: /

# Sitemap
Sitemap: https://example.com/sitemap.xml

Preguntas frecuentes

¿Robots.txt afecta al posicionamiento?
Indirectamente. El archivo no es en sí una señal de posicionamiento, pero bloquear páginas con Disallow reduce el rastreo de esas páginas. Si bloqueas páginas importantes, perderán visibilidad. Si bloqueas URL duplicadas con parámetros, liberas presupuesto de rastreo para las páginas valiosas.
¿Qué pasa si robots.txt devuelve 404?
Google interpreta un robots.txt inexistente (404) como «sin restricciones» y rastrea todo el sitio. Un error 500 o un timeout se trata como un bloqueo temporal: Google pausa el rastreo hasta que el archivo vuelva a estar disponible.
¿Puedo definir reglas distintas para Googlebot y Yandex en un mismo archivo?
Sí. Crea dos bloques User-agent separados. Googlebot lee solo su bloque, y Yandex, solo el suyo. El bloque User-agent: * se aplica a todos los bots que no tienen un bloque propio.
¿Disallow: / bloquea todo el sitio? ¿Cómo lo arreglo rápido?
Sustituye o elimina la línea Disallow: / del bloque User-agent: *. Tras el despliegue, comprueba la URL en GSC con la herramienta de inspección de URL. El rastreo normal se recupera en unos días tras la corrección.
¿Cómo bloqueo un solo archivo sin bloquear todo su directorio?
Usa una ruta exacta sin barra final: Disallow: /private-doc.pdf. Para bloquear una extensión en todo el sitio, usa un comodín: Disallow: /*.pdf$

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it