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

  • Rastreador: 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: medio para identificar un rastreador específico o un conjunto de rastreadores.
  • Directivas: lista de lineamientos aplicables a un rastreador o a un grupo de rastreadores que se especifica en el archivo robots.txt.
  • URL: localizadores de recursos uniformes, según se describen en RFC 1738.
  • Elementos específicos de Google: 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.

Nota: La URL del archivo robots.txt, como las demás URL, distingue entre mayúsculas y minúsculas.

Ejemplos de URL de robots.txt válidas:

URL de robots.txtVálida para No válida paraComentarios
http://example.com/robots.txt http://example.com/
http://example.com/folder/file
http://other.example.com/
https://example.com/
http://example.com:8181/
Este es el caso general. No es válida para otros subdominios, protocolos o números de puerto. Es válida para todos los archivos de todos los subdirectorios del mismo host, protocolo y número de puerto.
http://www.example.com/robots.txt http://www.example.com/ http://example.com/
http://shop.www.example.com/
http://www.shop.example.com/
Un archivo robots.txt de un subdominio solo es válido para ese subdominio.
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 http://www.müller.eu/
http://www.xn--mller-kva.eu/
http://www.muller.eu/ Los nombres de dominio internacionalizados (IDN) son equivalentes a sus versiones en Punycode. También consulta RFC 3492.
ftp://example.com/robots.txt ftp://example.com/ 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 http://212.96.82.21/ http://example.com/ (aunque se aloje en 212.96.82.21) Un archivo robots.txt con una dirección IP como nombre de host solo será válido para rastrear esa dirección IP como nombre de host. No será válido automáticamente para todos los sitios web alojados en esa dirección IP (aunque es posible que el archivo robots.txt esté compartido, en cuyo caso también estará disponible con el nombre de host compartido).
http://example.com:80/robots.txt http://example.com:80/
http://example.com/
http://example.com:81/ Los números de puerto estándar (80 para http, 443 para https y 21 para ftp) son equivalentes a sus nombres de host predeterminados. Consulta también [portnumbers].
http://example.com:8181/robots.txt http://example.com:8181/ http://example.com/ Los archivos robots.txt en números de puerto no estándar solo son válidos para el contenido disponible a través de esos números.

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.
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. Nota: Esto incluye los códigos de resultado HTTP 401 "No autorizado" y 403 "Prohibido".
5xx (error del servidor)
Los errores del servidor se consideran errores temporales 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, mientras que la de "path" se encuentra 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:

Nombre del rastreadorGrupo de registro que se sigue Comentarios
Googlebot News (grupo 1) Solo se sigue el grupo más específico; se ignorarán todos los demás.
Googlebot (web) (grupo 3) 
Googlebot Images (grupo 3) Como no hay un grupo googlebot-images específico, se sigue el más genérico.
Googlebot News (al rastrear imágenes) (grupo 1) Como a estas imágenes las rastrea Googlebot News para su uso, solo se sigue el grupo Googlebot News.
Otherbot (web)(grupo 2) 
Otherbot (News)(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 usuarios-agentes

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 sin 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.

Nota: Las URL rastreadas con AJAX se deben especificar en las versiones correspondientes.

Google, Bing, Yahoo y Ask admiten un tipo limitado de "comodines" para los valores de ruta. Son los siguientes:

  1. * designa 0 o más instancias de cualquier carácter válido.
  2. $ designa el final de la URL.

Ejemplos de coincidencias de ruta

[path]Coincide No coincideComentarios
/cualquier URL válida  Coincide con la raíz y con cualquier URL de nivel inferior.
/*equivalente a / equivalente a / Equivale a "/" (se ignorará el comodín posterior).
/fish/fish
/fish.html
/fish/salmon.html
/fishheads
/fishheads/yummy.html
/fish.php?id=anything
/Fish.asp
/catfish
/?id=fish
Observa las coincidencias de mayúsculas y minúsculas.
/fish*/fish
/fish.html
/fish/salmon.html
/fishheads
/fishheads/yummy.html
/fish.php?id=anything
/Fish.asp
/catfish
/?id=fish
Equivale a "/fish" (se ignorará el comodín posterior).
/fish//fish/
/fish/?id=anything
/fish/salmon.htm
/fish
/fish.html
/Fish/Salmon.asp
La barra posterior indica que esta ruta coincide con cualquiera incluida en esta carpeta.
/*.php/filename.php
/folder/filename.php
/folder/filename.php?parameters
/folder/any.php.file.html
/filename.php/
/ (incluso si se asigna a /index.php)
/windows.PHP
 
/*.php$/filename.php
/folder/filename.php
/filename.php?parameters
/filename.php/
/filename.php5
/windows.PHP
 
/fish*.php/fish.php
/fishheads/catfish.php?parameters
/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:

URLallow:disallow:Veredicto Comentarios
http://example.com/page /p /allow 
http://example.com/folder/page /folder/ /folderallow 
http://example.com/page.htm /page /*.htmsin definir 
http://example.com/ /$ /allow 
http://example.com/page.htm /$ /disallow 

Enviar comentarios sobre…