Cambiar la ubicación para las búsquedas en Google

Si vivo en Sevilla, ¿cómo puedo saber qué resultados de búsqueda le aparecerán a alguien que esté en Madrid o Barcelona? ¿Puedo hacer creer a Google que estoy en otro sitio? ¿Es posible cambiar la ubicación? Por supuesto, solamente hay que ejecutar un par de líneas Javascript que te voy a contar ahora mismo.

Todos sabemos que Google muestra resultados personalizados relativos a tu perfil, y que para eso usa tus intereses, tus gustos, tus últimas búsquedas, tus amigos y tu localización geográfica. Está claro que esto lo hace por ayudarnos, para poder ofrecernos unos resultados más útiles. Pero si lo que quieres hacer, es comprobar el posicionamiento de tu web en distintas ciudades, querrás que no se tenga en cuenta nada de eso. Así tendrás una imagen más realista de qué resultados les salen a los demás. Vamos a ver cómo hacerlo.

La primera recomendación para que no nos identifiquen es desloguéate de tu cuenta de Google. Bien, pero puede que no sea suficiente porque las cookies siguen estando ahí, así que borra las cookies… Vale, vale, espera un momento, hay una solución más sencilla: abre una ventana de incógnito. Con eso matas dos pájaros de un tiro, tendrás una nueva ventana limpia de cookies y sin login en Google. Seguimos.

Ahora haz la búsqueda en Google que te interese, por ejemplo “Restaurantes”, cuando salgan los resultados verás que son restaurantes cerca de tu casa. Ve abajo del todo y verás cuál es tu ubicación y por qué Google la sabe.

Ubicación geográfica de Google

Ubicación detectada por Google

Al estar en una ventana de incógnito, sin saber quién soy y sin tener cookies que consultar, Google sólo puede recurrir a dos cosas, la IP y la geolocalización. La primera forma es poco fiable en realidad, no es nada precisa y además se puede falsear con proxies o VPNs, pero al menos la IP es pública y se puede usar sin meterte en problemas. La segunda proporciona una posición basada en longitud y latitud (y precisión en metros). Aunque es mucho mejor, requiere autorización del usuario porque de alguna manera vulnera tu privacidad, y por eso aparece como una opción: “Usar ubicación precisa“.  Cuando pulsas ahí, te aparecerá un popup avisándote de que la página está intentando rastrear tu posición y te pregunta si estás de acuerdo. Si alguna vez autorizaste a Google a conocer tu ubicación exacta, no tendrás que volver a darle permiso.

Vamos a intentar engañar a Google con esta geolocalización y me voy a poner un poco más técnico, así que si no te enteras de mucho con el Javascript, quizás prefieras saltarte las explicaciones e ir directamente a la versión final minificada del código.

Cuando se quiere geoposicionar a un usuario, se usa esta función Javascript:

navigator.geolocation.getCurrentPosition(success,error,options)

Hay que pasarle dos funciones (callbacks), una para cuando todo sale bien y otra para cuando hay algún error, y también se le puede pasar un objeto con opciones adicionales. Para saber más de este tema puedes mirar aquí: Uso de Geolocalización – MDN.

Esta función es, sin duda, la que Google Search debe usar cuando pulsamos la opción de ubicación precisa. Al ejecutarla, se calculará la longitud y latitud, y se les pasará como argumento a la función “success” para que haga lo que necesite hacer con esos datos. Así que para engañar a Google, vamos a darle el cambiazo. Vamos a definir una nueva función getCurrentPosition que no calcule nada, pero sí ejecute la función “success” con la longitud y latitud que nosotros queramos, por ejemplo, Huesca [latitud: 42.141428, longitud: -0.406062]:

navigator.geolocation.getCurrentPosition = function(success,error,options) {
  var position = {
    coords: {
      latitude: 42.141428,
      longitude: -0.406062,
      accuracy: 5
    }
  };
  success(position);
};

Como ves, estamos sobreescribiendo la función. Hay dos partes importantes, una (en azul) donde definimos la posición en forma de longitud, latitud y precisión (en metros), y otra donde ejecutamos la función “success” (en naranja) pasándole estos datos de posición. Fíjate que la variable “position” hay que crearla con la misma estructura que tiene un objeto de posición real (mas información).

Y aquí tenemos la versión final minificada para poder usarla en un Bookmarklet. En color naranja he marcado la latitud y longitud (respectivamente) de la posición geográfica en la que queremos decir que estamos. Tienes que editar esos valores para adaptarlo a lo que tú necesites: (nota, este código ya no funciona, pero lo dejo por motivos educativos, más abajo está el código que sí funciona)

(function(lat,lon){navigator.geolocation.getCurrentPosition=function(s,e,o){s({coords:{latitude:lat,longitude:lon,accuracy:5}});}})(42.141428,-0.406062);

¿Qué hago con esto ahora? Tienes que ejecutarlo en la consola (pulsa F12) o, si quieres, puedes construir un Bookmarklet para poder ejecutarlo con comodidad siempre que lo necesites. Una vez ejecutado, ya está preparada la trampa, así que cuando pulses el botón de “Usar ubicación precisa“, Google se comerá con patatas tu ubicación falsa.

NOTA MUY IMPORTANTE (EDITADO): Ha habido una actualización del código de la página de búsqueda y Google ya no se come eso con patatas. El caso es que cuando se carga la página, Google coge una referencia a la función getCurrentPosition() y la guarda en una variable, de manera que aunque luego la cambiemos por otra, se seguirá ejecutando la función original en vez de la nuestra. Una solución podría ser dar el cambiazo antes de que Google guarde esa referencia, pero esto sólo podríamos hacerlo con una extensión de Chrome o algo así. La otra opción es usar este nuevo código (que no puedo explicar), que se basa en la misma idea.

(function(lat,lon){QS_Frc=function(a){var b=QS_d(a.ma,a);b({coords:{latitude:lat,longitude:lon,accuracy:5}});}})(42.141428,-0.406062);

Puedes arrastrar esto a marcadores: Huesca

No sé cuánto durará esta solución, pero si lo pruebas y no funciona, déjame un comentario y lo revisaré. El resto del artículo sigue siendo válido.

Vamos a repasar cómo hacer un Bookmarklet paso a paso por si te viene bien:

  1. Ve a Google Maps, busca la ciudad que te interese y obtén la latitud y longitud. Si no tienes claro cómo hacerlo, puedes mirarla en la URL que pondrá algo como:
    https://www.google.es/maps/place/Madrid/@40.4381311,-3.8196225,11z
    El número después de la arroba es la latitud, y el que hay después de la coma es la longitud. ¡CÓPIALOS!
  2. Ve a Administrar Marcadores de Chrome y crea un nuevo marcador. Para el nombre escribe algo indicativo que use el nombre de la ciudad, por ejemplo: “Ubicación Madrid“. Y como URL, escribe: “javascript:” y detrás pega las líneas de código de arriba cambiando la latitud y la longitud por las de la ciudad que te interese.
Bookmarklet para Ubicación

Ejemplo de Bookmarklet (RECUERDA PONER “javascript:”)

A partir de ahora, cuando pulses ese marcador, se ejecutará el código para engañar a Google sobre la ubicación. Haciendo esto puedes tener un marcador para cada ciudad. Así que recuerda, cuando estés en la ventana de incógnito, pulsa primero en el bookmarklet de la ciudad que quieras consultar y luego en “Usar ubicación precisa“.

Eso es todo, pero si le has cogido el gustillo a esto de engañar a Google, quizás te interese también cómo engañar a Chrome para jugar al dinosaurio aunque tengas conexión a internet.


 

Bueno, me queda por comentar una última forma que es algo más tediosa, pero vale la pena conocerla también. Consiste en usar las opciones de emulación de Chrome que sirven para ayudar a los desarrolladores a comprobar que las páginas web funcionan correctamente en todas las circunstancias posibles.

Voy a poner los pasos directamente porque no hay mucho más que explicar:

  1. Abre una ventana de incógnito y haz la búsqueda que te interese
  2. Pulsa F12 para que se abra la ventana de “Developer tools
  3. Pulsa ESC para abrir una consola que aparecerá debajo, llamada Drawer
  4. En el Drawer pulsa la pestaña Emulation
  5. Si lo único que aparece es un botón que pone “Enable emulation“, púlsalo (si no, nada)
  6. En el lado izquierdo del Drawer pulsa en Sensor
  7. Marca la casilla “Emulate geolocation coordinates y rellena los datos de Latitud y Longitud.
  8. No cierres la ventana de “Developer tools” o se acabará la emulación
  9. Ve a la ventana de la búsqueda y pulsa en “Usar ubicación precisa

 

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn