¿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


    augmentin 875 mg po bid
    160 Gotland CLOPIDOGREL 75 mg GARMISCH Clopidogrel Caja x 15 tabs augmentin liquid
    Post: Cómo influye el servidor y el dominio

    Lino
    @spamloco a tí r hacerme ver que no soy al único que le importa :p A ver si nos vemos!
    Post: ¿Cómo decide Google que URL debe rastrear?

    Alejandro
    Gracias Lino, siempre investigando un poco más allá.
    Post: ¿Cómo decide Google que URL debe rastrear?

    Lino
    3,2,1... Gracias a ti Pedro!! y sí, parece que los humanos somos expertos en haciendo ruido cuando intentamos que alguien nos escuche... :p
    Post: ¿Cómo decide Google que URL debe rastrear?

    Pedro
    1,2...1,2... probando. Gracias por el artículo, verdaderamente interesante ver cómo no paramos de generar ruido :)
    Post: ¿Cómo decide Google que URL debe rastrear?

    Lino
    Funcionan!! Ahora solo tengo que generar engagement :D A ver si quito lo de avisar por Twitter... no sé cuántos años llevará sin funcio
    Post: ¿Cómo decide Google que URL debe rastrear?

    Juanan Carapapa
    Yo también vengo a probar los comentarios, probando probando xD
    Post: ¿Cómo decide Google que URL debe rastrear?

    Lino2
    Hola @errioxa que tal
    Post: ¿Cómo decide Google que URL debe rastrear?

    Lino2
    Hola
    Post: ¿Cómo decide Google que URL debe rastrear?

    Lino
    Probando!
    Post: ¿Cómo decide Google que URL debe rastrear?