¿Cómo interpreta Google la especificación robots.txt?

Los rastreadores automáticos de Google admiten el protocolo de exclusión para robots (REP). Es decir, antes de rastrear un sitio, los rastreadores de Google descargan y analizan el archivo robots.txt del sitio para extraer información sobre las partes del sitio que se pueden rastrear. El protocolo REP no se aplica a los rastreadores de Google controlados por los usuarios (por ejemplo, las suscripciones a feeds) ni a los rastreadores que se usan para aumentar la seguridad de los usuarios (por ejemplo, el análisis de software malicioso).

¿Qué es un archivo robots.txt?

Si no quieres que los rastreadores accedan a determinadas secciones de tu sitio, puedes crear un archivo robots.txt que incluya las reglas pertinentes. Un archivo robots.txt es un archivo de texto simple que contiene reglas sobre qué rastreadores pueden acceder a distintas partes de un sitio.

Ubicación del archivo y periodo de validez

Debes colocar el archivo robots.txt en el directorio de nivel superior de un sitio y debes usar en él un protocolo compatible. En el caso de la Búsqueda de Google, los protocolos compatibles son HTTP, HTTPS y FTP. En HTTP y HTTPS, los rastreadores obtienen el archivo robots.txt con una solicitud HTTP GET no condicional. En FTP, los rastreadores utilizan un comando RETR (RETRIEVE) estándar con credenciales de acceso anónimas.

Las reglas 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 robots.txt.

Ejemplos de URLs de archivo robots.txt válidas

Ejemplos de URLs de archivo robots.txt
http://example.com/robots.txt Válida para:
  • http://example.com/
  • http://example.com/folder/file
No válida para:
  • http://other.example.com/
  • https://example.com/
  • http://example.com:8181/
http://www.example.com/robots.txt

Válida para: http://www.example.com/

No válida 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 este tipo de archivo en subdirectorios.
http://www.exämple.com/robots.txt Válida para:
  • http://www.exämple.com/
  • http://xn--exmple-cua.com/

No válida para: http://www.example.com/

ftp://example.com/robots.txt

Válida para: ftp://example.com/

No válida para: http://example.com/

http://212.96.82.21/robots.txt

Válida para: http://212.96.82.21/

No válida para: http://example.com/ (aunque esté alojada en 212.96.82.21)

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

Válida para:

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

No válida para: http://example.com:81/

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

Válida para: http://example.com:8181/

No válida para: http://example.com/

Gestionar errores y códigos de estado HTTP

Al solicitar un archivo robots.txt, el código de estado HTTP de la respuesta del servidor influye en cómo utilizarán los rastreadores de Google el archivo robots.txt.

Gestionar errores y códigos de estado HTTP
2xx (correcto) Los códigos de estado HTTP que muestran una operación correcta indican a los rastreadores de Google que procesen el archivo robots.txt que proporciona el servidor.
3xx (redirección)

Google sigue al menos cinco redirecciones según lo definido en RFC 1945 y luego se detiene y lo trata como 404 en el archivo robots.txt. Esto también se aplica a las URLs que no están permitidas en la cadena de redirección, ya que el rastreador no ha podido obtener reglas debido a las redirecciones.

Google no sigue las redirecciones lógicas en los archivos robots.txt (redirecciones de actualizaciones de metaetiquetas, de JavaScript o de marcos).

4xx (errores de cliente)

Los rastreadores de Google tratan todos los errores 4xx como si no hubiera archivos robots.txt válidos, lo que significa que no se aplican restricciones de rastreo.

5xx (error del servidor)

Como el servidor no ha podido responder a la solicitud del archivo robots.txt de Google, Google interpreta temporalmente los errores del servidor como si el sitio estuviese totalmente prohibido. Google intentará rastrear el archivo robots.txt hasta que se obtenga un código de estado HTTP sin error del servidor. Los errores 503 (service unavailable) suelen provocar este comportamiento. Si no se puede acceder al archivo robots.txt durante más de 30 días, Google utilizará la copia más reciente de este archivo que tenga en caché. Si no hay ninguna, Google considera que no hay restricciones de rastreo.

Si podemos determinar que un sitio se ha configurado de forma incorrecta para devolver un error 5xx en vez de un código de estado 404 cuando faltan páginas, trataremos el error 5xx de ese sitio como si fuera un error 404. Por ejemplo, si el mensaje de error de una página que devuelve un código de estado 5xx es "Página no encontrada", interpretaríamos el código de estado como si fuese 404 (not found).

Otros errores 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 desactivado 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é

Por lo general, Google almacena en caché el contenido del archivo robots.txt durante un máximo de 24 horas, pero puede permanecer 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é en función de los encabezados HTTP max-age Cache-Control.

Formato de archivo

El archivo robots.txt debe estar codificado en UTF-8 como texto sin formato y las líneas deben estar separadas por CR, CR/LF o LF.

Google ignora las líneas no válidas en los archivos robots.txt, incluida la marca de orden de bytes de Unicode al principio del archivo robots.txt, y solo usa líneas válidas. Por ejemplo, si el contenido descargado es HTML y no reglas de robots.txt, Google tratará de analizarlo y extraer reglas, e ignorará todo lo demás.

Del mismo modo, si la codificación de caracteres del archivo robots.txt no es UTF-8, Google puede ignorar los caracteres que no formen parte del intervalo de UTF-8, lo que puede provocar que las reglas de robots.txt no sean válidas.

De momento, Google aplica un límite de tamaño de archivo robots.txt de 500 kibibytes (KiB), y el contenido que supere este tamaño se ignorará. 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.

Sintaxis

Las líneas del archivo robots.txt que son válidas están formadas por un campo, dos puntos (:) y un valor. Los espacios son opcionales, aunque recomendamos utilizarlos para mejorar la legibilidad del archivo. Se ignoran los espacios que haya al comienzo y al final de una línea. Si quieres incluir algún comentario, empiézalo con el carácter #. Ten en cuenta que se ignorará todo lo que venga después del carácter #. El formato general es <field>:<value><#optional-comment>.

Google admite los siguientes campos:

  • user-agent: identifica al rastreador al que se aplican las reglas.
  • allow: ruta de URL que se puede rastrear.
  • disallow: ruta de URL que no se puede rastrear.
  • sitemap: URL completa de un sitemap.

Los campos allow y disallow 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. Los rastreadores ignoran las directivas que no incluyen [path].

Si se especifica, el valor [path] hace referencia a la raíz del sitio web desde la que se ha obtenido el archivo robots.txt, con el mismo protocolo, número de puerto, nombre de dominio y nombre de host. El valor de la ruta debe empezar por /, que indica la raíz, y en él se distingue entre mayúsculas y minúsculas. Más información sobre las coincidencias de URL en función de los valores de ruta

user-agent

La línea user-agent identifica al rastreador al que se aplican las reglas. Consulta la lista completa de cadenas de user-agent y rastreadores de Google que puedes usar en tu archivo robots.txt.

El valor de la línea user-agent no distingue entre mayúsculas y minúsculas.

disallow

La directiva disallow especifica las rutas a las que no deben acceder los rastreadores que se indican en la línea del user-agent con la que se agrupa la directiva disallow. Los rastreadores ignoran las directivas que no tengan una ruta.

En el valor de la directiva disallow se distingue entre mayúsculas y minúsculas.

Uso:

disallow: [path]

allow

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

En el valor de la directiva allow se distingue entre mayúsculas y minúsculas.

Uso:

allow: [path]

sitemap

Google, Bing y otros buscadores principales admiten el campo sitemap en archivos robots.txt, tal como se define en sitemaps.org.

En el valor del campo sitemap se distingue entre mayúsculas y minúsculas.

Uso:

sitemap: [absoluteURL]

La línea [absoluteURL] dirige a la ubicación de un archivo de sitemap o de índice de sitemaps. Debe ser una URL cualificada, por lo que debe incluir el protocolo y el host. No hace falta que esté codificada ni que esté en el mismo host que el archivo robots.txt Puedes especificar varios campos sitemap. El campo del sitemap no está vinculado a ningún user-agent concreto, y todos los rastreadores pueden seguirlo, siempre que no se les haya prohibido.

Por ejemplo:

user-agent: otherbot
disallow: /kale

sitemap: https://example.com/sitemap.xml
sitemap: https://cdn.example.org/other-sitemap.xml
sitemap: https://ja.example.org/テスト-サイトマップ.xml

Agrupación de líneas y reglas

Para agrupar reglas que se aplican a varios user-agents, repite las líneas user-agent en cada rastreador.

Por ejemplo:

user-agent: a
disallow: /c

user-agent: b
disallow: /d

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

user-agent: h

En este ejemplo hay cuatro grupos de reglas distintos:

  • Un grupo para el user-agent "a".
  • Un grupo para el user-agent "b".
  • Un grupo para los user-agents "e" y "f".
  • Un grupo para el user-agent "h".

Para ver la descripción técnica de un grupo, consulta la sección 2.1 del REP.

Orden de prioridad de los user-agents

Solo se le puede aplicar un grupo a cada rastreador. Para determinar qué grupo de reglas es el correcto, los rastreadores de Google buscan en el archivo robots.txt el grupo que tenga el user-agent más específico y que coincida con el del rastreador. El resto de los grupos se ignoran. También se ignora la parte de texto que no coincide (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 declarado que afecta a un user-agent concreto, todas las reglas de esos grupos se unifican en un solo grupo.

Ejemplos

Coincidencia de los campos user-agent

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
Googlebot-News googlebot-news sigue el grupo 1, porque es el grupo más específico.
Googlebot (Web) googlebot sigue el grupo 3.
Googlebot-Images googlebot-images sigue el grupo 2 porque no hay ningún grupo googlebot-images específico.
Googlebot-News (cuando se rastrean imágenes) Al rastrear las imágenes, googlebot-news sigue el grupo 1. googlebot-news no rastrea las imágenes de Google Imágenes, por lo que solo sigue el grupo 1.
Otros robots (Web) Otros rastreadores de Google siguen el grupo 2.
Otros robots (Noticias) Otros rastreadores de Google que rastrean contenido de noticias, pero que no se identifican como googlebot-news, siguen al grupo 2. Aunque haya una entrada de un rastreador relacionado, solo se siguen las que coinciden de forma específica.

Agrupación de reglas

Si hay varios grupos en un archivo robots.txt que son importantes para un user-agent concreto, los rastreadores de Google los combinarán internamente. Por ejemplo:

user-agent: googlebot-news
disallow: /fish

user-agent: *
disallow: /carrots

user-agent: googlebot-news
disallow: /shrimp

Los rastreadores agrupan las reglas en función del user-agent. Por ejemplo:

user-agent: googlebot-news
disallow: /fish
disallow: /shrimp

user-agent: *
disallow: /carrots

Coincidencias de URL en función de los valores de ruta

Google utiliza el valor de ruta en las directivas allow y disallow para determinar si una regla se aplica o no a una URL concreta de un sitio. Para hacer esto, se compara la regla con el componente de ruta de la URL que el rastreador quiere obtener. Los caracteres ASCII que no sean de 7 bits y que aparezcan en una ruta se pueden incluir como caracteres UTF-8 o como caracteres UTF-8 codificados usando el símbolo de porcentaje como carácter de escape, tal como se describe en RFC 3986.

Google, Bing y otros buscadores principales admiten determinados comodines 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.
/* Es equivalente a /. El comodín final se ignora.
/$ Coincide solo con la raíz. Se pueden rastrear todas las URLs de los niveles inferiores.
/fish

Coincide con cualquier ruta que empieza por /fish.

Coincide con:

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

No coincide con:

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

Es equivalente a /fish. El comodín final se ignora.

Coincide con:

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

No coincide con:

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

Coincide con cualquier elemento de la carpeta /fish/.

Coincide con:

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

No coincide con:

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

Coincide con cualquier ruta que contenga .php.

Coincide con:

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

No coincide con:

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

Coincide con cualquier ruta que termine por .php.

Coincide con:

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

No coincide con:

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

Coincide con cualquier ruta que contenga /fish y .php, en ese orden.

Coincide con:

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

No coincide con: /Fish.PHP

Orden de prioridad de las reglas

Al buscar coincidencias de reglas de robots.txt con URLs, los rastreadores utilizan la regla más específica en función de la longitud de su ruta. En caso de reglas en conflicto, incluidas las que tienen comodines, Google utiliza la regla menos restrictiva.

En los siguientes ejemplos se muestra qué regla aplicarán los rastreadores de Google en una URL concreta.

Ejemplos
http://example.com/page

allow: /p
disallow: /

Regla aplicable: allow: /p, porque es más específica.

http://example.com/folder/page

allow: /folder
disallow: /folder

Regla aplicable: allow: /folder, porque en el caso de que las reglas coincidan, Google utiliza la regla menos restrictiva.

http://example.com/page.htm

allow: /page
disallow: /*.htm

Regla aplicable: disallow: /*.htm, ya que coincide con más caracteres de la URL, por lo que es más específica.

http://example.com/page.php5

allow: /page
disallow: /*.ph

Regla aplicable: allow: /page, porque en el caso de que las reglas coincidan, Google utiliza la regla menos restrictiva.

http://example.com/

allow: /$
disallow: /

Regla aplicable: allow: /$, porque es más específica.

http://example.com/page.htm

allow: /$
disallow: /

Regla aplicable: disallow: /, ya que la regla allow solo se aplica a la URL raíz.