Parche para solventar el bug del meta-description en Liferay 6.2

Esta es una "micro-entrada" de blog básicamente para ofreceros un hook muy sencillo que solventa el problema de almacenar el contenido de la meta etiqueta Description en Liferay 6.2. El buen funcionamiento de esta etiqueta es imprescindible para cualquier acción SEO que se quiera desarrollar con el portal de manera que subsanarlo es obligatorio.

La incidencia está documentada aquí https://issues.liferay.com/browse/LPS-43975 y como indica Riccardo Martini, la solución es tan sencilla como añadir un ID en la línea 40, dónde se encuentra <aui:input name="description"/>. En mi caso he optado por usar el ID meta-description, quedando esta línea de la siguiente manera:

<aui:input name="description" id="meta-description"/>

Una vez desplegado, cualquier contenido que se introduzca desde Administrar Páginas en este campo será almacenado de forma correcta.

Podéis descargar este parchecillo aquí "meta-description-fix-hook"

Introducción a Liferay User Live Session Monitoring

En Liferay Portal tenemos una opción de monitorización en el panel de control quizá poco explotada o poco conocida debido a que viene desactivada por defecto por cuestiones de rendimiento. Me estoy refiriendo a la que da título a esta entrada: Monitoring.

Veamos lo que ofrece a simple vista y rasquemos un poquito más para ver lo que tenemos debajo.

Liferay User Live Sessions Monitoring

Activación

Para tener operativa esta funcionalidad del panel de control debemos añadir a nuestro portal-ext.properties esta línea:

live.users.enabled=true

Una vez activada esta opción nos aportará información en tiempo real de las sesiones que los usuarios tienen iniciadas en el momento que accedemos a la consulta.

La operativa es muy sencilla, accedemos, visualizamos la relación de ID’s de usuario que tienen iniciada la sesión junto con algunos datos y si queremos más información sobre uno de los usuarios hacemos clic sobre este.

La información (de interés) que podemos obtener de cada sesión de usuario es la siguiente:

  • Identificador de Sesión

  • Última petición: Fecha y hora de la última petición realizada (URL visitada)

  • Número de accesos: Número total de URL visitadas en el portal / intranet / extranet

  • Datos de usuario (nombre y dirección de correo electrónico)

  • Tipo de Navegador/S.O: Información sobre el sistema operativo y navegador utilizado

  • IP del servidor remoto: IP remota desde la que se ha conectado el usuario

  • URLs accedidas: Relación de todas las URLs visitadas

Pero ¿Qué ocurre con esta información si el usuario cierra sesión? Pues que al tratarse de información de Sesiones Activas obviamente desaparecerá. Por suerte, contamos con otras opciones de configuración para el portal-ext.properties con las que crear persistencia de toda esta información en base de datos:

session.tracker.memory.enabled=true

session.tracker.persistence.enabled=true

session.tracker.friendly.paths.enabled=true

Con estas 3 líneas conseguiremos que se almacene la información entre las tablas usertrackerPath y usertracker, de manera que podamos consultar los datos antes mencionados tanto si la sesión está activa como si es de fechas anteriores.

Ni que decir tiene que esta información, dependiendo del número de usuarios que tenga el portal, puede crecer de forma desorbitada.

Como acceder mediante la administración de BBDD a visualizar esta información no es nada usable he optado por hacer un pilotillo de dashboard o cuadro de mando con QlikView en su versión Personal Edition.

En este piloto también he añadido la tablat user_ para poder tener otros datos relacionados con los usuarios:

  • Fecha del último login

  • Relación de IPs de conexión

  • Última IP de conexión

  • Total de usuarios

  • Carga total de usuarios

Liferay Monitoring Dashboard - Cuadro de mando

La idoneidad de esta “mini-auditoría” es bastante discutible por lo que he comentado anteriormente del rendimiento, el incremento de la información almacenada y por acceder a la información con una conexión directa a la base de datos, no obstante, creo que se trata de una funcionalidad interesante, no solo para Community Edition dónde no disponemos de Auditoría, sino en general para tener un sistema de trazabilidad que nos permita procesar la información y conocer con cierto detalle cuál es comportamiento de los usuarios en áreas privadas del portal (intranets / extranets).

Imagen “3D Social Networking” CC de Chris Potter (Stockmonkeys.com Flickr)

Implementando Google Authorship en Liferay para multiples autores

(Lightning Talk en el Liferay Spain Symposium 2013)
 
Desde su aparición en verano de 2011 la implementación de Google Authorship ha ido extendiéndose de forma progresiva sobre todo en este último año. 
 
Qué es y cuales son sus beneficios
Primero os hablaré de lo que no es: Como indicó John Mueller, analista de Google Webmaster Tools, en el Google Webmaster Central Hangout broadcast de 27 de septiembre 2013 “We don’t use Authorship for ranking at the moment,” . No es todavía un factor de ranking, no obstante es muy recomendable su implementación.
Básicamente consiste en dar de alta en el programa Authorship al autor del contenido, cruzando links con su perfil de Google+ para obtener un fragmento enriquecido con la foto y enlaces relacionados con contenido publicado por dicho autor. 
 
Pero el rich snnipet no es el único beneficio:
  • Al aparecer la foto del autor se genera una mayor confianza en ese contenido
  • El rich snnipet altera el patrón típico de eye tracking desapareciendo el tradicional “triángulo de oro” de las SERPs.
  • Conseguimos distinción frente a la competencia
  • Aumento del CTR (Click Through Rate) o tasa de clics, más tráfico para nuestro portal.
 
Proceso de alta
Disponéis de dos opciones:
  1. Mediante una dirección de correo electrónica válida: Si genero artículos en el portal www.dominio.com y tengo una dirección de correo electrónico xxxx@dominio.com sigo el proceso que me indica Google en https://plus.google.com/authorship
  2. Implementación: Google nos ofrece una segunda opción se disponga o no de una dirección de correo electrónico del portal en el que escriben estos autores. Para ello es necesario:
 Añadir, a cada entrada de blog o contenido con autoría, un enlace hacia el perfil del Google+ del autor donde el href debe terminar en ?rel=author. Ejemplo: 
 
<a href="https://plus.google.com/107700311423087074311?rel=author">Miguel</a>
 
Añadir el link recíproco hacia www.dominio.com en la sección “Enlaces > Otros perfiles” dentro del perfil de Google+ del autor.
Perfil de Google+ con foto
 
Consideraciones: Número de autores y visualización de contenido
Vamos a lo que importa, cómo hacer esto en Liferay.
 
Si tenéis un portal con un solo autor es muy sencillo, podéis optar por
añadir el enlace de forma manual a cada contenido (opción menos recomendada)
añadir el enlace con el ?rel=author en el tema de apariencia, footer, etc..
añadir el enlace en un contenido que permanezca visible tanto en cualquier vista de resumen como visualizando el contenido completo, por ejemplo con una disposición de página de 70%-30%.
 
Si en el portal hay más de un autor estas opciones ya no son válidas y es cuando toca remangarse la camisa para programar.
 
La opción que sugiero precisa de lo siguiente:
Crear un campo personalizado (expando) para los usuarios: En este campo el usuario podrá poner en su cuenta la URL de su perfil de Google+ o bien un link a una página interna del portal dónde haya una “bio” del autor que contenga el enlace a su perfil si así hemos hecho la arquitectura del portal. La opción más sencilla sería la primera.
Modificar los ficheros view_entry_content.jsp y asset_metadata.jspf de los portlets Blog y Publicador de contenidos respectivamente para renderizar el link en caso de que el campo personalizado contenga datos.
 
Opciones para esta implementación

Desarrollar un plugin que 

  • Contenga un evento para crear el campo personalizado de usuario en el momento del despliegue (deploy
  • Contenga las modificaciones del jsp y jspf
  • Compruebe si el campo personalizado contiene datos o no para añadir entonces el enlace con el ?rel=author
O más sencillo…. descargar del Liferay Market place el plugin Author Plus disponible desde el pasado martes día 15 :)
 
Para verificar que todo está correcto podéis usar esta herramienta de Google Webmaster Tools http://www.google.com/webmasters/tools/richsnippets 
 
Si queréis información mucho más completa sobre el proceso de desarrollo de Author Plus, especialmente para la creación del expando en el deploy, podéis visitar esta entrada del blog de Moisés Belda donde explica el proceso con gran detalle:
 
El plugin es open source, tenéis disponible el fuente en GitHub
 

SEO para Liferay Portal (V): Aplicando semántica al contenido

Continuando con la edición de contenidos en Liferay Portal y con aquellos aspectos que quedan dentro del marco del posicionamiento en buscadores, toca en esta ocasión contaros cómo aplicar semántica a vuestros contenidos usando microdatos de schema.org, opción recomendada por Google entre ésta, microformatos y RDFa.

Los microdatos ayudan a los motores de búsqueda a identificar y “entender”, dentro de nuestro contenido y de una manera estructurada, descripciones de productos, eventos, recetas, música o comentarios entre otros.

Cuando hemos facilitado correctamente a los motores de búsqueda esta información nos podremos encontrar que la presentan en forma de los conocidos fragmentos enriquecidos (rich snippets):

Rich Snippets - Fragmentos enriquecidos

Para estructurar estos datos debe utilizarse un etiquetado específico y estandarizado. Por ejemplo, si queremos facilitar datos de un libro tendríamos un código HTML similar a este:

<div itemscope itemtype="http://schema.org/Book">

Título <div itemprop="name"><strong>Canción de hielo y fuego: Vientos de invierno</strong></div>

Autor <div itemprop="author" itemscope itemtype="http://schema.org/Person">

Written by: <span itemprop="name">George R. R. Martin</span></div>

</div>

Imaginad un sitio web/portal en el que se van a publicar fichas de libros, imaginad que queremos dotar de estos microdatos a cada libro, imaginad que tenemos que hacerlo con el editor de contenido cada vez que añadamos uno nuevo...un peñazo! ¿Verdad?

Por suerte para esto podemos aprovechar una de las funcionalidades en Liferay que dota de gran flexibilidad a la edición de contenido: La combinación de estructuras y plantillas.

Analizando el sencillo ejemplo del libro podemos extraer 2 campos definidos en ese código, el título del libro y el autor, con lo que nuestra estructura deberá contener dos campos de tipo texto a los que llamaremos bookname y bookauthor (por ejemplo).

Panel de control > Contenido web > Estructuras > Añadir Estructura

Estructura Rich Snippet Liferay

Con la estructura ya creada el paso siguiente será añadir una plantilla en la que se maquete el contenido con los microdatos y con los valores que se introduzcan posteriormente con cada ficha de libro. Para ello el método más sencillo, partiendo de un código de ejemplo del tipo de “cosa” que queremos estructurar, es copiar y pegar el código HTML y sustituir el valor que contenga por las variables de nuestras estructuras.

Panel de control > Contenido web > Estructuras > Sobre el botón ACCIONES de la estructura anterior > Añadir Plantilla

Las variables del ejemplo anterior son $bookname y $bookauthor por lo que el código en la plantilla quedaría así:
 

<div itemscope itemtype="http://schema.org/Book">

Título <div itemprop="name"><strong>$bookname.getData()</strong></div>

Autor <div itemprop="author" itemscope itemtype="http://schema.org/Person">

Written by: <span itemprop="name">$bookauthor.getData()</span></div>

</div>

Cuando el responsable de contenido necesite crear una ficha nueva de libro, utilizando esta combinación de estructura y plantilla, simplemente se le solicitará que introduzca el título y el autor de dicho libro sin necesidad de “picar” ni una sola línea de HTML.

Este es un ejemplo muy sencillo con solo dos campos pero si profundizais en las posibilidades de schema.org veréis que podemos añadir mucha información y aquí es dónde el uso de estructuras y plantillas facilita enormemente la tarea de generar contenido estructurado.

Para conseguir el código del que partir podéis coger de schema.org uno a uno los elementos que deseéis incluir o bien hacerlo más sencillo y rápido usando la herramienta online http://schema-creator.org/ dónde la mayoría de ocasiones no os hará falta añadir ningún campo adicional.

Más información y herramientas sobre fragmentos enriquecidos y datos estructurados:

https://support.google.com/webmasters/answer/99170?hl=es

http://schema.org/docs/documents.html

http://www.google.com/webmasters/tools/richsnippets

SEO en Liferay Portal (IV): Meta etiquetas optimizadas para contenidos

Hace unas semanas me topaba con una pregunta planteada en StackOverflow que suele aparecer en más de una sesión de formación sobre gestión de contenidos con Liferay Portal cuando abordamos temas relacionados con la optimización para buscadores. Aproveché para contestarla y pensé que quizá, además de ese usuario al que encima "castigaron" con un voto negativo, habría más gente con dudas y me decidí a escribir esta breve entrada.

¿Cómo puedo hacer para que en la visualización de contenido web o de entradas de blog aparezcan meta etiquetas description y keywords relacionadas con el contenido y no las de la página?

Cuando se utiliza el Publicador de Contenidos y/o el Blog para la generación de noticias/contenido cada uno de los artículos cuenta con una URL propia en la que puede visualizarse desplegado a través del clásico "Leer más" o al hacer clic sobre el título del artículo . Si no hemos configurado nada para remediarlo podemos encontrarnos en Google Webmaster Tools con mensajes sobre duplicación de meta descriptions y/o meta keywords (el título html se genera con el del contenido por lo que en este sentido no habrá conflicto con el de la página).

Para contar con una descripción y algunas palabras clave específicas bastará con hacer 2 cosas:

Añadir etiquetas: cada etiqueta que añadamos al contenido web o la entrada de blog aparecerá al principio del contenido del meta keywords junto a las que estén configuradas en el meta keywords de la página.

Etiquetas para contenidos y entradas de blog en Liferay

Rellenar campo Resumen: Al completar el resumen (abstract) obtendremos un resultado similar para la meta etiqueta description, todo el texto que se introduzca se añadirá al meta description de la página.

Configurar meta etiquetas para contenidos web y para entradas de blog

 

Resultado:

Texto añadido a las meta etiquetas del contenido web y/o de una entrada de blog

Mostrando el intervalo 1 - 5 de 14 resultados.
Resultados por página 5
de 3

Twitter @miguelpauLiferay Social ProfileLinkedin ProfileGoogle+ RSS Blog MiguelPau

Proyectos en los que colaboro

XML Portlet Factory: CRUD portlet development

Portlet.es: Liferay Portlets