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 rastrean e indexan sitios web de acceso público.

Requisitos de idioma

Las palabras clave "DEBE", "NO DEBE", "OBLIGATORIO", "DEBERÁ", "NO DEBERÁ", "DEBERÍA", "NO DEBERÍA", "RECOMENDADO", "PUEDE" y "OPCIONAL" de este documento se deben interpretar como se describe en RFC 2119.

Definiciones básicas

Definiciones
Rastreador Un rastreador es un servicio o agente que rastrea sitios web. Por lo general, el rastreador accede de forma automática y 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 a un 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 pueden 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. Los protocolos que suelen aceptarse para el archivo robots.txt y para el 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, al protocolo y al 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 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 buscarán 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 http://www.muller.eu/

ftp://example.com/robots.txt

Se puede usar en ftp://example.com/

No se puede usar en 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 http://212.96.82.21/

No se puede usar en http://example.com/ (incluso si se aloja 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 http://example.com:81/

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

Se puede usar en http://example.com:8181/

No se puede usar en 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:

  • Permiso completo (full allow): se puede rastrear todo el contenido.
  • Ningún permiso (full disallow): no se puede rastrear ningún tipo de contenido.
  • Permiso condicional (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 "permiso condicional" para el rastreo.
3xx (redireccionamiento) Los redireccionamientos se suelen seguir hasta que se encuentra un resultado válido (o hasta que se detecta un bucle). Se seguirá un número limitado de saltos de redireccionamiento (RFC 1945 para "HTTP/1.0" permite hasta 5 saltos). Luego, se detendrá y se tratará como un 404. El manejo de los redireccionamientos de robots.txt a las URL que no se puedan rastrear no está definido y 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) tampoco está definido ni se recomienda.
4xx (errores de cliente) Google trata todos los errores 4xx de la misma forma y asume que no existe un archivo robots.txt válido. Se asume que no existen restricciones. Esto supone un "permiso completo" para el rastreo.
5xx (error del servidor)

Los errores del servidor se consideran errores temporales que provocan que no se otorgue "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. Para suspender el rastreo de forma temporal, se recomienda mostrar un código de resultado HTTP 503. El manejo de un error del servidor permanente no está definido.

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, trataremos el error 5xx de ese sitio como si fuera un 404.

Solicitudes sin éxito o datos incompletos No está definido 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, errores de fragmentación de HTTP, etc.
Almacenamiento en caché Las solicitudes de los archivos robots.txt se suelen almacenar en caché hasta un máximo de un día, 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 registros (líneas) separados por caracteres CR, CR/LF o LF.

Solo se considerarán los registros válidos; el resto del contenido será ignorado. Por ejemplo, si el documento resultante es una página HTML, solo se tendrán en cuenta las líneas de texto válidas; las demás se ignorarán sin mensajes de advertencia o de error.

El contenido del archivo se puede analizar de forma incorrecta si se utiliza una codificación que genera caracteres que no representan un subconjunto de UTF-8.

Si hay una marca de orden de bytes BOM Unicode opcional al principio del archivo robots.txt, se ignorará.

Cada registro está formado por un campo, dos puntos (:) y un valor. Los espacios son opcionales, aunque se recomiendan 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 del registro 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 del registro.

El elemento <field> distingue entre mayúsculas y minúsculas. El elemento <value> puede distinguir entre mayúsculas y minúsculas según el elemento <field>.

El manejo de los elementos <field> con errores leves o mal escritos (por ejemplo, "usuarioagente" en lugar de "usuario-agente") no está definido y es posible que algunos usuarios-agentes los interpreten como directivas correctas.

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. En la actualidad, Google aplica un límite de tamaño de 500 kilobytes (KB).

Sintaxis formal y definición

Esta es una descripción similar a la de Backus-Naur Form (BNF), que usa las convenciones de RFC 822, excepto que se utiliza "|" para designar alternativas. Los elementos literales se escriben con comillas dobles y paréntesis: "(" y ")", y se usan para agrupar otros elementos, mientras que los opcionales están encerrados entre [corchetes] y pueden estar precedidos de <n>* para designar n o más repeticiones del siguiente elemento. El valor predeterminado de n es 0.

robotstxt = *entries
entries = *( ( <1>*startgroupline
  *(groupmemberline | nongroupline | comment)
  | nongroupline
  | comment) )
startgroupline = [LWS] "user-agent" [LWS] ":" [LWS] agentvalue [comment] EOL
groupmemberline = [LWS] (
  pathmemberfield [LWS] ":" [LWS] pathvalue
  | othermemberfield [LWS] ":" [LWS] textvalue) [comment] EOL
nongroupline = [LWS] (
  urlnongroupfield [LWS] ":" [LWS] urlvalue
  | othernongroupfield [LWS] ":" [LWS] textvalue) [comment] EOL
comment = [LWS] "#" *anychar
agentvalue = textvalue

pathmemberfield = "disallow" | "allow"
othermemberfield = ()
urlnongroupfield = "sitemap"
othernongroupfield = ()

pathvalue = "/" path
urlvalue = absoluteURI
textvalue = *(valuechar | SP)
valuechar = <any UTF-8 character except ("#" CTL)>
anychar = <any UTF-8 character except CTL>
EOL = CR | LF | (CR LF)

La sintaxis de "absoluteURI", "CTL", "CR", "LF", "LWS" está definida en RFC 1945. La de "path" está definida en RFC 1808.

Agrupación de registros

Los registros se categorizan según el tipo de elemento <field>:

  • inicio del grupo (start-of-group)
  • miembro del grupo (group-member)
  • no es parte del grupo (non-group)

Todos los registros de miembro del grupo que se incluyen entre un inicio del grupo y el siguiente se tratan como un grupo de registros. El único elemento de campo para un inicio de grupo es user-agent. Después de la línea de inicio de grupo final, aparecen varias líneas de este tipo seguidas entre sí tras los registros de miembro de grupo. Se ignorará cualquier registro de miembro del grupo no precedido por un registro de inicio de grupo. Todos los registros que no forman parte de grupos son válidos, independientemente del grupo del que se trate.

Los elementos <field> válidos, que se detallarán individualmente más adelante en este documento, son los siguientes:

  • user-agent (inicio del grupo)
  • disallow (solo válido como registro de miembro del grupo)
  • allow (solo válido como registro de miembro del grupo)
  • sitemap (no forma parte del grupo)

Los demás elementos <field> pueden ignorarse.

El elemento de inicio de grupo user-agent se usa para especificar el rastreador para el que es válido el grupo. Solo hay un grupo de registros válido para cada rastreador. Hablaremos sobre el orden de prioridad más adelante.

Grupos de ejemplo:

user-agent: a
disallow: /c

user-agent: b
disallow: /d

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

Hay tres grupos diferentes especificados: uno para "a" y otro para "b", así como uno para "e" y para "f". Cada grupo cuenta con un registro de miembro de grupo propio. Observa el uso del espacio en blanco opcional (una línea vacía) para mejorar la legibilidad.

Orden de prioridad para usuarios-agentes

Solo hay un grupo de registros de miembro del grupo válido para cada rastreador. El rastreador debe determinar cuál es el grupo de registros correcto buscando el grupo que tenga el usuario-agente más específico con el que coincida. El rastreador ignora los demás grupos de registros. El usuario-agente no distingue entre mayúsculas ni 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.

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 relevante de la siguiente forma:

Grupo de registro que se sigue por rastreador
Robot de Google para Noticias El grupo de registro que se sigue es el 1. Solo se sigue el grupo más específico; se ignorarán todos los demás.
Robot de Google para Noticias (web) El grupo de registro que se sigue es el 3.
Robot de Google para Imágenes El grupo de registro que se sigue es el 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 de registro que se sigue es el 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 de registro que se sigue es el 2.
Otro robot (Noticias) El grupo de registro que se sigue es el 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

Registros de miembro del grupo

En esta sección solo se tratan los tipos de registros generales y de miembro del grupo de elementos específicos de Google. Estos tipos de registros también se llaman "directivas" para los rastreadores. Estas directivas se especifican con el formato directive: [path], en el que [path] es opcional. De forma predeterminada, no hay restricciones de rastreo para los rastreadores especificados. 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 abajo.

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. 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 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 admiten un tipo limitado de "comodines" para los valores de ruta. Son los siguientes:

  • * 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 posterior.
/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 posterior.

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 posterior 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 /Fish.PHP

Registros de miembro que no forma parte del grupo compatibles con Google

sitemap

Compatible con Google, Ask, Bing, Yahoo; definido 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 registros de miembro que no forma parte del grupo, 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 los registros de miembro del grupo

A nivel de miembro del 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] prevalecerá sobre la menos específica (más corta). El orden de prioridad para las reglas con comodines no está definido.

Ejemplos
http://example.com/page

Permitir: /p

No permitir: /

Veredicto: permitir

http://example.com/folder/page

Permitir: /folder

No permitir: /folder

Veredicto: permitir

http://example.com/page.htm

Permitir: /page

No permitir: /*.htm

Veredicto: no definido

http://example.com/

Permitir: /$

No permitir: /

Veredicto: permitir

http://example.com/page.htm

Permitir: /$

No permitir: /

Veredicto: no permitir

Enviar comentarios sobre…