Cómo Google interpreta la especificación de robots.txt

Los rastreadores automatizados de Google admiten el protocolo de exclusión de 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 que se pueden rastrear. El REP no se aplica a los rastreadores de Google que controlan los usuarios (por ejemplo, las suscripciones a feeds) ni a los rastreadores que se usan para aumentar la seguridad del usuario, como los análisis de software malicioso.

En esta página, se describe la interpretación que hace Google del REP. Para ver el estándar original, consulta RFC 9309.

Qué es un archivo robots.txt

Si no deseas que los rastreadores accedan a determinadas secciones de tu sitio, puedes crear un archivo robots.txt con las reglas correspondientes. El archivo robots.txt es un archivo de texto simple que contiene reglas en las que se establece a que partes de un sitio puede acceder cada rastreador. Por ejemplo, el archivo robots.txt de example.com podría verse de la siguiente manera:

# This robots.txt file controls crawling of URLs under https://example.com.
# All crawlers are disallowed to crawl files in the "includes" directory, such
# as .css, .js, but Google needs them for rendering, so Googlebot is allowed
# to crawl them.
User-agent: *
Disallow: /includes/

User-agent: Googlebot
Allow: /includes/

Sitemap: https://example.com/sitemap.xml

Si aún no conoces mucho sobre robots.txt, comienza con nuestra introducción a robots.txt. También puedes encontrar sugerencias para crear un archivo robots.txt.

Ubicación del archivo y rango de validez

Debes ubicar el archivo robots.txt en el directorio de nivel superior de un sitio, en un protocolo compatible. La URL del archivo robots.txt (al igual que otras URLs) distingue entre mayúsculas y minúsculas. En el caso de la Búsqueda de Google, los protocolos compatibles son HTTP, HTTPS y FTP. En HTTP y HTTPS, los rastreadores recuperan el archivo robots.txt con una solicitud HTTP GET no condicional. En FTP, se usa un comando RETR (RETRIEVE) estándar, con acceso anónimo.

Las reglas 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 URLs de robots.txt válidas

En la siguiente tabla, se muestran ejemplos de las URLs de robots.txt y las rutas de URL para las que son válidas. La primera columna contiene la URL de un archivo robots.txt y la segunda contiene dominios a los que no se aplicaría ese archivo.

Ejemplos de URLs de robots.txt
https://example.com/robots.txt

Este es el caso general. No tiene validez para otros subdominios, protocolos ni números de puerto, pero sí para los archivos incluidos en todos los subdirectorios del mismo host, protocolo y número de puerto.

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

Un archivo robots.txt de un subdominio solo es válido para ese subdominio.

Se puede usar en los siguientes casos: https://www.example.com/

No se puede usar en los siguientes casos:

  • https://example.com/
  • https://shop.www.example.com/
  • https://www.shop.example.com/
https://example.com/folder/robots.txt No es un archivo robots.txt válido. Los rastreadores no buscan archivos robots.txt en los subdirectorios.
https://www.exämple.com/robots.txt

Los nombres de dominio internacionalizados (IDN) son equivalentes a sus versiones en Punycode. También consulta RFC 3492.

Se puede usar en los siguientes casos:
  • https://www.exämple.com/
  • https://xn--exmple-cua.com/

No se puede usar en los siguientes casos: https://www.example.com/

ftp://example.com/robots.txt

Se puede usar en los siguientes casos: ftp://example.com/

No se puede usar en los siguientes casos: https://example.com/

https://212.96.82.21/robots.txt

Un archivo robots.txt que tiene una dirección IP como nombre de host solo es válido para rastrear esa dirección IP como nombre de host. No se podrá usar automáticamente para todos los sitios web alojados en esa dirección IP (aunque es posible que el archivo robots.txt esté compartido, y en tal caso, también estará disponible con el nombre de host compartido).

Se puede usar en los siguientes casos: https://212.96.82.21/

No se puede usar en los siguientes casos: https://example.com/ (incluso si se aloja en 212.96.82.21)

https://example.com:443/robots.txt

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.

Se puede usar en los siguientes casos:

  • https://example.com:443/
  • https://example.com/

No se puede usar en los siguientes casos: https://example.com:444/

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

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.

Se puede usar en los siguientes casos: https://example.com:8181/

No se puede usar en los siguientes casos: https://example.com/

Administración de errores y códigos de estado HTTP

Cuando solicites un archivo robots.txt, el código de estado HTTP de la respuesta del servidor afecta la manera en que los rastreadores de Google usarán este archivo. En la siguiente tabla, se resume la forma en que Googlebot trata los archivos robots.txt para diferentes códigos de estado HTTP.

Administración de errores y códigos de estado HTTP
2xx (success) Los códigos de estado HTTP que indican el éxito de la operación les indican a los rastreadores de Google que procesen el archivo robots.txt según lo establece el servidor.
3xx (redirection)

Google sigue, al menos, cinco saltos de redireccionamiento, según lo que define la RFC 1945 y, luego, se detiene y lo considera error 404 del el archivo robots.txt. Esto también sucede con las URLs inhabilitadas en la cadena de redireccionamientos, ya que el rastreador no puede recuperar las reglas debido a los redireccionamientos.

Google no sigue redireccionamientos lógicos en archivos robots.txt (redireccionamientos de actualizaciones de metaetiquetas, de JavaScript o de marcos).

4xx (client errors)

Los rastreadores de Google tratan todos los errores 4xx, excepto 429, como si no existiera un archivo robots.txt válido. Esto significa que Google supone que no hay restricciones de rastreo.

5xx (server errors)

Como el servidor no puede brindar una respuesta definitiva a la solicitud de robots.txt de Google, Google interpreta, de manera temporal, los errores de servidor 5xx y 429 como si el sitio estuviese inhabilitado por completo. Google intentará rastrear el archivo robots.txt hasta que obtenga un código de estado HTTP sin error de servidor. Un error 503 (service unavailable) provoca reintentos bastante frecuentes. Si el archivo robots.txt no está disponible durante más de 30 días, Google usará la última copia de robots.txt almacenada en caché. Si esta no está disponible, Google supone que no hay restricciones de rastreo.

Si necesitas suspender de manera temporal el rastreo, te recomendamos que publiques un código de estado HTTP 503 para cada URL del sitio.

Si podemos determinar que un sitio está configurado de forma incorrecta para mostrar un código de estado 5xx en lugar de un código 404 para páginas faltantes, consideraremos el error 5xx de ese sitio como si fuera un 404. Por ejemplo, si el mensaje de error en una página que muestra un código de estado 5xx es "No se encontró la página", interpretaremos que el código de estado es el de 404 (not found).

Otros errores Un archivo robots.txt que no se puede recuperar debido a problemas de DNS o de red, como agotamientos del tiempo de espera, respuestas no válidas, restablecimientos, conexiones interrumpidas y errores de fragmentación de HTTP, se trata como un error de servidor.

Almacenamiento en caché

Por lo general, Google almacena en caché el contenido de archivos robots.txt hasta por 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 reducir la duración de la caché en función de los encabezados HTTP max-age Cache-Control.

Formato del archivo

El archivo robots.txt debe ser un archivo de texto sin formato con codificación UTF-8, y las líneas deben estar separadas por CR, CR/LF o LF.

En los archivos robots.txt, Google ignora las líneas no válidas, incluidas las marcas de orden de bytes (BOM) de Unicode al principio de estos archivos y solo utiliza las válidas. Por ejemplo, si el contenido descargado es HTML en lugar de reglas de robots.txt, Google intentará analizar el contenido y extraer las reglas sin tener en cuenta todo lo demás.

De manera similar, si la codificación de caracteres del archivo robots.txt no es UTF-8, Google puede ignorar los que no forman parte del rango UTF-8 y es posible que invalide las reglas de robots.txt.

Actualmente, Google aplica de manera forzosa un límite de 500 kibibytes (KiB) para los archivos robots.txt. De esta manera, se ignorará el contenido que supere ese tamaño. Para reducir el tamaño del archivo robots.txt, consolida las reglas que generarían un archivo robots.txt de gran tamaño. Por ejemplo, coloca el material excluido en un directorio separado.

Sintaxis

Las líneas de robots.txt válidas consisten en un campo, dos puntos y un valor. Los espacios son opcionales, aunque se recomienda implementarlos para mejorar la legibilidad. Se ignorarán los espacios al comienzo y al final de la línea. Para incluir comentarios, coloca el carácter # antes de estos. Ten en cuenta que se ignorará todo el contenido después del carácter #. El formato general es <field>:<value><#optional-comment>.

Google admite los siguientes campos:

  • user-agent: Identifica a qué rastreador se aplican las reglas.
  • allow: Es una ruta de URL que se puede rastrear.
  • disallow: Es una ruta de URL que no se puede rastrear.
  • sitemap: Es la URL completa de un mapa del sitio.

Los campos allow y disallow también se denominan reglas (también conocidos como directivas). Estas reglas siempre se especifican con el formato rule: [path], en el que [path] es opcional. De forma predeterminada, no hay restricciones de rastreo para los rastreadores designados. Los rastreadores ignoran las reglas sin [path].

El valor [path], si se especifica, está relacionado con la raíz del sitio web desde donde se recuperó el archivo robots.txt (con 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 y distingue mayúsculas de minúsculas. Obtén más información sobre las coincidencias de URL según los valores de ruta.

user-agent

La línea user-agent identifica a qué rastreador se aplican las reglas. Consulta los rastreadores de Google y las cadenas de usuario-agente para obtener una lista completa de las cadenas de usuario-agente que puedes usar en tu archivo robots.txt.

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

disallow

La regla disallow especifica las rutas a las que no deben acceder los rastreadores identificados por la línea user-agent con la que se agrupa la regla disallow. Los rastreadores ignoran la regla que no tiene una ruta.

Google no puede indexar el contenido de las páginas en las que se inhabilitó el rastreo, pero puede continuar indexando la URL y mostrarla en los resultados de la Búsqueda sin un fragmento. Obtén más información sobre como bloquear la indexación.

El valor de la regla disallow distingue mayúsculas de minúsculas.

Uso:

disallow: [path]

allow

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

El valor de la regla allow distingue mayúsculas de minúsculas.

Uso:

allow: [path]

sitemap

Google, Bing y otros motores de búsqueda importantes admiten el campo sitemap en robots.txt, según la definición de sitemaps.org.

El valor del campo sitemap distingue entre mayúsculas y minúsculas.

Uso:

sitemap: [absoluteURL]

La línea [absoluteURL] apunta a la ubicación de un mapa del sitio o de un archivo de índice de mapa del sitio. Tiene que ser una URL completamente calificada, que incluya el protocolo y el host, y no debe estar codificada como URL. La URL no tiene que estar en el mismo host que el archivo robots.txt. Puedes especificar varios campos sitemap. Este campo de mapa del sitio no está vinculado a ningún usuario-agente específico, y todos los rastreadores pueden seguirlo, siempre que se permita el rastreo.

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

Puedes agrupar las reglas que se aplican a varios usuarios-agentes. Para ello, repite las líneas user-agent de 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, se muestran cuatro grupos de reglas distintos:

  • Un grupo para el usuario-agente "a"
  • Un grupo para el usuario-agente "b"
  • Un grupo para los usuarios-agentes "e" y "f"
  • Un grupo para el usuario-agente "h"

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

Orden de prioridad para usuarios-agentes

Solo un grupo es válido para un rastreador en particular. Para determinar cuál es el grupo de reglas correcto, los rastreadores de Google buscan, en el archivo robots.txt, el grupo que tenga el usuario-agente más específico con el que coincida el usuario-agente del rastreador. Se ignoran los demás grupos y 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 específico declarado para un usuario-agente, se combinan, de manera interna, en un solo grupo todas las reglas de los grupos aplicables al usuario-agente específico. No se combinan los grupos específicos de usuarios-agentes y los grupos globales (*).

Ejemplos

Coincidencias de campos user-agent

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
Googlebot-News googlebot-news sigue al grupo 1, ya que este es el más específico.
Googlebot (web) googlebot sigue al grupo 3.
Google StoreBot Storebot-Google sigue al grupo 2, ya que no hay un grupo Storebot-Google específico.
Googlebot-News (al rastrear imágenes) Cuando rastrea imágenes, googlebot-news sigue al grupo 1. Como googlebot-news no rastrea las imágenes de Google Imágenes, solo sigue al grupo 1.
Otro robot (web) Otros rastreadores de Google siguen al grupo 2.
Otro robot (Noticias) Otros rastreadores del contenido de noticias de Google, que no se identifican como googlebot-news, siguen al grupo 2. Aunque haya una entrada de un rastreador relacionado, solo es válida si coincide de forma específica.

Agrupación de reglas

Si existen varios grupos en un archivo robots.txt que son relevantes para un usuario-agente específico, los rastreadores de Google los combinan de manera interna. Por ejemplo:

user-agent: googlebot-news
disallow: /fish

user-agent: *
disallow: /carrots

user-agent: googlebot-news
disallow: /shrimp

Los rastreadores agrupan, de forma interna, las reglas según el usuario-agente. Por ejemplo:

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

user-agent: *
disallow: /carrots

El analizador de robots.txt ignora las reglas que no sean allow, disallow ni user-agent. Eso significa que el siguiente fragmento de robots.txt se trata como un grupo y, por lo tanto, user-agent a y b se ven afectados por la regla disallow: /:

user-agent: a
sitemap: https://example.com/sitemap.xml

user-agent: b
disallow: /

Cuando los rastreadores procesan las reglas de robots.txt, ignoran la línea sitemap. Por ejemplo, así entenderían los rastreadores el fragmento anterior de robots.txt:

user-agent: a
user-agent: b
disallow: /

Coincidencias de URL según los valores de ruta

Google utiliza el valor de ruta en las reglas allow y disallow como base para determinar si una regla se aplica o no a la URL específica de un sitio. Para ello, se compara la regla con el componente de ruta de la URL que el rastreador intenta recuperar. Los caracteres ASCII que no son de 7 bits y aparecen en una ruta se pueden incluir como caracteres UTF-8 o como caracteres UTF-8 codificados con escape porcentual según la RFC 3986.

Google, Bing y otros motores de búsqueda importantes admiten solo ciertos usos de comodines para valores de ruta. Estos son caracteres comodín:

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

En la siguiente tabla, se muestra el modo en que los diferentes caracteres comodín afectan el análisis:

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.
/$ Coincide solo con la raíz. Se permite el rastreo de cualquier URL de nivel inferior.
/fish

Coincide con cualquier ruta que empieza con /fish. Ten en cuenta que la coincidencia distingue mayúsculas de minúsculas.

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
  • /desert/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
  • /desert/fish
/fish/

Coincide con cualquier ruta que se incluya en la carpeta /fish/.

Coincide con lo siguiente:

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

No coincide con lo siguiente:

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

Coincide con cualquier ruta que contenga .php.

Coincide con lo siguiente:

  • /index.php
  • /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 cualquier ruta que termine con .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 cualquier ruta que contenga /fish y .php, en ese orden.

Coincide con lo siguiente:

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

No coincide con lo siguiente: /Fish.PHP

Orden de prioridad para reglas

Cuando las reglas de robots.txt coinciden con las URLs, los rastreadores usan la regla más específica que se basa en la longitud de la de ruta de la regla. En el 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 determinada.

Ejemplos
https://example.com/page
allow: /p
disallow: /

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

https://example.com/folder/page
allow: /folder
disallow: /folder

Regla aplicable: allow: /folder, ya que, en caso de que haya reglas en conflicto, Google utiliza la menos restrictiva.

https://example.com/page.htm
allow: /page
disallow: /*.htm

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

https://example.com/page.php5
allow: /page
disallow: /*.ph

Regla aplicable: allow: /page, ya que, en caso de que haya reglas en conflicto, Google utiliza la menos restrictiva.

https://example.com/
allow: /$
disallow: /

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

https://example.com/page.htm
allow: /$
disallow: /

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