El archivo robots.txt es un archivo de texto plano en la raíz de tu dominio que indica a los rastreadores (Googlebot, Bingbot y otros) qué rutas pueden o no pueden rastrear. Es el primer archivo que consulta un buscador al llegar a tu web. Sirve para evitar que pierdan tiempo en zonas sin valor (carritos, búsquedas internas, filtros infinitos) y para indicar dónde está tu sitemap. Pero también es el origen de algunos de los desastres SEO más comunes: una sola línea mal escrita puede bloquear la web entera. Aquí aprenderás la sintaxis, verás ejemplos reales y sabrás qué no hacer.
Sintaxis básica
Un robots.txt se compone de grupos. Cada grupo empieza por una o varias líneas User-agent y le siguen reglas Disallow (no rastrear) o Allow (sí rastrear):
User-agent: *
Disallow: /admin/
Allow: /admin/publico/
Sitemap: https://ejemplo.com/sitemap.xml
| Directiva | Función |
|---|---|
User-agent |
A qué rastreador se aplica el grupo (* = todos) |
Disallow |
Ruta que no debe rastrearse |
Allow |
Excepción dentro de una ruta bloqueada |
Sitemap |
URL absoluta del sitemap (puede haber varias) |
Reglas importantes:
- Las rutas distinguen mayúsculas y minúsculas:
/Admin/no es/admin/. *sustituye cualquier secuencia de caracteres y$marca el final de la URL:Disallow: /*.pdf$bloquea los PDF.- Cuando dos reglas coinciden, Google aplica la más específica (la más larga). Si empatan, gana
Allow. - Un rastreador sigue solo el grupo más específico que le corresponde. Si existe un grupo
User-agent: Googlebot, Googlebot ignora el grupo*. Disallow:vacío significa «todo permitido».- Google procesa como máximo los primeros 500 KiB del archivo.
Ejemplo para WordPress
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /?s=
Disallow: /search/
Sitemap: https://ejemplo.com/sitemap_index.xml
No bloquees /wp-content/ ni /wp-includes/: ahí están el CSS, el JavaScript y las imágenes que Google necesita para ver la página como un usuario.
Ejemplo para una tienda online
User-agent: *
Disallow: /carrito/
Disallow: /checkout/
Disallow: /mi-cuenta/
Disallow: /*?orderby=
Disallow: /*?filter_
Disallow: /*&add-to-cart=
Sitemap: https://tienda.ejemplo.com/sitemap.xml
En tiendas con filtros (talla, color, precio) las combinaciones de parámetros generan miles de URL casi idénticas. Bloquear los parámetros que no aportan valor ayuda a que Google dedique su rastreo a categorías y productos.
Si no quieres escribirlo a mano, el generador de robots.txt crea el archivo a partir de unas pocas opciones.
Robots.txt frente a noindex
Es la confusión más frecuente:
| Necesidad | Herramienta |
|---|---|
| Que Google no rastree una zona (ahorrar rastreo) | Disallow en robots.txt |
| Que una página no aparezca en los resultados | <meta name="robots" content="noindex"> o cabecera X-Robots-Tag: noindex |
| Que nadie pueda acceder | Contraseña o autenticación en el servidor |
Si bloqueas una URL en robots.txt, Google no puede leer su etiqueta noindex. Si esa URL tiene enlaces, puede aparecer en los resultados igualmente, sin descripción. Para desindexar: permite el rastreo, añade noindex, espera a que Google la procese y, si quieres, bloquéala después.
Y recuerda: robots.txt es público. No lo uses para «esconder» rutas privadas; estás anunciando dónde están.
Bots de IA y otros rastreadores
Puedes dirigirte a rastreadores concretos por su user-agent:
User-agent: GPTBot
Disallow: /
User-agent: Google-Extended
Disallow: /
Google-Extended no afecta a la aparición en la Búsqueda de Google; controla si el contenido se usa para entrenar y mejorar los modelos de IA de Google. Los rastreadores serios respetan estas reglas, pero robots.txt es una convención, no un mecanismo de seguridad.
Errores frecuentes
Disallow: /olvidado tras el desarrollo. El entorno de pruebas se bloquea y, al publicar, se copia el robots.txt. Resultado: la web desaparece de Google en días.- Bloquear CSS y JS. Google no puede renderizar la página y la evalúa mal.
- Usar robots.txt para desindexar. Como hemos visto, no funciona; usa noindex.
- Reglas en el orden equivocado pensando que importa. Google no lee de arriba abajo: aplica la más específica.
- Archivo devuelto con error 5xx. Si el robots.txt da un error de servidor de forma continuada, Google puede dejar de rastrear el sitio. Un 404 en cambio se interpreta como «sin restricciones».
- Un robots.txt en
/blog/robots.txt. Solo vale el de la raíz del host.
Cómo probar tu robots.txt
- Abre
https://tudominio.com/robots.txty comprueba que responde con código 200 y texto plano. - Pega el contenido y una URL en el probador de robots.txt para ver si esa URL está permitida o bloqueada para cada user-agent.
- En Search Console, el informe de robots.txt muestra la versión que Google tiene en caché y los errores de análisis.
- Tras cualquier cambio importante, revisa el informe de indexación durante las semanas siguientes.
Casos especiales
- Entorno de pruebas (staging): en lugar de confiar solo en
Disallow: /, protégelo con contraseña. Así no se indexa aunque alguien enlace a él, y no hay riesgo de copiar el robots.txt equivocado a producción. - Subdominios:
blog.ejemplo.comytienda.ejemplo.comnecesitan cada uno su robots.txt; el del dominio principal no se aplica. - Webs multilingües en carpetas (
/es/,/en/,/mx/): comparten el robots.txt de la raíz. No bloquees carpetas de idioma para «evitar contenido duplicado»: para eso estánhreflangy las URL canónicas. - Recursos de terceros: no puedes controlar el robots.txt de un CDN externo; si alojas allí imágenes importantes, comprueba que no estén bloqueadas.
- Migraciones: al cambiar de dominio, el dominio antiguo no debe bloquear el rastreo; Google necesita rastrearlo para ver las redirecciones 301.
Lista de comprobación
- El archivo está en la raíz y devuelve 200.
- No hay un
Disallow: /accidental. - CSS, JS e imágenes no están bloqueados.
- Se bloquean búsquedas internas, carrito, cuenta y parámetros inútiles.
- Incluye la línea
Sitemap:con URL absoluta. - Las páginas que no deben salir en Google usan noindex, no robots.txt.
Para saber qué incluir en el sitemap que enlazas desde robots.txt, consulta la guía del sitemap XML.