Cómo trabajar con Yandex Metrica y Logs API

Aunque Yandex Metrica permite crear segmentos, informes y dashboards personalizados, es posible que en algunos proyectos necesitemos más libertad a la hora de trabajar con los datos que registra Metrica.

Hay que recordar que Yandex Metrica no aplica muestreo y tenemos acceso a los datos en bruto de nuestros contadores.

La API de Yandex Metrica es bastante potente. He hablado sobre ella en algún evento de analítica web, está muy bien documentada y es sencilla de usar. Pero últimamente he estado probando Logs API con contadores de Metrica, y creo que las posibilidades son increíbles, ya que básicamente te llevas los datos que quieres para hacer luego lo que necesites con ellos.

Y con este artículo quiero hacerte una introducción a Logs API para que puedas realizar peticiones para generar un log con los datos que quieras. Yandex te sugiere, obviamente, que una vez tengas los datos conectes con ClickHouse, pero lo cierto es que puedes llevártelos donde quieras.

Paso 1: registra una aplicación con Yandex OAuth

Esto es obligatorio, aunque muy sencillo. Sin registrar una aplicación, no podremos obtener un token de acceso y sin el token de acceso, las llamadas a la API de Yandex (sea la de Metrica o la de Logs) nos dirán que el acceso no está autorizado.

Empieza en la página de Yandex OAuth y registra una aplicación

https://oauth.yandex.com/

Rellena todos los datos, selecciona Web services como plataforma en la que usarás la aplicación que estás registrando. Indica que la URL de retorno (Callback URL) será la de desarrollo, y marca los permisos que necesites. Para el objetivo de lo que estoy contando, basta con los permisos de acceso a las estadísticas de los contadores de Yandex Metrica.

Cuando tengas registrada la aplicación, verás que te muestra tres datos:

  • ID
  • Password
  • Callback URL

Necesitarás el ID para obtener el token con el que harás luego las llamadas a la API.

Para obtener el token, ve a esta dirección, cambiando ID por el ID de la aplicación que acabas de registrar:

https://oauth.yandex.com/authorize?response_type=token&client_id=<ID>

Con esto, obtenemos lo que Yandex llama el Debugging token, aunque si lo que vas a hacer depende únicamente de tu lado, este token de desarrollo puede valer sin más.

Al visitar esa URL, te devolverá el token de acceso, una cadena alfanumérica que nos servirá para autenticar las llamadas que haremos a la API.

Y así, ya podemos continuar preparando la parte en la que recuperaremos los datos de nuestros contadores de Metrica.

Paso 2: consulta los logs que has solicitado

Además del token de acceso, vamos a necesitar el ID del contador de Yandex Metrica del que vamos a recuperar datos. Lo tienes en el listado de códigos que tienes creados en Yandex Metrica.

https://api-metrica.yandex.net/management/v1/counter/<contadorID>/logrequests

Donde:

  • <contadorID>: identificador del código de Yandex Metrica del que quieres recuperar los datos

La llamada a la API:

$metrica_url = "https://api-metrica.yandex.net/management/v1/counter/<CONTADORID>/logrequests";

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$metrica_url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Authorization: OAuth <DEBUGGINGTOKEN>"));
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$metrica_result = curl_exec ($ch);
curl_close($ch);

$metrica_output = json_decode($metrica_result);
print_r($metrica_output);

El resultado:

stdClass Object
(
    [requests] => Array
        (
            [0] => stdClass Object
                (
                    [request_id] => <REQUESTID>
                    [counter_id] => <CONTADORID>
                    [source] => hits
                    [date1] => 2019-09-01
                    [date2] => 2019-09-21
                    [fields] => Array
                        (
                            [0] => ym:pv:dateTime
                            [1] => ym:pv:URL
                            [2] => ym:pv:lastTrafficSource
                        )

                    [status] => processed
                    [size] => 59621
                    [parts] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [part_number] => 0
                                    [size] => 59621
                                )

                        )

                )

        )

)

Paso 3: consulta la viabilidad de una solicitud

Antes de solicitar formalmente que se procesen los datos que necesitemos, podemos consultar la viabilidad de nuestra petición. En el resultado de la llamada a la API encontraremos si es posible o no, y si no hay problemas, le mandaremos la solicitud en el paso siguiente.

https://api-metrica.yandex.net/management/v1/counter/<contadorID>/logrequests/evaluate? date1=<FECHA>&date2=<FECHA>&fields=<DIMENSIONES>&source=<DATOS>

Donde:

  • contadorID: identificador del código de Yandex Metrica del que quieres recuperar los datos
  • date1: desde qué día quieres los datos
  • date2: hasta qué día quieres los datos
  • fields: las dimensiones que quieres recuperar (documentación)
  • source: si quieres recuperar hits o sesiones (en función de lo que necesites, tienes a tu disposición diferentes dimensiones).

Puedes consultar la sintaxis de los campos a recuperar en la documentación de Logs API para Hits o la documentación de Logs API para Sesiones.

La llamada a la API:

$metrica_url = "https://api-metrica.yandex.net/management/v1/counter/<CONTADORID>/logrequests/evaluate?date1=2019-09-01&date2=2019-09-15&fields=ym:pv:dateTime,ym:pv:title,ym:pv:URL,ym:pv:lastTrafficSource&source=hits";

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$metrica_url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Authorization: OAuth <DEBUGGINGTOKEN>"));
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$metrica_result = curl_exec ($ch);
curl_close($ch);

$metrica_output = json_decode($metrica_result);
print_r($metrica_output);

El resultado:

stdClass Object
(
    [log_request_evaluation] => stdClass Object
        (
            [possible] => 1
            [max_possible_day_quantity] => 1848612
        )

)

Paso 4: realiza la solicitud para crear un log

Una vez que hayamos comprobado que nuestra solicitud de datos se puede procesar, ya podemos enviar la solicitud formal para que se prepare nuestro log.

https://api-metrica.yandex.net/management/v1/counter/<contadorID>/logrequests?date1=<FECHA>&date2=<FECHA>&fields=<DIMENSIONES>&source=<DATOS>

Donde:

  • contadorID: identificador del código de Yandex Metrica del que quieres recuperar los datos
  • date1: desde qué día quieres los datos
  • date2: hasta qué día quieres los datos
  • fields: las dimensiones que quieres recuperar
  • source: si quieres recuperar hits o sesiones (en función de lo que necesites, tienes a tu disposición diferentes dimensiones).

Puedes consultar la sintaxis de los campos a recuperar en la documentación de Logs API para Hits o la documentación de Logs API para Sesiones.

La llamada a la API (ojo, esta tiene que ir como POST):

$metrica_url = "https://api-metrica.yandex.net/management/v1/counter/<CONTADORID>/logrequests?date1=2019-09-01&date2=2019-09-21&fields=ym:pv:dateTime,ym:pv:title,ym:pv:URL,ym:pv:lastTrafficSource&source=hits";

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$metrica_url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Authorization: OAuth <DEBUGGINGTOKEN>"));
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_POST, true);
$metrica_result = curl_exec ($ch);
curl_close($ch);

$metrica_output = json_decode($metrica_result);
print_r($metrica_output);

El resultado:

stdClass Object
(
    [log_request] => stdClass Object
        (
            [request_id] => <REQUESTID>
            [counter_id] => <CONTADORID>
            [source] => hits
            [date1] => 2019-09-01
            [date2] => 2019-09-21
            [fields] => Array
                (
                    [0] => ym:pv:dateTime
                    [1] => ym:pv:title
                    [2] => ym:pv:URL
                    [3] => ym:pv:lastTrafficSource
                )

            [status] => created
        )

)

Ahora tendríamos dos logs solicitados / creados si hacemos la petición del paso 1, cada uno con un requestID diferente (obviamente).

Paso 5: consulta el estado de tu solicitud

Si hemos solicitado muchos datos, es posible que tarde un tiempo en procesar la solicitud. Con esta llamada a la API podemos comprobar si la solicitud está procesada y los datos están disponibles.

https://api-metrica.yandex.net/management/v1/counter/<contadorID>/logrequest/<requestId>

Donde:

  • contadorID: identificador del código de Yandex Metrica del que quieres recuperar los datos
  • requestID: identificador de la solicitud de log que quieres consultar

La llamada a la API:

$metrica_url = "https://api-metrica.yandex.net/management/v1/counter/<CONTADORID>/logrequest/<REQUESTID>";

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$metrica_url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Authorization: OAuth <DEBUGGINGTOKEN>"));
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$metrica_result = curl_exec ($ch);
curl_close($ch);

$metrica_output = json_decode($metrica_result);
print_r($metrica_output);

El resultado:

stdClass Object
(
    [log_request] => stdClass Object
        (
            [request_id] => <REQUESTID>
            [counter_id] => <CONTADORID>
            [source] => hits
            [date1] => 2019-09-01
            [date2] => 2019-09-21
            [fields] => Array
                (
                    [0] => ym:pv:dateTime
                    [1] => ym:pv:title
                    [2] => ym:pv:URL
                    [3] => ym:pv:lastTrafficSource
                )

            [status] => processed
            [size] => 81420
            [parts] => Array
                (
                    [0] => stdClass Object
                        (
                            [part_number] => 0
                            [size] => 81420
                        )

                )

        )

)

Paso 6: descarga el log de tu solicitud

Una vez que tengamos procesada la solicitud de log, podemos disponer de los datos. Los puedes guardar en un fichero de texto, meterlos en base de datos…

https://api-metrica.yandex.net/management/v1/counter/<contadorID>/logrequest/<requestId>/part/<partNumber>/download

Donde:

  • contadorID: identificador del código de Yandex Metrica del que quieres recuperar los datos
  • requestID: identificador de la solicitud de log que quieres recuperar
  • partNumber: identificador numérico de la parte del log que quieres recuperar

La llamada a la API:

$metrica_url = "https://api-metrica.yandex.net/management/v1/counter/<CONTADORID>/logrequest/<REQUESTID>/part/0/download";

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$metrica_url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Authorization: OAuth <DEBUGGINGTOKEN>"));
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$metrica_result = curl_exec ($ch);
curl_close($ch);

echo($metrica_result);

El resultado:

He pixelado la imagen, pero básicamente ya te lo imaginas… texto separado por tabuladores que puedes importar fácilmente a Excel o una base de datos tipo MySQL. A partir de aquí, imaginación para exprimir los datos.

Limitaciones

Tienes que usar el token de acceso en todas las peticiones que hagas a la API.

El volumen máximo de datos que se puede transmitir en cada solicitud es de 10 GB por cada contador de Metrica.

Los datos del día actual pueden no estar completos. Además, en algunas solicitudes puedes recibir un mensaje de error que la fecha (date2) debe ser anterior al día actual. Yandex recomienda en la documentación que user el día anterior como límite para recuperar los datos.

Más información

Metrica API
https://tech.yandex.com/metrika/

Documentación de la API de Metrica
https://tech.yandex.com/metrika/doc/api2/concept/about-docpage/

Autorización y token de acceso OAuth
https://tech.yandex.com/metrika/doc/ref/concepts/authorization-docpage/

Introducción a Logs API
https://tech.yandex.com/metrika/doc/api2/logs/intro-docpage/

Cómo hacer debug en Yandex Metrica

Si trabajas con Yandex Metrica, es posible que necesites comprobar rápidamente si tu código de seguimiento funciona correctamente, especialmente si mandas parámetros de usuario o parámetros de sesión. Una forma sencilla de hacerlo es añadir esta variable a la URL del sitio con el que estés trabajando:

?_ym_debug=1 // si no tienes variables en la URL
&_ym_debug=1 // si tienes otras variables en la URL

Así, verás en la consola del navegador el resultado de la comunicación con Metrica:

En esta captura de pantalla, tomada en la cuenta demo de Yandex Metrica, se ve cómo envía parámetros de sesión para indicar si el usuario tiene el menú lateral recogido o desplegado (luego todos estos parámetros están disponibles en los informes). En la primera de las líneas que se ve en la captura, comprobamos el pageview que envía al cargar la página.

Invalid response status: 307 con PayPal IPN Listener

Si usas la librería PayPal IPN Listener (https://github.com/Quixotix/PHP-PayPal-IPN) en algún proyecto, es posible que te haya dejado de funcionar la comunicación con PayPal y que encuentres en el log de errores una línea como esta:

[28-Jun-2018 18:12:04 Europe/Madrid] Invalid response status: 307

En junio de 2018 PayPal hizo efectivos una serie de cambios en sus servicios, y además de necesitar una URL para tu IPN que responda bajo HTTPS, tendrás que hacer este cambio para resolver el problema del 307.

En el fichero ipnlistener.php tendrás que modificar las líneas 71 y 72 (si no son estas mismas, por ahí andarán) por estas:

const PAYPAL_HOST = 'ipnpb.paypal.com';
const SANDBOX_HOST = 'ipnpb.sandbox.paypal.com';

Al menos en mi caso, el problema era este. La URL por defecto es www.paypal.com, pero PayPal recomienda usar ipnpb.paypal.com, e intuyo que ese 307 es la redirección de www a ipnpb.

Un consejo adicional para que nos apliquemos los que aún usamos PayPal IPN Listener es que actualicemos código, pues este recurso tiene ya unos cuantos años y tiene pinta de haber sido abandonado. ¿Qué alternativa a PayPal IPN Listener recomendarías?

Usar Internet Explorer en Mac

Si diseñas o desarrollas en entorno web y trabajas con Mac, seguro que te has encontrado con el problema de probar tu trabajo con Internet Explorer, ese navegador que casi siempre ha ido por libre en estos temas.

Casi con toda probabilidad has terminado usando Parallels o VMware, instalando alguna versión de Windows y a partir de ahí, a probar con Explorer (la versión que venga por defecto o alguna actualización que ya corre por tu cuenta).

Si has pasado por esto, una de las formas (si no la más) sencilla es descargarte una imagen para Parallels o VMware directamente desde el sitio web de Microsoft (Developer technologies).

Microsoft Virtual Machines

Como ves en la imagen, tienes disponibles varias versiones de Windows e Internet Explorer, incluso Edge. Solo has de elegir la que quieras usar, elegir tu plataforma (para Mac, Parallels o VMware), y lo tienes hecho. Y legal, no tendrás que pedir a nadie una copia de Windows. Estas máquinas virtuales expiran a los 90 días, pero ahí tienes tiempo más que suficiente para probar tu proyecto en ese entorno.

¡Comparte otras opciones si has usado algo alternativo!

 

 

Problema de vulnerabilidad en plugins y temas de WordPress

Hace unos días nos enterábamos de que había una grave vulnerabilidad (Cross-Site Scripting) en algunos de los plugins más populares para WordPress:

  • Jetpack
  • WordPress SEO (Yoast)
  • Google Analytics (Yoast)
  • All In one SEO
  • UpdraftPlus
  • WPTouch
  • Download Monitor
  • P3 Profiler
  • iThemes Exchange

Estos son algunos de los que más pueden sonar, pero ahora mismo hay más de 37.000 plugins disponibles en wordpress.org, más los cientos o miles que puede haber en sitios como Codecanyon. Y esto son solo los plugins.

El problema de seguridad viene del uso que los desarrolladores de plugins y plantillas han ido haciendo de un par de funciones de WordPress (add_query_arg() y remove_query_arg()), así que las miles de plantillas que hay en wordpress.org, Themeforest o sitios similares también se pueden ver afectadas.

Los dos plugins de SEO del listado de arriba son dos plugins que suelo instalar en todos los sitios de WordPress con los que trabajo (uno u otro, obviamente), y que también recomiendo a alumnos y clientes. Claro, que también recomiendo que tanto WordPress como los plugins y plantillas que se usen siempre se mantengan actualizados, y sigo viendo sitios que están corriendo con la versión 3.5 —o anterior— de WordPress, y si así anda la versión de WordPress, imagínate cómo están los plugins.

Si mantienes sitios con WordPress —y sobre todo si has tenido problemas con ellos últimamente—, te interesará echar un vistazo a los artículos que han ido publicando estos días sitios como Sucuri, WP Tavern o Envato:

Ya sabes… actualizaciones y copias de seguridad periódicas, que son gratis. Y borra todo aquello que no necesites realmente para que funcione tu sitio en WordPress.

 

Los colores de las redes sociales en código hexadecimal

Aquí tienes las referencias de color en formato hexadecimal para las principales redes sociales (al final, las redes sociales más relevantes en Rusia). Estas referencias están tomadas con cuentagotas sobre los logotipos de estas redes sociales, su cabecera o color más representativo, así que no pueden no ser perfectas, pero si necesitas dar color a los iconos de Font Awesome, por ejemplo, seguro que te ahorran algo de tiempo.

Si ves que alguna de las muestras de color no es la correcta, quieres hacer alguna corrección o simplemente añadir una nueva referencia para alguna otra red social, deja un comentario.

Facebook
#3A5795
Flickr
#0063DB (azul) #FF0084 (rosa)
Foursquare
#0732A2 (azul) #F94877 (rosa)
Google+
#C30907
Instagram
#2A5B83
LinkedIn
#0274B3
Pinterest
#D70004
Swarm
#FFB000
Tuenti
#0079C1
Tumblr
#34465D
Twitter
#5EA9DD
Vimeo
#1CA7CC
Vine
#00A478
YouTube
#CC181E

Redes Sociales en Rusia

Яндекс
#FF0000
ВКонтакте
#4E74A3
Одноклассник
#F88206
Mail.ru
#034A88 (azul) #FBA423 (naranja)
Мой мир
#3D6CB0

Resolver el problema de qTranslate con WordPress 3.9

Es bastante probable que si usas qTranslate con WordPress para publicar contenido en varios idiomas, el plugin haya dejado de funcionar al actualizar WordPress a la versión 3.9 (de hecho, no debería funcionar con versiones superiores a la 3.8.1).

Realmente, te encuentras con dos problemas 1. El primero, que qTranslate se desactiva porque la versión de WordPress es superior a la que el plugin soporta según su configuración original. Para corregir este problema, puedes editar el fichero qtranslate.php que encuentras en /wp-content/plugins/qtranslate/qtranslate.php y cambias esta línea:

define('QT_SUPPORTED_WP_VERSION', '3.8.1');

por esta otra:

define('QT_SUPPORTED_WP_VERSION', $wp_version);

De este modo, no deberías tener problemas para que qTranslate funcionara con tu versión actualizada de WordPress.

No obstante, el editor de contenido que tiene WordPress pegó un gran cambio hace poco, y seguramente no puedas seguir trabajando en el modo visual / texto de la forma habitual. Para solucionar este segundo problema, hay dos opciones:

  1. Descargar 3 ficheros (qtranslate_hooks.php, qtranslate_javascript.php y qtranslate_wphacks.php) y sustituirlos por los originales del plugin qTranslate. Estos tres ficheros los tienes en GitHub Gist.
  2. Migrar de qTranslate a mqTranslate, que está basado en qTranslate, soporta hasta WordPress 4.0-alpha, permite importar la configuración de qTranslate y no da problemas con Qtranslate Slug, si lo usas conjuntamente.

Si buscas alternativas a qTranslate o mqTranslate para gestionar sitios web en varios idiomas con WordPress, puedes probar con Polylang (gratuito) o WPML (comercial), por ejemplo.

  1. En el momento de escribir este artículo, la última versión de qTranslate era la 2.5.39, actualizada el 26/1/2014

Máquina tragaperras con Flash 5 y ActionScript 1.0

Máquina tragaperrasHaciendo limpieza digital me ha tocado revisar varias docenas de CDs en los que tenía trabajos del siglo pasado (literalmente). En los CDs ha aparecido de todo… uno de los trabajos que ha aparecido es un juego que hice en Flash allá a principios del año 2001. Eran tiempos de Macromedia, y también de burbuja puntocom. Lo cierto es que guardo buen recuerdo de aquella época, y aunque ahora no haría nada en Flash, por aquellos años era casi obligatorio darle al Macromedia Flash y al ActionScript o no salías en la foto.

Esta es una versión standalone del juego, que originalmente se desarrolló como un concurso online para el portal Autocity. Está hecho con Flash 5 y ActionScript 1.0 (lo que había). Si quieres, puedes echar un vistazo al juego y descargarte el fichero FLA por si te sirve para algo. Leer Más

Leer un fichero de texto línea por línea con PHP

Un pequeño código para leer un fichero de texto línea por línea:

$handle = fopen("mifichero.txt", "r");
if ($contenido) {
    while (($linea = fgets($contenido)) !== false) {
        // hacemos algo con la línea
    }
} else {
    // no se ha podido leer el fichero
}

Me han pasado un fichero de texto con un listado de unos 3500 códigos para cargar en una base de datos, y cada uno tenía que estar vinculado con distintos valores de distintas tablas, así que para cada línea necesitaba una consulta diferente. En menos de cinco minutos, hecho.

El favicon en las SERP y enlaces patrocinados

Favicon SEO Yandex

Anuncia hoy Google en su Inside Adsense Blog que introduce la opción de añadir favicones a los anuncios de tipo texto. Parece un pequeño cambio, pero seguramente mucha gente tendrá que preparar muchos favicones de aquí a que termine el mes.

De momento, Google se queda en los enlaces patrocinados, pero Yandex ya lleva mucho tiempo dejando que el favicon de un sitio web tenga presencia en las SERP —además de tenerla en los enlaces patrocinados de Yandex.Direct—, y aunque parezca una tontería, es un elemento muy simple que puede llamar la atención del usuario y hacer que nuestro sitio obtenga el siempre deseado clic. Hay servicios como una farmacia, hotel, automóvil, billetes de avión o tren… para los que puede resultar muy sencillo tener un favicon que destaque.

En la imagen de arriba, la imagen que Google ha publicado en su blog de Adsense, superpuesta a una captura de pantalla de los resultados de Yandex para una búsqueda de hotel, donde se puede observar que Yandex muestra los favicones tanto en los enlaces patrocinados como en los orgánicos.

Si, el favicon siempre ha tenido su uso, pero ¿crees que ahora Google animará a que la gente tenga un favicon en su sitio web o esperará a que Google lo empiece a mostrar en sus SERP?