Por defecto, cuando un robot de indexación (el de Google, por ejemplo) llega a tu web, quiere indexarlo todo. Recorrerá cada enlace, buscará hasta la última URL que vea en el sitemap y no dejará un rincón de tu sitio sin explorar.
Eso no siempre es lo deseable, claro está. Hay directorios y URLs que no queremos que se indexen y, yendo más allá, hay robots que no queremos que tengan acceso a nuestro sitio (créeme, los hay). Así que vamos a ver cómo podemos poner freno a los desmanes de estos rastreadores en nuestra web mediante el archivo robots.txt y cómo configurarlo para WordPress.
Tabla de contenidos
Qué es el archivo robots.txt
El archivo robots.txt no es, ni más ni menos, que un archivo de texto (su propia extensión lo indica) que le dice a los bots de indexación de qué forma deben comportarse en nuestra web. Concretamente podemos indicarles tres tipos de cosas:
- Qué les permitimos visitar y qué no.
- Con qué frecuencia pueden visitar la web.
- Dónde encontrar los mapas de sitio XML (básicamente el archivo sitemap.xml).
Gracias a estas directrices podemos conseguir de ellos cosas como que no indexen archivos en directorios que sólo contienen código (como wp-admin), contenido duplicado, feeds o versiones para imprimir, que no consuman los recursos del servidor accediendo de forma demasiado frecuente (eso era más habitual hace años que ahora) o «intentar» bloquear el acceso a ciertas herramientas como curl, wget, WebCopier, etcétera.
Pero claro, hay un par de salvedades a tener en cuenta:
- Algunos bots maleducados pueden ignorar las directrices del robots.txt
- Cualquiera puede ver este archivo, así que no deberías utilizarlo para bloquear el acceso a /directorio-super-secreto/
Esto quiere decir que podemos poner una directiva bloqueando el paso a un bot malicioso, por ejemplo el muieblackcat (un bot que busca vulnerabilidades en archivos PHP), pero evidentemente el script la va a ignorar.
Sería como poner un cartel a la puerta de casa que diga No se admiten ladrones. Ejem. De todos modos, confieso que yo sí tengo puesta esa directiva concreta, aunque más como una declaración de intenciones que otra cosa.
Directivas del archivo robots.txt
Vamos a empezar a crear nuestro archivo robots.txt. Porque si no lo has creado tú expresamente no lo tienes, no es un archivo obligatorio. Puedes comprobarlo intentando acceder a él en la raíz de tu web, es decir, tecleando en el navegador www.tuwebmolona.com/robots.txt
Si no está, puedes crear uno. Como te decía basta con crear un simple archivo de texto y llamarlo robots.txt. Lo importante es lo que pone dentro.
Permitir o denegar acceso a determinadas partes del servidor o la web: las directivas Allow y Disallow
Allow y Disallow son las directivas básicas, que respectivamente permiten y deniegan el acceso de los bots a determinados recursos.
Siempre deben ir precedidas (tanto estas como cualquier otra directiva) por la indicación de a qué rastreador está dirigida, mediante User-agent. Puedes usar comodines, así que si pones:
User-agent: Googlebot
User-agent: Googlebot-Image
lo que venga a continuación se aplicará a los crawlers de Google y Google Imágenes, mientras que si pones por ejemplo:
User-agent: *
se aplicará a cualquier rastreador. De la misma forma, la directiva:
User-agent: *
Allow: /
permitirá acceder a cualquier bot a toda la web, sin restricciones (salvo las que añadas debajo, a continuación), o por ejemplo:
User-agent: *
Disallow: /carpeta-privada/
ya sabes lo que hará: impedirá que cualquier cosa que esté dentro de /carpeta-privada/ se indexe (recuerda lo que te dije antes: el archivo robots.txt es de acceso público).
Bloquear el paso a determinados bots
Podemos hacer uso de la directiva Disallow para, como decía antes, bloquear a ciertos bots indeseables. Otra cosa, como decía más arriba también, es que hagan caso o no. Los bots bien educados obedecen, pero algunos se lo pasan por el forro.
Un ejemplo de bots bien educados son wget y curl. Con uno de ellos y una consola de comandos (preferiblemente una shell Linux) cualquiera puede descargar una web entera. Completita, incluyendo imágenes o cualquier otro documento que contenga (eso sí, no las fuentes en PHP, sino la transcripción en HTML).
De hecho, si tienes acceso a una shell simplemente escribe wget -r https://www.enriquejros.com/. El programa creará el directorio www.enriquejros.com y comenzará a replicar en él la estructura de esta web… Bueno, no. No lo hará.
Lo haría si no lo tuviera bloqueado en el robots.txt. Lo que en realidad va a hacer es descargar, siguiendo el orden que wget tiene establecido, primero el index y después el robots.txt, y ya no seguirá. Porque en mi robots.txt leerá:
User-agent: wget
Disallow: /
Y cuando lea eso, como bot bien educado que es, se detendrá. En realidad, tengo unas pocas más:
User-agent: wget
User-agent: curl
User-agent: MSIECrawler
User-agent: WebCopier
User-agent: HTTrack
User-agent: libwww
User-agent: muieblackcat
User-agent: duggmirror
Disallow: /
Algunos son programas legítimos que se pueden usar de forma ilegítima para descargar recursos de una web, otros son bots que copian sitios web y otros son directamente scripts maliciosos. No todos obedecerán, pero ahí están. Y la lista podría ser mucho más larga. Pereza.
¿Estás construyendo tu tienda online o eres implementador WordPress?
¿Necesitas plugins de calidad y con soporte para implementar funcionalidades concretas?
Consigue todos los plugins a la venta en la sección de plugins de esta web y todos los que siga añadiendo. Acceso a los 96 plugins (y subiendo) con soporte directo del desarrollador, actualizaciones y uso ilimitado: úsalos en tantas webs como lo necesites.
Limitar el acceso de los rastreadores: las directivas Crawl-delay, Visit-time y Request-rate
Esto era mucho más habitual hace años, cuando la web era un lugar mucho menos poblado y los recursos de los servidores eran más limitados que ahora. Pero mira, ahí están, y no voy a dejar el artículo cojo por no explicarlos (yo mismo aún incluyo alguna de ellas, que llevo arrastrando de un robots.txt a otro desde hace años).
Estas directivas limitan el acceso a los crawlers de tres formas distintas:
- Crawl-delay establece una frecuencia máxima de acceso, en segundos
- Visit-time limita el horario de rastreo (según el horario GMT)
- Request-rate limita la velocidad de acceso a los recursos
Por ejemplo, si incluyo en el robots.txt algo así:
User-agent: Slurp
Crawl-delay: 10
Visit-time: 0100-0730
Request-rate: 3/5m
le estaré diciendo al rastreador de Yahoo (Slurp) que no puede acceder a mi web en intervalos menores de diez segundos, que sólo puede entrar entre la 1:00 y las 7:30 GMT y que sólo puede indexar tres archivos o recursos cada cinco minutos.
Como digo ahora todo eso no tiene ya mucho sentido incluirlo, pero está bien tenerlo en cuenta si notas que algún bot accede con demasiada frecuencia a tu web, o si lo hace a horas en las que tienes mucho tráfico. Bing, por cierto, permite configurar estas cosas a través de su administrador de webs
Indicar la situación de los mapas de sitio: la directiva Sitemap
Con la directiva Sitemap puedes indicar al robot indexador dónde encontrar el mapa del sitio XML (el archivo sitemap.xml) de tu web. Sería algo así:
Sitemap: https://www.enriquejros.com/sitemap.xml
En realidad, si haces las cosas bien hechas no es necesario incluirla: basta con indicar a Google y a Bing dónde tienes ese archivo mediante la herramienta que, como webmaster, tienes a tu disposición en Google Search Console (antiguo Webmaster Tools) y en el administrador de webs de Bing, respectivamente.
Además, si la incluyes deberías recordar actualizarla en caso de que cambie la URL, como en un cambio de dominio o si pasas de HTTP a HTTPS.
El archivo robots.txt para WordPress
Después de todo este tostón teórico viene la gran pregunta: ¿cómo hago un robots.txt adecuado para WordPress? Bueno, pues si has leído todo este rollo ya deberías saberlo (y si no te lo digo enseguida). Tu robots.txt debería:
- Permitir el acceso a la web (siempre que quieras que la gente te encuentre y te visite, claro)
- Bloquear el acceso a directorios que sólo contienen código, o recursos que no quieres que se indexen
- Prevenir el contenido duplicado, bloqueando el acceso a archivos de caché, a URLs con variables, creadas por muchos plugins e incluso por el propio WordPress (?replytocom y similares), a feeds parciales, feeds de comentarios y trackbacks
- Permitir el acceso a los recursos CSS y JavaScript (Google los necesita para interpretar cómo verá la gente tu contenido), con lo que no deberías bloquear el acceso a wp-content/themes/ o a wp-content/plugins/
- Permitir el acceso a las imágenes (wp-content/uploads/ por defecto), para que se indexen en los buscadores específicos de estos recursos, como Google Imágenes
En fin, aquí te dejo mi robots.txt (con algunos cambios para adaptarlo a un uso general) por si te es de utilidad. Recuerda que algunas de sus directivas no te servirán y en tu caso deberás añadir seguramente otras en función de tu configuración, pero en general te permitirá hacerte una idea:
User-agent: *
Allow: /
Disallow: /?*
Disallow: /*?*
Disallow: /*?
Disallow: /wp-
Allow: /wp-content/
Disallow: /wp-content/upgrade/
Disallow: /wp-content/cache/
Allow: /wp-includes/
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /search
Allow: /feed/$
Disallow: /comments/feed
Disallow: /*/feed/$
Disallow: /*/feed/rss/$
Disallow: /*/trackback/$
Disallow: /*/*/feed/$
Disallow: /*/*/feed/rss/$
Disallow: /*/*/trackback/$
Disallow: /*/*/*/feed/$
Disallow: /*/*/*/feed/rss/$
Disallow: /*/*/*/trackback/$
User-agent: wget
User-agent: curl
User-agent: MSIECrawler
User-agent: WebCopier
User-agent: HTTrack
User-agent: Microsoft.URL.Control
User-agent: libwww
User-agent: muieblackcat
User-agent: duggmirror
Disallow: /
User-agent: Slurp
Crawl-delay: 10
Como siempre, para cualquier duda, consulta, pregunta o lo que sea, tienes a tu disposición el formulario de contacto.
Jose dice
Muchas gracias Enrique por tu gran explicación, pero tengo una duda, ¿donde hay que ubicar el archivo robot.txt?
Gracias y un saludo.
Enrique J. Ros dice
Gracias a ti por tu comentario, Jose. El robots.txt (ojo con el nombre, debe ir así, en plural) tienes que subirlo por FTP o a través del gestor de archivos de tu panel del hosting y colocarlo en la raíz de la web, en el mismo directorio en el que están las carpetas wp-admin, wp-content y wp-includes.
Un saludo.
Carlos dice
Mil gracias Enrique! Saludos de un joven aprendiz del mismo gremio!
Abel dice
Hola Enrique,
Gracias por el artículo lo primero.
Tengo una duda, a ver si tú puedes echarme un cable.
En search console me marca como contenido duplicado estas url a pesar de tener la canonical correctamente puesta:
mipagina.com/page/25?refsite=www.n1ads.com&ref=alexa-traffic-rank
El caso es que leyendo tu artículo sobre robots, he añadido la siguiente línea:
Disallow: /*?
Y ahora, pruebo en search console y efectivamente esas url están bloqueadas.
Pero me surge una duda, en la página de resultados de búsqueda de wordpress, que también empieza por ? yo tengo puesto noindex,follow.
¿Eso no es una contradicción?
Es decir, por un lado le estoy diciendo al robot que no tiene permitido entrar en las páginas con ? y por otro lado, le estoy diciendo que no las indexe pero que las siga.
¿Es una contradicción? o está bien.
Muchas gracias por tu tiempo!
Enrique J. Ros dice
Hola Abel
No hay contradicción: follow indica a los bots que sigan (que visiten) los enlaces que contiene la página.
Un saludo
Abel dice
Muchas gracias Enrique,
Entonces, para que me aclare, aunque a los bots les diga que no tienen permitido entrar a esas páginas (disallow), ellos siguen los enlaces (follow)de esas páginas a las que no tienen permitido acceder, verdad?
Un saludo!
Enrique J. Ros dice
Hola Abel
Si el bot se comporta como debe, no accederá a las URLs bloqueadas por robots.txt para nada.
Un saludo.