Caso práctico: Evitar la indexación con X-Robots Tag

En ocasiones encontramos en las webs ficheros no HTML que se van indexando a lo largo del tiempo. Puede que algunos de ellos sí se deban indexar, como pueden ser determinados PDFs o imágenes. Sin embargo, también podemos encontrar ficheros que no tienen ninguna utilidad para el usuario y que no nos interesa de ningún modo que estén indexados (incluso por privacidad), como pueden ser ficheros JSON o cualquier otro formato no HTML.

Este artículo quiero redactarlo ejemplificando con una situación real a la hice frente y que creo que puede ser de utilidad para entenderlo mejor .

AJAX (Asynchronous JavaScript And XML)

La web en concreto, cargaba un listado de cursos y seminarios a través de AJAX, una tecnología muy utilizada en la actualidad, súper útil pero que hay que utilizar con cuidado porque puede traernos algunos quebraderos de cabeza. El AJAX, conocido como Asynchronous JavaScript And XML, se utiliza para hacer peticiones asíncronas en segundo plano desde el cliente al servidor, sin que el usuario sea consciente de ello pero permitiendo mantener una interactividad dinámica entre cliente y servidor. Las peticiones AJAX normalmente se crean a través del objeto Javascript XMLHttpRequest, aunque son varias las formas de hacerlo (lo dejamos para otro post 😉)

Bueno, yendo al grano, la web hacía una de estas peticiones en segundo plano a su servidor para realizar la carga de estos cursos; en concreto, realizaba la petición a unas URLs que se correspondían con ficheros JSON; parseaban estos JSON y utilizaban estos datos para pintarlos en la URL de origen, vamos, el funcionamiento normal de AJAX. En definitiva los utilizaban como pequeñas bases de datos para almacenar la información de los cursos y seminarios. El caso es que todas estas URLs AJAX, es decir, los ficheros JSON, se empezaron a indexar. Nos dimos cuenta que las peticiones no necesitaban ninguna interacción del usuario y se iban realizando en el onready() de las páginas, lo que facilita mucho a Google que también haga estas peticiones.

Problemas detectados

Para colmo, el directorio donde se encontraban estas URLs AJAX estaba capado por robots.txt, lo que impedía que Google recuperara el contenido de estas URLs , y por tanto, pintaba la página completamente vacía => THIN CONTENT: páginas de cursos sin relevancia (PRIMER PROBLEMA).

Como sabemos, bloquear por robots.txt no impide la indexación, y de ahí viene el segundo problema que ya hemos comentado arriba: estas URLs de ficheros JSON estaban indexadas, con información sensible… (SEGUNDO PROBLEMA)

Eliminar la directiva disallow para el directorio /ajax/ nos parecía una locura porque sería abrir un cajón desconocido en el que podrían haber cientos de cosas que podrían empezar a indexarse. Lo primero que hicimos fue trasladar estas URLs AJAX concretas a otro directorio que no estuviera capado por robots.txt. Nuestro objetivo es que estas URLs se sigan rastreando, pero que no se indexen.

funcionamiento de ajax
Funcionamiento de AJAX: petición en segundo plano de cliente a un servidor

X-Robots Tag y Cabeceras HTTP

Como todos sabemos, la metaetiqueta robots nos permite definir una serie de directivas (que no siempre cumplen) dirigidas a los buscadores. Estas metaetiquetas se definen en el <head> de las páginas y como cualquier metaetiqueta, son etiquetas HTML.

En concreto la metaetiqueta que necesitamos para evitar la indexación de una página es:

<meta name="robots" content="noindex">

Pero claro, cuando te encuentras con un fichero que no es HTML, y que por tanto, no dispone de <head> ¿Cómo implementas la metaetiqueta robots?

Pues bien, la manera de no indexar determinados ficheros, y que quizás es algo menos conocida (o al menos frecuente), es utilizando la directiva X-Robots Tag. Esta directiva se define en las cabeceras HTTP de las URLs que no queremos indexar y tiene exactamente la misma función que la meta etiqueta robots.

Como todos sabemos, cuando nuestro navegador hace una petición al servidor para navegar por una página, este servidor devuelve unas cabeceras HTTP o headers, en la que podemos encontrar diferentes datos:

Request URL: https://www.ejemplo.com/blog/articulo-de-ejemplo.html
Request Method: GET
Status Code: 200 
Remote Address: 8
7.95.239.221:443

Referrer Policy: origin

¿Cómo implementar X-Robots Tag?

Para incluir en las cabeceras de estas URLs las directivas que creamos conveniente, como X-Robots Tag, existen diferentes métodos.

  • Si estamos tratando con PHP, existe una función sencilla que nos permite modificar las cabeceras y con la que podemos incluir esta directiva. En concreto, el código sería este:
header("X-Robots-Tag: noindex", true);
  • Si esto no es posible, tendríamos que tirar de .htacces para incluir la directiva en las cabeceras HTTP de los ficheros JSON:
<FilesMatch ".json$">
Header set X-Robots-Tag "noindex"
</FilesMatch>
  • Otra vía para hacerlo sería tirar de la configuración del servidor, en el caso de Apache podríamos modificar el fichero httpd.conf (no lo recomiendo si no tienes experiencia en ello ya que puede desconfigurarnos todo el funcionamiento del servidor).

Solución: permitir el rastreo evitando la indexación

  1. Traslado de las URLs AJAX a otro directorio diferente que no estuviera capado por robots.txt.
  2. Redirección 301 de las antiguas URLs a las nuevas.
  3. Implementación de la directiva X-Robots Tag en las cabeceras de las URLs para evitar que se indexen.

Resultado: Google era capaz de hacer las peticiones y cargar la información de los cursos. Vimos que todos los datos estaban indexados correctamente en la URL de origen pero las URLs AJAX no se indexaron.

Espero que hayáis aprendido algo conmigo 🥰

Deja un comentario