Especificaciones de robots.txt

Resumen

En este documento, se explica la forma en que Google interpreta el archivo robots.txt que permite controlar cómo los rastreadores de sitios web de Google indexan y rastrean sitios web de acceso público.

Qué cambió

El 1 de julio de 2019, Google anunció que el protocolo de robots.txt estaba encaminado a convertirse en un estándar de Internet. Los cambios se reflejan en este documento.

Definiciones básicas

Definiciones
Rastreador Un rastreador es un servicio o agente que rastrea sitios web. Por lo general, el rastreador accede automáticamente y de manera recurrente a varias URL conocidas de un host que muestra contenido al que se puede acceder mediante navegadores web estándar. A medida que se encuentran nuevas URL (por diferentes medios, como vínculos de páginas ya rastreadas o archivos de mapas del sitio), estas se rastrean de la misma forma.
Usuario-agente Es un medio para identificar un rastreador específico o un conjunto de rastreadores.
Directivas Es la lista de lineamientos aplicables a un rastreador o grupo de rastreadores que se especifica en el archivo robots.txt.
URL Son los localizadores de recursos uniformes, según se describen en RFC 1738.
Específicos de Google Son elementos específicos de la implementación de robots.txt perteneciente a Google, que podrían no ser relevantes para otras partes.

Aplicabilidad

Todos los rastreadores automatizados de Google siguen los lineamientos que se indican en este documento. Cuando un agente accede a las URL en nombre de un usuario (por ejemplo, para traducción, suscripción manual a feeds, análisis de software malicioso, etc.), no es necesario que se apliquen estos lineamientos.

Ubicación del archivo y período de validez

El archivo robots.txt debe incluirse en el directorio de nivel superior del host y ser accesible a través del protocolo y el número de puerto apropiados. Todos los protocolos que suelen aceptarse para el archivo robots.txt están basados en URI y, en el caso específico de la Búsqueda de Google (por ejemplo, rastreo de sitios web), son "http" y "https". Cuando se utilizan estos protocolos, se accede al archivo robots.txt mediante una solicitud HTTP GET no condicional.

Elementos específicos de Google: Google también acepta y rastrea archivos robots.txt en sitios FTP. A los archivos robots.txt basados en FTP se accede mediante este protocolo con credenciales de acceso anónimas.

Las directivas que se incluyen en el archivo robots.txt se aplican únicamente al host, el protocolo y el número de puerto donde se aloja el archivo.

Ejemplos de URL de robots.txt válidas

Ejemplos de URL de robots.txt
http://example.com/robots.txt Se puede usar en los siguientes casos:
  • http://example.com/
  • http://example.com/folder/file
No se puede usar en los siguientes casos:
  • http://other.example.com/
  • https://example.com/
  • http://example.com:8181/
http://www.example.com/robots.txt

Se puede usar en el siguiente caso: http://www.example.com/

No se puede usar en los siguientes casos:

  • http://example.com/
  • http://shop.www.example.com/
  • http://www.shop.example.com/
http://example.com/folder/robots.txt No es un archivo robots.txt válido. Los rastreadores no buscan archivos robots.txt en los subdirectorios.
http://www.müller.eu/robots.txt Se puede usar en los siguientes casos:
  • http://www.müller.eu/
  • http://www.xn--mller-kva.eu/

No se puede usar en el siguiente caso: http://www.muller.eu/

ftp://example.com/robots.txt

Se puede usar en el siguiente caso: ftp://example.com/

No se puede usar en el siguiente caso: http://example.com/

Elementos específicos de Google: Utilizamos el archivo robots.txt para los recursos de FTP.

http://212.96.82.21/robots.txt

Se puede usar en el siguiente caso: http://212.96.82.21/

No se puede usar en el siguiente caso: http://example.com/ (aunque se aloje en 212.96.82.21)

http://example.com:80/robots.txt

Se puede usar en los siguientes casos:

  • http://example.com:80/
  • http://example.com/

No se puede usar en el siguiente caso: http://example.com:81/

http://example.com:8181/robots.txt

Se puede usar en el siguiente caso: http://example.com:8181/

No se puede usar en el siguiente caso: http://example.com/

Administración de códigos de resultado HTTP

Por lo general, hay tres resultados diferentes cuando se accede a los archivos robots.txt:

  • full allow: Se puede rastrear todo el contenido.
  • full disallow: No se puede rastrear ningún tipo de contenido.
  • conditional allow: Las directivas del archivo robots.txt determinan si se puede rastrear cierto contenido.
Administración de códigos de resultado HTTP
2xx (correcto) Son los códigos de resultado HTTP que indican el éxito de la operación con un "conditional allow" (permiso condicional) para el rastreo.
3xx (redireccionamiento) Google sigue, al menos, cinco saltos de redireccionamiento, según lo definido por RFC 1945 para HTTP/1.0 y, luego, se detiene y lo considera un error 404. No se recomienda el control de redireccionamientos de robots.txt a URL no admitidas. Como todavía no se obtuvieron reglas, los redireccionamientos se siguen durante, al menos, cinco saltos y, si no se encuentra un archivo robots.txt, Google lo interpreta como un error 404. No se recomienda el manejo de redireccionamientos lógicos para el archivo robots.txt basados en contenido HTML que muestra códigos de resultado 2xx (redireccionamientos de actualizaciones de metaetiquetas, de JavaScript o de marcos) y el contenido de la primera página se usa para encontrar reglas aplicables.
4xx (errores de cliente) Todos los errores 4xx se tratan de la misma manera y se asume que no hay ningún archivo robots.txt válido. Se asume que no existen restricciones, lo que supone un "full allow" (permiso completo) para el rastreo.
5xx (error del servidor)

Los errores del servidor se consideran errores temporales que provocan un "full disallow" (ningún permiso) para el rastreo. Se vuelve a realizar la solicitud hasta que se obtiene un código de resultado HTTP sin error del servidor. Un error 503 (Servicio no disponible) genera reintentos bastante frecuentes. Si el archivo robots.txt no está disponible durante más de 30 días, se usa la última copia de robots.txt almacenada en caché. Si no está disponible, Google asume que no hay restricciones de rastreo. Para suspender temporalmente el rastreo, se recomienda mostrar un código de resultado HTTP 503.

Elementos específicos de Google: Si podemos determinar que un sitio está configurado de forma incorrecta y muestra un error 5xx en lugar de un 404 para páginas faltantes, consideraremos el error 5xx de ese sitio como si fuera un 404.

Solicitudes sin éxito o datos incompletos El manejo de un archivo robots.txt al que no se puede acceder debido a un problema de DNS o de red (como tiempos de espera agotados, respuestas no válidas, restablecimientos o pérdidas de conexión, y errores de fragmentación de HTTP) se considera un error de servidor.
Almacenamiento en caché Por lo general, el contenido de robots.txt se almacena en caché hasta 24 horas, pero el período se puede prolongar cuando no es posible actualizar la versión en caché (por ejemplo, debido a tiempos de espera agotados o a errores 5xx). La respuesta almacenada en caché puede compartirse entre diferentes rastreadores. Google puede aumentar o disminuir la duración de la caché en función de los encabezados HTTP max-age Cache-Control.

Formato de archivo

El formato de archivo esperado es texto sin formato con la codificación UTF-8. El archivo está formado por líneas separadas por caracteres CR, CR/LF o LF.

Solo se consideran las líneas válidas. El resto del contenido se ignora. Por ejemplo, si el documento resultante es una página HTML, solo se tienen en cuenta las líneas de texto válidas; las demás se ignoran, y no se muestran mensajes de advertencia ni error.

Si se utiliza una codificación que genera caracteres que no representan un subconjunto de UTF-8, podría fallar el análisis del contenido del archivo.

Se ignorarán las marcas de orden de bytes BOM Unicode opcionales al principio del archivo robots.txt.

Cada línea válida está formada por un campo, dos puntos y un valor. Los espacios son opcionales, aunque se recomienda implementarlos para mejorar la legibilidad. Se pueden incluir comentarios en cualquier parte del archivo con el carácter "#"; todo el contenido después del inicio de un comentario hasta el final de la línea se considerará un comentario y, en consecuencia, se ignorará. El formato general es <field>:<value><#optional-comment>. Se ignorarán los espacios en blanco al comienzo y al final de la línea.

El elemento <field> distingue entre mayúsculas y minúsculas. El elemento <value> podría distinguir entre mayúsculas y minúsculas en función del elemento <field>.

No se admite el control de los elementos <field> con errores leves o de ortografía (por ejemplo, "usuarioagente" en lugar de "usuario-agente").

Se puede aplicar un tamaño de archivo máximo para cada rastreador. De esta manera, se ignorará el contenido que supere ese tamaño. Actualmente, Google aplica un límite de tamaño de 500 kibibytes (KiB). Para reducir el tamaño del archivo robots.txt, consolida las directivas que resultarían en un archivo robots.txt de gran tamaño. Por ejemplo, coloca el material excluido en un directorio separado.

Sintaxis formal y definición

A continuación, se incluye una descripción del Formato Backus-Naur Aumentado (ABNF), según RFC 5234

robotstxt = *(group / emptyline)
group = startgroupline                    ; We start with a user-agent
        *(startgroupline / emptyline)     ; ... and possibly more user-agents
        *(rule / emptyline)               ; followed by rules relevant for UAs

startgroupline = *WS "user-agent" *WS ":" *WS product-token EOL

rule = *WS ("allow" / "disallow") *WS ":" *WS (path-pattern / empty-pattern) EOL

; parser implementors: add additional lines you need (for example, Sitemaps), and
; be lenient when reading lines that don’t conform. Apply Postel’s law.

product-token = identifier / "*"
path-pattern = "/" *(UTF8-char-noctl)    ; valid URI path pattern; see 3.2.2
empty-pattern = *WS

identifier = 1*(%x2d / %x41-5a / %x5f / %x61-7a)
comment = "#" *(UTF8-char-noctl / WS / "#")
emptyline = EOL
EOL = *WS [comment] NL         ; end-of-line may have optional trailing comment
NL = %x0D / %x0A / %x0D.0A
WS = %x20 / %x09

; UTF8 derived from RFC3629, but excluding control characters
UTF8-char-noctl = UTF8-1-noctl / UTF8-2 / UTF8-3 / UTF8-4
UTF8-1-noctl    = %x21 / %x22 / %x24-7F  ; excluding control, space, '#'
UTF8-2          = %xC2-DF UTF8-tail
UTF8-3          = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) /
                  %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail )
UTF8-4          = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) /
                  %xF4 %x80-8F 2( UTF8-tail )
UTF8-tail       = %x80-BF

Agrupación de líneas y reglas

Una o más líneas de usuario-agente seguidas de una o más reglas. El grupo se termina con una línea de usuario-agente o con el final de archivo. El último grupo puede no tener reglas, lo que significa que permite todo de manera implícita.

Grupos de ejemplo:

user-agent: a
disallow: /c

user-agent: b
disallow: /d

user-agent: e
user-agent: f
disallow: /g

user-agent: h

Hay cuatro grupos diferentes especificados: uno para "a", otro para "b" y uno para "e" y "f". Excepto por el último grupo, cada grupo tiene su propia línea de "group-member". El último grupo está vacío. Observa el uso del espacio en blanco opcional y las líneas vacías para mejorar la legibilidad.

Orden de prioridad para usuarios-agentes

Solo un grupo es válido para un rastreador en particular. El rastreador debe determinar cuál es el grupo de líneas correcto buscando el que tenga el usuario-agente más específico con el que coincida. El rastreador ignora los demás grupos. El usuario-agente distingue entre mayúsculas y minúsculas. Se ignorará todo el texto que no coincida (por ejemplo, googlebot/1.2 y googlebot* son equivalentes a googlebot). El orden de los grupos dentro del archivo robots.txt es irrelevante.

Si hay más de un grupo para un usuario-agente específico, se combinan todas las reglas de los grupos aplicables a un usuario-agente específico.

Ejemplo

En el caso del siguiente archivo robots.txt:

user-agent: googlebot-news
(group 1)

user-agent: *
(group 2)

user-agent: googlebot
(group 3)

Los rastreadores elegirían el grupo relevante de la siguiente forma:

Grupo seguido por rastreador
Robot de Google para Noticias El grupo seguido es el grupo 1. Solo se sigue el grupo más específico; se ignorarán todos los demás.
Robot de Google (web) El grupo seguido es el grupo 3.
Robot de Google para Imágenes El grupo seguido es el grupo 3. Como no hay un grupo googlebot-images específico, se sigue el más genérico.
Robot de Google para Noticias (al rastrear imágenes) El grupo seguido es el grupo 1. Como a estas imágenes las rastrea el robot de Google para Noticias a fin de usarlas, solo se sigue el grupo de este robot.
Otro robot (web) El grupo seguido es el grupo 2.
Otro robot (Noticias) El grupo seguido es el grupo 2. Aunque haya una entrada de un rastreador relacionado, solo es válida si coincide de forma específica.

Consulta también los rastreadores de Google y las strings de usuario-agente.

Reglas de "group-member"

Esta sección solo aborda las reglas estándar de "group-member". Estas reglas también se llaman "directivas" para los rastreadores. Estas directivas se especifican con el formato directive: [path], en el que [path] es opcional. De manera predeterminada, no hay restricciones de rastreo para los rastreadores designados. Se ignorarán las directivas que no tengan un valor [path].

Se debe considerar que el valor [path], si se especifica, está relacionado con la raíz del sitio web a través del cual se accedió al archivo robots.txt (utilizando el mismo protocolo, número de puerto y nombres de dominio y de host). El valor de la ruta debe empezar con "/" para designar la raíz. La ruta distingue entre mayúsculas y minúsculas. Puedes obtener más información en la sección "Coincidencias de URL según los valores de ruta", que se encuentra más adelante.

disallow

La directiva disallow especifica las rutas a las que no deben acceder los rastreadores designados. Cuando no se especifica ninguna, se ignora la directiva.

Uso:

disallow: [path]

allow

La directiva allow especifica las rutas a las que pueden acceder los rastreadores designados. Cuando no se especifica ninguna, se ignora la directiva.

Uso:

allow: [path]

Coincidencias de URL según los valores de ruta

El valor de ruta se utiliza como base para determinar si una regla se aplica o no a una URL específica de un sitio. Excepto en el caso de los comodines, la ruta suele coincidir con el principio de una URL (y con cualquier URL válida que empiece con la misma ruta). Los caracteres ASCII que no son de 7 bits y aparecen en una ruta se pueden incluir como caracteres UTF-8 simples o codificados con escape porcentual según RFC 3986.

Google, Bing, Yahoo y Ask solo admiten los siguientes tipos de "comodines" para valores de ruta:

  • * designa 0 o más instancias de cualquier carácter válido.
  • $ designa el final de la URL.
Ejemplos de coincidencias de ruta
/ Coincide con la raíz y con cualquier URL de nivel inferior.
/* Equivale a /. Se ignora el comodín final.
/fish

Coincide con lo siguiente:

  • /fish
  • /fish.html
  • /fish/salmon.html
  • /fishheads
  • /fishheads/yummy.html
  • /fish.php?id=anything

No coincide con lo siguiente:

  • /Fish.asp
  • /catfish
  • /?id=fish
/fish*

Equivale a /fish. Se ignora el comodín final.

Coincide con lo siguiente:

  • /fish
  • /fish.html
  • /fish/salmon.html
  • /fishheads
  • /fishheads/yummy.html
  • /fish.php?id=anything

No coincide con lo siguiente:

  • /Fish.asp
  • /catfish
  • /?id=fish
/fish/

La barra final indica que esta ruta coincide con cualquiera que se incluya en esta carpeta.

Coincide con lo siguiente:

  • /fish/
  • /fish/?id=anything
  • /fish/salmon.htm

No coincide con lo siguiente:

  • /fish
  • /fish.html
  • /Fish/Salmon.asp
/*.php

Coincide con lo siguiente:

  • /filename.php
  • /folder/filename.php
  • /folder/filename.php?parameters
  • /folder/any.php.file.html
  • /filename.php/

No coincide con lo siguiente:

  • / (incluso si se asigna a /index.php)
  • /windows.PHP
/*.php$

Coincide con lo siguiente:

  • /filename.php
  • /folder/filename.php

No coincide con lo siguiente:

  • /filename.php?parameters
  • /filename.php/
  • /filename.php5
  • /windows.PHP
/fish*.php

Coincide con lo siguiente:

  • /fish.php
  • /fishheads/catfish.php?parameters

No coincide con lo siguiente: /Fish.PHP

Líneas de "non-group-member" compatibles con Google

Google, Ask, Bing y Yahoo admiten sitemap, como se define en sitemaps.org.

Uso:

sitemap: [absoluteURL]

[absoluteURL] dirige a un mapa de sitio, a un archivo de índice de mapa del sitio o a una URL equivalente. La URL no tiene que estar en el mismo host que el archivo robots.txt. Puede haber varias entradas de sitemap. Como se trata de líneas de "non-group-member", estos no están vinculados a ningún usuario-agente específico, y todos los rastreadores pueden seguirlos, siempre que esté permitido.

Orden de prioridad para las líneas de "group-member"

En el nivel de "group-member", en particular para las directivas allow y disallow, la regla más específica en función de la longitud de la entrada [path] prevalecerá sobre la menos específica (más corta). En el caso de reglas en conflicto, incluidas las que tienen comodines, se utiliza la regla menos restrictiva.

Ejemplos
http://example.com/page

allow: /p

disallow: /

Veredicto: allow

http://example.com/folder/page

allow: /folder

disallow: /folder

Veredicto: allow

http://example.com/page.htm

allow: /page

disallow: /*.htm

Veredicto: undefined

http://example.com/

allow: /$

disallow: /

Veredicto: allow

http://example.com/page.htm

allow: /$

disallow: /

Veredicto: disallow

Enviar comentarios sobre…