Especificaciones de robots.txt

Resumen

En este documento se explica cómo interpreta Google los archivos robots.txt, con los que puedes controlar cómo rastrean e indexan los rastreadores de Google los sitios web de acceso público.

Novedades

El 1 de julio del 2019, Google anunció que se está trabajando para convertir en un estándar de Internet el protocolo robots.txt. Los cambios que implica este anuncio se describen en este documento.

Definiciones básicas

Definiciones
Rastreador Un rastreador es un servicio o un agente que rastrea sitios web. Por lo general, los rastreadores acceden de forma automática y recursiva a las URL conocidas de hosts que muestran contenido al que se puede acceder con navegadores web estándar. A medida que se encuentran nuevas URL a través de diferentes medios, como enlaces de páginas ya rastreadas o archivos de sitemaps, estas se rastrean de la misma forma.
User-agent Forma de identificación de un rastreador o de un conjunto de rastreadores.
Directivas Lista de las directrices especificadas en un archivo robots.txt que deben seguir un rastreador o grupo de rastreadores.
URL Localizadores de recursos uniformes, tal como se describen en RFC 1738.
Elemento específico de Google Elementos específicos de la implementación de Google de los archivos robots.txt que quizá no tengan ningún efecto sobre otros rastreadores.

Aplicaciones

Todos los rastreadores automatizados de Google siguen las directrices que se indican en este documento. No obstante, estas directrices no se aplican cuando un agente accede a las URL en nombre de un usuario para, por ejemplo, traducir la página, acceder a feeds de suscripción manual o analizar contenido en busca de software malicioso.

Ubicación del archivo y periodo de validez

El archivo robots.txt debe incluirse en el directorio de nivel superior del host, y se debe poder acceder a él a través del protocolo y del número de puerto apropiados. Todos los protocolos que suelen aceptarse para acceder a este archivo se basan en URIs y, concretamente en el caso de la Búsqueda de Google, (por ejemplo, para rastrear de sitios web) son "http" y "https". Cuando se usan estos dos protocolos, el archivo robots.txt so obtiene mediante una solicitud HTTP GET no condicional.

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

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

Ejemplos de URLs de archivo robots.txt válidas

Ejemplos de URLs de archivo robots.txt
http://example.com/robots.txt Con validez para:
  • http://example.com/
  • http://example.com/folder/file
Sin validez para:
  • http://other.example.com/
  • https://example.com/
  • http://example.com:8181/
http://www.example.com/robots.txt

Con validez para: http://www.example.com/

Sin validez para:

  • 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 porque los rastreadores no buscan estos archivos en subdirectorios.
http://www.müller.eu/robots.txt Con validez para:
  • http://www.müller.eu/
  • http://www.xn--mller-kva.eu/

Sin validez para: http://www.muller.eu/

ftp://example.com/robots.txt

Convalidez para: ftp://example.com/

Sin validez para: http://example.com/

Elemento específico de Google: utilizamos el archivo robots.txt también con recursos FTP.

http://212.96.82.21/robots.txt

Con validez para: http://212.96.82.21/

Sin validez para: http://example.com/ (aunque esté alojado en 212.96.82.21)

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

Con validez para:

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

Sin validez para: http://example.com:81/

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

Con validez para: http://example.com:8181/

Sin validez para: http://example.com/

Uso de los códigos de resultado HTTP

Por lo general, al acceder a los archivos robots.txt, se obtienen tres resultados diferentes:

  • full allow (permiso completo): se puede rastrear todo el contenido.
  • full disallow (ningún permiso): no se puede rastrear ningún contenido.
  • conditional allow (permiso condicional): las directivas incluidas en el archivo robots.txt determinan si se puede rastrear un contenido determinado.
Uso de los códigos de resultado HTTP
2xx (correcto) Cuando se obtiene un código de resultado HTTP que indica que la operación se ha completado correctamente, éxito de la operación, el resultado es "conditional allow".
3xx (redirección) Google sigue al menos cinco redirecciones según lo definido en RFC 1945 para HTTP/1.0 y luego se detiene y lo trata como un 404. Se desaconseja usar redirecciones del archivo robots.txt a URL no permitidas; como todavía no se ha obtenido ninguna regla, se siguen al menos cinco redirecciones; si no se encuentra el archivo robots.txt, Google considera que se ha producido un error 404. No se recomienda gestionar redirecciones lógicas en el archivo robots.txt según contenido HTML que devuelva códigos de resultado 2xx (redirecciones de actualizaciones de metaetiquetas, de JavaScript o de marcos). 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 forma y se considera que no hay ningún archivo robots.txt válido y, por tanto, que no hay ninguna restricción. En este caso, se considera que el resultado es "full allow".
5xx (error del servidor)

Los errores del servidor se consideran errores temporales que devuelven el resultado "full disallow". La solicitud se va enviando hasta que se obtiene un código de resultado HTTP sin error del servidor. Por ejemplo, los errores 503 (Servicio no disponible) suelen provocar este comportamiento. Si el robot de Google no puede acceder al archivo robots.txt durante más de 30 días, se utilizará la copia en caché más reciente del archivo; si no hay ninguna, Google considera que no hay ninguna restricción de rastreo. Para suspender de forma temporal el rastreo, se recomienda mostrar un código de resultado HTTP 503.

Elemento específico de Google: si observamos que un sitio web se ha configurado de forma incorrecta y, cuando faltan páginas, devuelve un error 5xx y no uno 404, trataremos el error 5xx de ese sitio web como si fuera un error 404.

Solicitudes que no se han realizado correctamente o datos incompletos Si no se puede acceder a un archivo robots.txt debido a un problema de DNS o de red (por ejemplo, porque se ha agotado el tiempo de espera, se ha devuelto una respuesta no válida o se ha restablecido o perdido la conexión) o a causa de errores de fragmentación de HTTP, se seguirá el mismo procedimiento que si se hubiera producido un error del servidor.
Almacenamiento en caché El contenido de los archivos robots.txt se suele almacenar en caché hasta un máximo de 24 horas; no obstante, pueden permanecer en la caché durante más tiempo si no se puede actualizar, por ejemplo, debido a tiempos de espera agotados o a errores 5xx. La respuesta almacenada en caché puede compartirse con diferentes rastreadores. Google puede aumentar o disminuir el ciclo de duración de la caché según los encabezados HTTP max-age Cache-Control.

Formato de archivo

Se espera que sea un archivo de texto sin formato con codificación UTF-8. Las diferentes líneas del archivo deben estar separadas por CR, CR/LF o LF.

Solo se tienen en cuenta las líneas válidas; el resto del contenido se ignora. Por ejemplo, si el documento es una página HTML, solo se tendrán en cuenta las líneas de texto válidas; las demás se ignorarán y no se mostrará ningún mensaje de advertencia o de error.

Es posible que el contenido del archivo no se analice correctamente si se utiliza una codificación que genere caracteres que no representen un subconjunto de UTF-8.

Si hay una marca de orden de bytes (BOM) opcional al principio del archivo robots.txt, se ignora.

Para que una línea sea válida, debe está formada por un campo, dos puntos (:) y un valor. Los espacios son opcionales, aunque recomendamos utilizarlos para mejorar la legibilidad del archivo. Se pueden incluir comentarios en cualquier parte del archivo precedidos del carácter "#". Todo el contenido que se inserta entre el comienzo de un comentario y el final de la línea considera como tal y se ignora. El formato general es <field>:<value><#optional-comment>. Los espacios en blanco al comienzo y al final de una línea se ignoran.

El elemento <field> no distingue entre mayúsculas y minúsculas. En cambio, el elemento <value> puede que sí distinga entre mayúsculas y minúsculas, en función del elemento <field>.

No se pueden procesar los elementos <field> que incluyan errores simples o tipográficos; por ejemplo, "useragent" en lugar de "user-agent".

Es posible que los diferentes rastreadores solo puedan rastrear contenido hasta ciertos límites de tamaño e ignoren todo el contenido que supere ese límite. En estos momentos, Google aplica un límite de tamaño de 500 kibibytes (KiB). Si tu archivo robots.txt es demasiado grande, combina directivas para reducir su tamaño. Por ejemplo, coloca el material que quieres excluir en otro directorio.

Definición y sintaxis formal

A continuación, se describe la notación aumentada de Backus-Naur aumentado (ABNF), tal como se describe en 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 varias líneas de user-agent seguidas de una o varias reglas. Los grupos terminan con una línea de user-agent o cuando se llega al final del archivo. Es posible que el último grupo no tenga ninguna regla, lo que implica que lo permite todo.

Grupos de ejemplo:

user-agent: a
disallow: /c

user-agent: b
disallow: /d

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

user-agent: h

Se indican cuatro grupos diferentes: el primero afecta a "a"; el segundo, a "b", y el tercero a "e" y a "f" a la vez. Salvo el último grupo, todos tienen su propia línea de miembros de grupo. El último grupo está vacío. Fíjate que se han incluido espacios en blanco y líneas vacías para mejorar la legibilidad.

Orden de prioridad de los user-agent

A cada rastreador solo se le puede aplicar un grupo. Para determinar qué grupo es el correcto, el rastreador busca el grupo que coincida que tenga el user-agent más específico e ignora el resto. El campo User-agent distingue entre mayúsculas y minúsculas. La parte de texto que no coincida se ignora (por ejemplo, tanto googlebot/1.2 como googlebot* son equivalentes a googlebot). No importa el orden en el que aparezcan los grupos dentro del archivo robots.txt.

Si hay más de un grupo que afecta a un user-agent concreto, a ese user-agent se le aplicarán todas las reglas de esos grupos.

Ejemplo

Si tenemos el 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 pertinente del siguiente modo:

Grupo seguido por un rastreador
Robot de Google para Noticias Se sigue el grupo 1. Solo se sigue el grupo más específico; el resto se ignora.
Robot de Google (Web) Se sigue el grupo 3.
Robot de Google para Imágenes Se sigue el grupo 3. No hay ningún grupo que especifique googlebot-images, por lo que se sigue el grupo más genérico.
Robot de Google para Noticias (al rastrear imágenes) Se sigue el grupo 1. Es el Robot de Google para Noticias el que rastrea las imágenes, por lo que solo se sigue el grupo de ese robot.
Otros robots (Web) Se sigue el grupo 2.
Otros robots (Noticias) Se sigue el grupo 2. Aunque haya una entrada de un rastreador relacionado, solo se siguen las que coinciden de forma específica.

Consulta también información sobre los rastreadores de Google y sus cadenas de user-agent.

Reglas de miembros de grupos

En esta sección, solo se tratan las reglas estándar de los miembros de grupos. En el caso de los rastreadores, estas reglas también se denominan "directivas". Estas directivas se especifican con el formato directive: [path] en el que el valor [path] es opcional. De forma predeterminada, no se aplican restricciones de rastreo a los rastreadores especificados. Se ignoran las directivas que no incluyen un valor [path].

Si se especifica, se considera que el valor [path] es relativo a la raíz del sitio web a cuyo archivo robots.txt se ha accedido, con el mismo protocolo, número de puerto y nombres de dominio y de host. El valor de la ruta debe empezar por "/", que indica la raíz. La ruta distingue entre mayúsculas y minúsculas. Para obtener más información, se puede consultar la sección "Coincidencias de URL en función de los valores de ruta" que aparece a continuación.

Directiva disallow

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

Uso:

disallow: [path]

Directiva allow

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

Uso:

allow: [path]

Coincidencias de URL en función de 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. A excepción de los comodines, la ruta se utiliza para que coincida con el principio de una URL (y con cualquier URL válida que empiece por la misma ruta). Los caracteres ASCII que no sean de 7 bits que aparezcan en una ruta se pueden incluir como caracteres UTF-8 o como caracteres UTF-8 escapados con símbolos de porcentajes según RFC 3986.

Google, Bing, Yahoo y Ask admiten usar "comodines" limitados en los valores de ruta. Se trata de los siguientes:

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

Coincide con estas rutas:

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

No coincide con estas rutas:

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

Equivale a /fish. El comodín final se ignora.

Coincide con estas rutas:

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

No coincide con estas rutas:

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

La barra inclinada posterior indica que esta ruta coincide con cualquiera incluida en esta carpeta.

Coincide con estas rutas:

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

No coincide con estas rutas:

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

Coincide con estas rutas:

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

No coincide con estas rutas:

  • / (aunque se asigne a /index.php)
  • /windows.PHP
/*.php$

Coincide con estas rutas:

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

No coincide con estas rutas:

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

Coincide con estas rutas:

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

No coincide con: /Fish.PHP

Líneas de miembros que no pertenecen al grupo que Google admite

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

Uso:

sitemap: [absoluteURL]

El elemento [absoluteURL] debe llevar a un sitemap, a un índice de sitemap 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 miembros que no pertenecen al grupo, estos no están vinculados a ningún user-agent específico, y todos los rastreadores pueden seguirlos, siempre que esté permitido.

Orden de prioridad de líneas de miembros de grupos

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

Ejemplos
http://example.com/page

allow: /p

disallow: /

Resultado: allow

http://example.com/folder/page

allow: /folder

disallow: /folder

Resultado: allow

http://example.com/page.htm

allow: /page

disallow: /*.htm

Resultado: undefined

http://example.com/

allow: /$

disallow: /

Resultado: allow

http://example.com/page.htm

allow: /$

disallow: /

Resultado: disallow