Hoy he estado leyendo un post de @AlvaroRondonV sobre un experimento muy interesante que va a llevar a cabo en su blog (https://alvarorondon.com/experimento-sigue-respetando-el-onclic-y-las-ofuscaciones/ ) en él hace referencia a la ofuscación de enlaces y creo que se están dando por buenas algunas técnicas de ofuscación que como mínimo calificaría de incompletas. Así que en este artículo quiero aclarar algunas cosas.
En primer lugar:
¿Qué significa ofuscación?
No busques en la Wikipedia ni en la Rae, es un término que han apadrinado los SEOS y lo que viene a significar es: técnica utilizada para ocultar o impedir que Google pueda rastrear un determinado enlace en tu web con dos principales objetivos: por un lado para que Google no pierda tiempo de rastreo a una url que no quieres indexar (mejoraríamos el crawlbudget) y por otro, y principalmente, para no perder link juice (pagerank sculpting)
Referente a la definición anterior dos apuntes:
El tiempo de rastreo también se puede optimizar bloqueando por robots.txt aquellas urls que no queremos que Google indexe. La ventaja que tiene la ofuscación respecto al bloqueo por robots.txt es que si una url bloqueda por robots.txt tiene una etiqueta noindex, Google no podrá leer dicha etiqueta, por lo tanto, si enlazan esa url desde dominios externos es posible que Google la llegue a indexar:
(«Las páginas bloqueadas mediante un archivo robots.txt pueden seguir indexándose si hay enlaces a ellas en otros sitios web” Ref. https://support.google.com/webmasters/answer/6062608?hl=es)
Esto si usamos la ofuscación no pasará ya que Google será capaz de leer dicha cabecera y no indexarla.
Un ejemplo típico de bloqueo por robots.txt se da cuando en un ecommerce, tenemos muchos filtros que se combinan entre ellos, en este caso podemos perder un tiempo muy valioso de rastreo debido a que el número de urls que se pueden generar es exponencial al número de filtros que tenemos.
En este caso es muy común dejar una determinada combinación de filtros accesibles para el rastreador y el resto “moverlos” a una carpeta bloqueada por robots.txt. Dicho esto, mientras el bloqueo por robots no va en contra de las guidelines de Google, ofuscar un enlace en teoría sí ya que lo que pretendemos es optimizar el link juice interno de nuestro site.
Así que ten claro una cosa antes de ponerte a ofuscar como si no hubiera mañana: ofuscar enlaces, independientemente del método que uses, conlleva cierto riesgo de penalización por parte de Google.
Método de ofuscación mediante onclick con window.location
A día de hoy Google solo extrae las urls enlazadas mediante la etiqueta <a href> (mas info) así que si en vez de usar esta etiqueta usamos cualquier otra como <div> o <span> con el evento onclick de javascript:
<span onclik=”window.location=’url-destino.html’”>enlace</span>
Con esto, sobre el papel, ya estaríamos evitando que Google tratara esa url como un enlace normal a la hora de calcular el PR interno de nuestro site. Si me preguntas, esta es la manera “más segura” a nivel de penalización que existe para ofuscar un enlace. Por un lado es un método de enlazado común desde los inicios de la web, hay programas de maquetación html que usan este método de enlazado, por lo que ante una penalización manual sería muy fácil justificar su uso. Si no tienes muy claro lo de ofuscar pero quieres probar por si tu proyecto mejora, esta sería la manera más segura de evitar una penalización.
Vale Jose, si con esto tan sencillo y difícilmente penalizable ya se estaría ofuscando, ¿porque los SEOS nos complican la vida encriptando las urls en base64?
Porque los SEOS no tienen la certeza de que el método descrito arriba sirva realmente para dicho propósito. Así que buscan la manera de asegurare de que esas urls no las pueda leer Google de ninguna manera.
Métodos de ofuscación mediante carga asíncrona de enlaces
Uno de los métodos que leí aquí https://www.bufa.es/seo-como-ofuscar-enlaces-con-javascript/ lo que proponen es, mediante javascript, modificar una etiqueta spam o div y convertirla a etiqueta <a> con su correspondiente enlace una vez cargado el DOM. La url se le pasa mediante un atributo (data-url en este ejemplo). He leído ejemplos parecidos a este, pero con un temporizador para que tarde X segundos en sustituir las etiquetas y convertirlas a <a href=””>. Este método, el del temporizador, para mí no tiene mucho sentido y no lo recomendaría. Principalmente por tema de usabilidad. Si un usuario intenta pulsar en un enlace que aún no se ha generado lo normal es que cause frustración y se vaya. En ambos casos, tampoco le veo mucho sentido ya que cuando Google ejecute el javascript se va a encontrar los enlaces como si los hubiéramos metido de manera natural.
Métodos de ofuscación mediante url codificada en base64
Según el método que explica aquí Lino https://www.mecagoenlos.com/Posicionamiento/ofuscando-enlaces-para-mejorar.php#gref , consiste en ejecutar una función javascript cuando se realialza click en un enlace ofuscado, tomando como url, una url codificada en base64. El script se encarga de decodificar dicha url y realizar la acción del click mediante «window.location». La intención con esto es que Google no interprete o “vea” una estructura similar a la que pueda tener una url.
Para mí usar este método tiene los siguientes problemas:
- Tienes que estar codificando las urls en base64. Si estas urls se generan dinámicamente no hay problema, pero ¿y si quiero meter manualmente varias url? Me tocaría ir a alguna web para convertir de manera manual esa url en base64.
- Ante una penalización manual es imposible de defender. Intenta explicar a alguien el por qué eres tan friki como para encriptar una url en base64…
- Si lo que se pretende es ocultar una url a ojos de Google, codificarlas en base64 es matar moscas a cañonazos. ¿No sería más sencillo pasar la url como parámetro de esta forma?: “#url-definida-por-el-usuario” Si Google fuera capaz de sacar de eso una url, la estaría tomando como un enlace ancla y nunca como una url como tal: https://twitter.com/JohnMu/status/834467906054475777?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E834467906054475777&ref_url=https%3A%2F%2Fwww.seroundtable.com%2Fgoogle-no-url-fragments-23449.html
- A esta técnica, y a las anteriores, les falla principalmente una cosa. Cuando Google ejecute el javascript, podría ser capaz de llegar a la url de destino. Es cierto que es complicado que eso ocurra, pero si añadiéramos ese script en una carpeta bloqueada por robots.txt (como previamente Lino ya comentó en un post de 2010 https://www.mecagoenlos.com/Posicionamiento/pr-sculpting-con-javascript.php) nos aseguraríamos al 100% de que Google no pudiera leer dicha url.
Métodos de ofuscación mediante js en carpeta bloqueda por robots.txt
Lo primero de todo y más importante, el javascript que creemos debe estar en un fichero .js y este fichero deberá estar alojado en una carpeta previamente bloqueada por robots.txt
Como puedes leer al final de este post, si le indicamos a Google que un fichero está bloqueado por robots, no leerá el contenido que hay dentro de ese fichero. Si no lee el contenido, cuando intente ejecutar el javascript de la página, esa parte del código no funcionará ya que el fichero necesario para que funcione es totalmente inaccesible para Google.
La función javascript básica sería la siguiente:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script> function porAquiNo(el = ''){ var dominio = "https://www.domain.com/"; let urlTemp = $(el).data('tag')+"/"; let url = urlTemp.replace("#",dominio); window.location.href=url; } </script>
El código de inserción del enlace sería el siguiente:
<span onclick="porAquiNo(this);" data-tag="#url-que-quiero-enlazar" style=”cursor:pointer”>Texto</span>
Dentro del javascript, acabaríamos de montar la url, sustituyendo la # por el dominio y la /, y añadiendo una barra al final /
Como ves, no he encriptado la url, personalmente creo que no es necesario llegar a ese extremo. Sin embargo, el método de encriptación de url sería totalmente válido llevándonos el javascript a una carpeta bloqueada por robots.txt
Ojo, este método es igual de penalizable que los anteriores.
Por último, una reflexión personal: si tu proyecto es pequeño y el número de urls total es manejable, personalmente no me metería en ofuscación. Creo que el impacto SEO que puede tener es muy pequeño, en este caso optaría por una optimización de PR mediante enlazado interno para intentar que todas las urls importantes de mi proyecto tuvieran el mayor PR posible. Hay herramientas como Screaming Frog que pueden ser muy útiles para conseguirlo.
Si tu proyecto es grande y el PR está un poco descontrolado, aquí le veo más sentido usar la ofuscación. Un cambio en un simple enlace en el menú o en el footer (que se repiten durante todo el proyecto) sí puede alterar el PR del resto de urls. Eso sí, si no quieres correr riesgos en tu proyecto yo optaría por el método onclick clásico y solo si quieres estar seguro de que la ofuscación va a ser efectiva, usaría el método de la carpeta bloqueada por robots.txt.
Información oficial sobre el fichero Robots.txt
“Todos los rastreadores automatizados de Google siguen las directrices que se indican en este documento” (refiriéndose al robots.txt) Ref https://developers.google.com/search/reference/robots_txt?hl=es
“Google no rastrea ni indexa el contenido que se haya bloqueado con un archivo
robots.txt” Ref
https://support.google.com/webmasters/answer/6062608?hl=es
Llevo un tiempo pensando en esto, y la verdad es que como dices, no sé hasta qué punto valga la pena o no… Muchos SEO lo recomiendan, y la verdad es que es un poco estúpido que se pase PR y Link Juice a la Política de privacidad y Aviso legal aún estando en Nofollow… Pero ¿Compensará realmente ofuscar estos enlaces? ¿Hasta qué punto? :S Es un poco chungo esto de ir a ciegas con estas cosas…