¿Interpreta Google cualquier JavaScript que esté en el onready?

Publicado el 29 de mayo del 2017 por Lino Uruñuela

Aunque hemos visto en otras ocasiones cómo podría tratar Google el contenido cargado mediante JavaScript (usando Ajax con jQuery u otros métodos) ultimamente estoy con la duda de si está cambiando algo, ya que veo cosas que antes no veía o al menos de las que no me di cuenta.



Tabla que contiene el texto de prueba (seguir leyendo para entender por qué está aquí)

  • haz click para cargar contenido 1.
  • haz click para cargar contenido 2.



  • Este texto va a ser sustituido por el contenido en Ajax


    Fin de la tabla




    En un determinado site queremos cargar determinado contenido mediante javascript para que Google no lo valore, ya que es contenido de anunciantes que está hiper duplicado, es muy poco texto y aparece en casi todos los listados de la web.

    Esto no sería un problema si este anunciante no haya comprado la publicidad para casi todos los listados del site, y no solo una posición en el listado sino bastantes, lo que hace que a ojos de Google el 75% del contenido de cada listado del site sea el mismo texto.

    Lo ideal sería que ese contenido fuese algo trabajado para que realmente aporte valor, pero no es el caso, el anunciante nunca lo hará ni aceptará cambiarlo. Otra solución sería no mostrar ese contenido en todos los listados, pero el negocio manda.... Además, para más complicaciones el contenido es dinámico saliendo unos u otros valores dependiendo del listado en el que esté el usuario. A priori podría parecer que al ser dinámico no deberíamos tener problemas de duplicidad de texto entre distintos listados, pero la realidad dice que omitiendo el precio y algún que otro campo el resto será siempre igual, de aquí mi énfasis por dar con la mejor solución en cuanto a SEO.

    Dicho esto, vamos a crear el enésimo experimento para saber cómo trata Google el contenido cargado mediante Ajax y a la vez intentar averiguar hasta qué punto Google está ejecutando el código JavaScript, si es solo las funciones en el onready o si también es capaz de hacer "saltar" otras funciones que se ejecutan en base a acciones del usuario.

    Para ello hemos creado un fichero que contiene el contenido de todas las pruebas para este experimento, y que devolverá un texto u otro en base a qué parámetro se le pase. Tanto la url del fichero desde el que se carga el contenido como sus parámetros están ofuscados con base64, como vimos en otro post, en cuál comentamos una manera de camuflar los links para que Google no los tenga en cuenta como links y no diluya nuestro Link Juice.

    Ese método funciona para tal caso, Google no contará como link esos enlaces camuflados, pero no nos soluciona el cómo cargar determinado contenido sin que lo indexe y/o asocie a la url desde dónde se le llame sin ninguna acción por parte del usuario.

    Para este experimento SEO hemos preparado estas opciones
    1. Carga de contenido mediante Ajax con una función en el onready (por defecto)
    2. Carga de contenido mediante Ajax con una función en el onready tras haber pasado entre 1 y 5 segundos desde su carga.
    3. Carga de contenido mediante Ajax con una función en el onready tras haber pasado entre 5 y 10 segundos desde su carga.
    4. Carga de contenido mediante Ajax con una función en el onready tras haber pasado entre 11 y 14 segundos desde su carga.
    5. Carga de contenido mediante Ajax con una función al hacer scroll por parte del usuario.
    6. Carga de contenido mediante Ajax con una función al hacer click en un elemento del HTML, elemento 1,
    7. Carga de contenido mediante Ajax con una función al hacer click en un elemento del HTML, elemento 2,

     

    El contenido que se cargará por defecto será el de la opción 1, que se ejecuta tras el onready. Seguidamente, tras transcurrir entre 1 y 5 segundos desde que el html del documento esté listo, se cargará el contenido de la opción 2 (pasados entre 1 y 5 segundos). Continuará después cargando el contenido de la opción 3 (entre 5 y 10 segundos), y por último el contenido de la opción 4, tras haber pasado más de 11 segundos.

    Es decir, sin la acción del usuario (que serían las opciones 5,6 y 7) vamos a cargar cuatro contenidos distintos en base al tiempo que transcurra tras la completa carga del html (que no de sus elementos). Para ello usaremos el evento onready como lanzador de nuestra función, y así veremos también como Google si es capaz de ejecutar perfectamente casi cualquier javascript siempre y cuando se realice al cargar el documento/página.

    El texto de la tabla punteada de arriba está cargado mediante javascript, y la url del fichero desde dónde se extrae el contenido está encriptada en base64 para que Google no la crawlee solo por ser una cadena con patrón de url, sino que para cargar ese contenido Google ha tenido que ejecutar correctamente el código JavaScript.

    Podríamos resumir en estos los pasos necesarios para obtener el contenido externo:

    1. Ejecutar el código en las funciones ready del documento (seguramente el onload funcione igual)
    2. Decodificar esa url en base64 por medio de una función JavaScript
    3. Hacer la petición al fichero externo mediante Ajax
    4. Introducir el texto obtenido en la tabla

     

    Veremos como nada más cargar este post aparecerá un texto, cómo transcurridos entre 1 y 5 segundos hay otro texto y cómo transcurridos más de 5 segundos hay un tercer texto diferente. Además, también se cambiará el texto al hacer scroll (de ahí que esté en la zona superior del post), para poder verlo sin hacer scroll ya que cambiaría el texto

     

    Google al menos lanza una de las funciones

    Al explorar cómo Google a través de Google Search Console vemos que Google, al menos, ejecuta la función al cabo de 2 segundos que le damos en el on ready, (línea subrayada en al código de abajo).


    Google JavaScript

    <script language="javascript">
    
    var inicio;
    
    function cargarDivCodificadoCuando(div,url)
    		{
    				fin=new Date(); 
    				fin=fin.getTime(); 
    				tiempo=(fin-inicio)/1000;
    			  $(div).load(decodeURIComponent(b64_to_utf82(url)));
    			  window.document.getElementById("divTiempo").innerHTML="<br><br>Segundos transcurridos:<b>"+tiempo+"</b><br><sup>*(así podremos saber si Google siempre tarda lo mismo o no)</sup>";
    			  
    		}
    
    $(document).ready(function(){
    	inicio=new Date(); 
    	inicio=inicio.getTime(); 
    	cargarDivCodificadoCuando("#contenido","aHR0cDovL3d3dy5tZWNhZ29lbmxvcy5jb20vbWV0b2Rvcy1qYXZhc2NyaXB0LWNhcmdhQ29udGVuaWRvLnBocA==");
    	 setTimeout ( cargarDivCodificadoCuando , Math.floor(Math.random()*(5000-1000+1)+1000),"#contenido","aHR0cDovL3d3dy5tZWNhZ29lbmxvcy5jb20vbWV0b2Rvcy1qYXZhc2NyaXB0LWNhcmdhQ29udGVuaWRvLnBocD9vcGNpb249Y29uTWluaUVzcGVyYQ==");
    	 setTimeout ( cargarDivCodificadoCuando , Math.floor(Math.random()*(10000-5000+1)+5000),"#contenido","aHR0cDovL3d3dy5tZWNhZ29lbmxvcy5jb20vbWV0b2Rvcy1qYXZhc2NyaXB0LWNhcmdhQ29udGVuaWRvLnBocD9vcGNpb249Y29uRXNwZXJh");
    	 setTimeout ( cargarDivCodificadoCuando , Math.floor(Math.random()*(14000-11000+1)+11000),"#contenido","aHR0cDovL3d3dy5tZWNhZ29lbmxvcy5jb20vbWV0b2Rvcy1qYXZhc2NyaXB0LWNhcmdhQ29udGVuaWRvLnBocD9vcGNpb249Y29uRXNwZXJhMTA=");
    	 window.document.getElementById("Thun_imagen2").src ="https://www.mecagoenlos.com/fotos/onready-contenido.png&w="+Math.round(0.85*window.document.getElementsByClassName("descripcion")["0"].offsetWidth);
    });
    
    
    var hasBeenTrigged = false;
    
    
    $(window).scroll(function() {
      
         if ($(this).scrollTop() >= 100 && !hasBeenTrigged) { 
               cargarDivCodificadoCuando("#contenido","aHR0cDovL3d3dy5tZWNhZ29lbmxvcy5jb20vbWV0b2Rvcy1qYXZhc2NyaXB0LWNhcmdhQ29udGVuaWRvLnBocD9vcGNpb249Y29uU2Nyb2xs");
                hasBeenTrigged = true;
            }
        });
    
    </script>
    

    Habrá que esperar para saber cómo asocia este contenido extraído mediante javascript desde otra url y si es capaz de asociarlo a la url del post.

    Sería bueno saber si el tiempo que espera para ejecutar la función dentro del onready es más o menos el mismo o no

    También será interesante saber si Google indexa y/o asocia el contenido en el resto de los casos aquí expuestos. ¿Ejecutará la función tras 12 segundos? ¿emulará los clicks de los usuarios como en los links de arriba? ¿verá el contenido al que solo se accede mediante scroll?

     



    Últimos posts

    Últimos comentarios


    JaviLazaro
    Ya me has dado la necesidad de crear un comaando en bash para hacer estas cosas. Gracias Lino por estos tips
    Post: Obtener KWs de varias fuentes usando la línea de comandos

    Señor Muñoz
    Lino, el 11% más de clicks y el 47% más de impresiones diarias ¿es algo constante o depende de cada sitio web?
    Post: Diferencias entre la exportación de datos de Search Console usando BigQuery o usando la API

    Carlos
    Hola En mi blog tengo artículos atemporales (es decir, no caducan nunca, de manera que sirve para quien lo lea hoy o lo lea dentro de 5
    Post: Tratamiento de urls que tienen un tiempo de vida muy corto

    Profe Ray
    Veo que hay comentarios de hace 5 años y de hace 3 años. ¿Habrá algun post actualizado sobre este tema o sigue funcionando? Lo cierto es
    Post: Cómo cargar css y js y no bloquear la carga de contenido

    Pepe
    Muchas gracias por el articulo!! Muy buena información.
    Post: Qué es ofuscar enlaces y cómo mejora el enlazado interno

    María
    Sí, he buscado el archivo robots.txt y todo está correcto. La última versión vista con error fue el 08/11/2021 y la última vez que el
    Post: Errores críticos originados por el robots.txt

    Lino
    @María un placer verte por aquí :) Lo primero, a veces, con el robots.txt no se puede "forzar" a que lo rastree, si tu site no es muy p
    Post: Errores críticos originados por el robots.txt

    María
    Hola Lino, tengo el mismo problema. El probador de robots de google me indica: "Error al obtener el archivo robots.txt Tienes un archivo ro
    Post: Errores críticos originados por el robots.txt

    Mario
    Estoy tratando de vincular los datos en Google Data Studio y he combinado los datos de la tabla "Impresión del sitio" con "Impresión de UR
    Post: Datos incoherentes y cálculo de la posición media en Search Console

    José B. Moreno Suárez
    Yo hace tiempo que agrupaba con stemmers. Ahora, además, comparo con un proceso las keywords que aportan impresiones a una URL determinada
    Post: Clustering de keywords SEO en Google Search Console - Parte II