Cómo escribir un robots.txt: directivas, coincidencia y lo que no puede ocultar
Publicado el 21/5/2026 · 10 min de lectura · Herramientas para desarrolladores
Daniel Okonkwo — Desarrollador front-end y redactor de Tecnología en OneKitly
Rendimiento web · Formatos de archivo
Verificado con 2 fuentes
Un robots.txt es un archivo de texto UTF-8 simple que debe estar en la ruta de nivel superior de un host, en /robots.txt en minúsculas, y se aplica solo a ese host, protocolo y puerto exactos — https y http, y cada subdominio, necesitan el suyo propio. Contiene grupos. Un grupo empieza con una o más líneas User-agent que nombran a los rastreadores a los que se dirige, con * para todos, y sigue con líneas Disallow y Allow cuyos valores son prefijos de ruta de URL. Una línea Sitemap da la URL absoluta de un mapa del sitio y es independiente de cualquier grupo. Google honra solo user-agent, disallow, allow y sitemap, e ignora cualquier otro campo. En las rutas se admiten dos caracteres especiales: * coincide con cero o más caracteres cualesquiera y $ ancla el final de la URL. Cuando coinciden varias reglas gana la más específica, medida por la longitud de la ruta de la regla en octetos; a igual especificidad gana la menos restrictiva, de modo que un Allow vence a un Disallow de la misma longitud. Lo crucial es lo que el archivo no es. Es una instrucción de rastreo, no un control de acceso ni un mecanismo de desindexación. Una URL no permitida puede seguir apareciendo en los resultados si otros sitios enlazan a ella, porque el enlace y su texto ancla bastan para indexar la dirección sin descargar la página. Una línea noindex en robots.txt no está admitida y no hace nada. Y el archivo es público por definición: cada ruta que prohíbes es una ruta que has anunciado.
Cuatro directivas, dos comodines, un archivo en la raíz del host. Es una instrucción de rastreo y nada más: no retira una página de los resultados, no restringe el acceso y publica cada ruta que enumeras en él.
Una instrucción de rastreo, ni una cerradura ni un borrador
Google lo dice sin rodeos: robots.txt no es un mecanismo para mantener una página fuera de Google, y una página no permitida en robots.txt puede seguir indexándose si otros sitios enlazan a ella. El mecanismo se ve fácil una vez enunciado. Disallow le pide a un rastreador educado que no descargue la URL. No dice nada sobre si la dirección puede aparecer en un índice, y un enlace desde otro sitio aporta lo suficiente — la propia URL, más el texto ancla que apunta a ella — para listar la página sin descargarla jamás. El resultado es el conocido listado de búsqueda con una URL desnuda, sin título tomado de la página ni descripción, justo donde el dueño del sitio creía haberla eliminado.
Las herramientas correctas dependen de lo que quieras de verdad. Para mantener una página fuera de los resultados, sirve un noindex — o una etiqueta meta robots en la cabecera del documento, o una cabecera de respuesta X-Robots-Tag, que además funciona con archivos sin cabecera HTML, como los PDF. Para sustraer un contenido a todo el mundo, ponlo tras autenticación; nada declarativo en un archivo de texto público ha restringido nunca el acceso, y el RFC 9309 lo dice sin rodeos al calificar el protocolo de no sustituto de medidas reales de seguridad. Y hay una trampa de orden para quien combina ambas cosas: si prohíbes una URL, el rastreador nunca la descargará, nunca verá el noindex que le añadiste, y la página puede persistir indefinidamente en el índice. Déjala rastreable hasta que desaparezca y prohíbela después, si todavía quieres.
Cómo funciona la coincidencia: prefijos, dos comodines y la regla más larga
Cada valor de Disallow y Allow se compara como prefijo de la ruta de la URL, así que Disallow: /admin bloquea por igual /admin, /admin/, /administrator y /admin-tools. Añadir una barra final lo estrecha al directorio. Dos caracteres especiales lo afinan: * representa cero o más caracteres cualesquiera y $ ancla el final de la URL, de modo que Disallow: /*.pdf$ bloquea toda URL terminada en .pdf y deja accesible /report.pdf?download=1, porque la cadena de consulta viene después del ancla. Un comodín al final no añade nada: /* es la misma regla que /. Las rutas distinguen mayúsculas, así que /Admin y /admin son dos reglas distintas, aunque los nombres de las directivas no.
Cuando más de una regla coincide con una URL, gana la más específica, y aquí especificidad no significa nada más sofisticado que la longitud de la ruta de la regla en octetos. Disallow: /reports/ y Allow: /reports/public/ coinciden ambas con /reports/public/q3.html; el Allow es más largo, así que el archivo es rastreable. Invierte las longitudes y gana el Disallow. Si dos reglas coincidentes miden exactamente lo mismo, el empate va a la menos restrictiva, es decir al Allow. El orden en el archivo es irrelevante — un Disallow escrito después de un Allow no lo anula, y solo esto explica buena parte de los robots.txt que no se comportan como los lee su autor. Otros dos límites que conviene saber: Google lee como mucho 500 kibibytes e ignora todo lo posterior, y un valor Disallow vacío significa que no se bloquea nada, la forma idiomática de escribir un grupo que lo permite todo.
Dónde vive el archivo y por qué anuncia lo que querías ocultar
La regla de ubicación es absoluta y no admite configuración. El RFC 9309 exige que las reglas sean accesibles en un archivo llamado /robots.txt, todo en minúsculas, en la ruta de nivel superior del servicio, y Google añade que se aplican solo al host, protocolo y puerto donde el archivo está alojado. Léelo con atención, porque las consecuencias hacen tropezar constantemente. Un archivo en https://example.com/robots.txt no gobierna nada en http://example.com, nada en https://shop.example.com y nada en https://example.com:8443 — cada una de esas direcciones es un origen distinto que necesita su propio archivo. Un archivo colocado en un subdirectorio no se lee en absoluto. Y un sitio tras un CDN o un proxy inverso vale lo que valga su enrutado: si la plataforma sirve su propio robots.txt en la raíz, el tuyo de la aplicación no llega a ejecutarse.
Ahora la parte sin rodeos. El archivo se sirve a quien lo pida, no tiene autenticación y es con diferencia lo primero que lee un escáner automatizado. Escribir Disallow: /internal/backup-2019/ no oculta ese directorio: publica su existencia, su ruta exacta y el hecho de que lo consideraste digno de ocultar, en un documento que has invitado a leer a todo internet. Todas las herramientas de reconocimiento jamás escritas empiezan ahí, exactamente por eso. Si una ruta no debe alcanzarse, ponla tras autenticación o sácala del host público; si solo no debe rastrearse, prohíbe un prefijo padre amplio en lugar de nombrar la hoja sensible. Y trata el archivo como código: guárdalo en control de versiones, revisa los cambios como cualquier otro despliegue y compruébalo tras cada migración de plataforma, porque un Disallow: / perdido que llega a producción es la forma más rápida de retirar un sitio entero de la búsqueda y una de las más lentas de la que recuperarse.
| Línea | Qué hace | Estado | La trampa |
|---|---|---|---|
| User-agent: * | Abre un grupo y nombra a los rastreadores a los que se dirige; * se dirige a cualquier rastreador sin grupo propio | Respetada | Un rastreador obedece exactamente a un grupo — el más específico que lo nombra — e ignora por completo el grupo * en cuanto tiene el suyo |
| Disallow: /path | Pide a los rastreadores de este grupo que no descarguen ninguna URL cuya ruta empiece por ese prefijo | Respetada | Bloquea la descarga, no la indexación — una URL bloqueada y enlazada desde fuera puede seguir listada en resultados, sin fragmento |
| Allow: /path/file | Recorta una excepción dentro de un Disallow más amplio del mismo grupo | Respetada | Solo gana si su ruta es más larga que el Disallow al que se enfrenta; a igual longitud gana el Allow, más corta pierde |
| Sitemap: https://…/sitemap.xml | Señala un mapa del sitio a los rastreadores; puede aparecer en cualquier parte del archivo y no pertenece a ningún grupo | Respetada | El valor debe ser una URL absoluta completa con el esquema incluido; una ruta relativa se descarta en silencio |
| Crawl-delay: 10 | Pide a un rastreador que espere entre peticiones; extensión de fabricante, nunca parte del protocolo | Ignorada por Google | Algunos rastreadores la respetan y otros no, así que no sirve para controlar la carga; limita el ritmo en el servidor |
| Noindex: /path | Nada. Parece que debería retirar una página del índice y no lo hace | No admitida | Usa una etiqueta meta robots noindex en la cabecera de la página, o una cabecera de respuesta X-Robots-Tag, y deja la URL rastreable para que la regla pueda leerse |
Preguntas frecuentes
- ¿Puedo usar robots.txt para mantener una página privada fuera de Google?
- No, en ambos sentidos. Google dice sin rodeos que robots.txt no es un mecanismo para mantener una página fuera de Google, y una URL prohibida enlazada desde cualquier otro sitio puede seguir listándose usando solo el enlace y su texto ancla. Tampoco es privada en ningún sentido real: robots.txt es solo una petición, respetada por los buscadores e ignorada por todo lo que tenga interés en ignorarla, y el propio archivo difunde la ruta. Para la visibilidad en búsqueda usa un noindex, servido como etiqueta meta robots o como cabecera X-Robots-Tag. Para privacidad de verdad usa autenticación. Son dos problemas distintos y robots.txt no resuelve ninguno.
- ¿Los subdominios y http frente a https comparten un solo robots.txt?
- No. Las reglas se aplican solo al host, protocolo y puerto exactos que sirvieron el archivo, así que https://example.com, http://example.com, https://www.example.com y https://api.example.com son cuatro ámbitos distintos que necesitan cuatro archivos distintos — aunque resuelvan al mismo servidor y a la misma raíz de documentos. Es el segundo error de configuración más común, tras colocar el archivo en un subdirectorio, donde no se lee jamás. Consecuencia práctica: si rediriges http a https, el rastreador sigue la redirección para descargar el archivo, así que la copia https gobierna ambos de hecho; si no rediriges, el origen http no tiene reglas y se rastrea libremente.
- Prohibí una página pero sigue en los resultados. ¿Y ahora qué?
- Es el comportamiento esperado, y la solución es invertir el orden de las operaciones. Quita el Disallow para que la página vuelva a ser rastreable, añade un noindex — etiqueta meta robots o cabecera X-Robots-Tag — y espera a que la página se vuelva a rastrear y desaparezca. El enfoque original falló por circularidad: mientras la URL está prohibida el rastreador nunca la descarga, así que nunca ve el noindex que le pusiste, y el listado construido a partir de enlaces entrantes persiste indefinidamente. Una vez que la página ha salido del índice puedes restablecer el Disallow para ahorrar presupuesto de rastreo, aunque a esas alturas suele aportar muy poco.
Artículos que podrían interesarte
Todas las guías →Herramientas relacionadas
Fuentes
¿Has detectado un error en este artículo?