La semana pasada tuvimos una curiosa incidencia durante el desarrollo de unas mejoras en el portal web de un cliente, basado en Typo3. Entre estas mejoras se encontraba la implantación de una barra de botones para compartir noticias y otras informaciones periódicas del portal en las redes sociales más populares. En pleno desarrollo, al realizar las pruebas de funcionamiento pertinentes nos encontramos con un grave problema: al compartir una noticia en Facebook, sólo se recogía la URL de la noticia, ignorándose otros datos como el título y el contenido de la noticia, además sin motivo aparente.
El problema parecía provenir de una aparente incapacidad de Facebook de extraer del portal web del cliente la información necesaria para la publicación de la noticia a compartir, a pesar de haber utilizado el método estándar más sencillo para compartir una página web en Facebook. El siguiente paso fue seguir a rajatabla las instrucciones de Facebook, tanto para utilizar otros métodos para compartir información web como para facilitar la detección de dicha información, sin éxito.
Se nos ocurrió entonces que si el analizador de Facebook no podía encontrar la información deseada puede que fuera porque el código del portal tuviese algún problema. Aunque estábamos seguros de antemano de que dicho código era estándar, por si acaso pasamos el portal por el validador del W3C, que nos confirmó que el código XHTML que producía el motor de Typo3 era válido. Esto es algo que cuidamos mucho en nuestros proyectos web, buscando asegurar la visibilidad en la mayoría de navegadores, plataformas y sistemas operativos. En el caso de Typo3, esto lo conseguimos tanto a través de extensiones especializadas (para el contenido y funcionalidades estándares) como de una composición de código muy cuidadosa (en el caso de las personalizaciones que tengamos que llevar a cabo). Para los interesados, les recomiendo extensiones como cron_accessiblemenus, accessible_tables y qcom_htmlcleaner.
Lo siguiente fue investigar (vía Google, dónde si no) si había más gente con este problema. Desgraciadamente, esta incidencia es más común de lo deseable y se produce independientemente de la forma de gestionar y producir el código del portal, ya sea a mano o con un gestor de contenidos (Typo3, Drupal, Joomla, etc.). A pesar de que nadie encontraba una solución, al menos una que sirviese para todo el mundo, sí nos dimos cuenta de que había algo en común en todas las quejas: los responsables de dichos sitios web también tenían mucho cuidado con la validez y estandarización del código que producían. Eso nos llevó a pensar que quizás el problema estuviese ahí, algo en el código que impedía que el analizador de Facebook hiciese su trabajo. A estas alturas era evidente que la culpa era de Facebook y no de los centenares de desarrolladores web con el mismo problema en todo el mundo, pero eso no quitaba para buscar una solución para nuestro cliente.
En nuestro caso, analizando minuciosamente el código XHTML del portal, encontramos pronto un primer candidato a «culpable». Todos nuestros portales Typo3 empiezan de la misma manera, con una línea como ésta:
<?xml version="1.0" encoding="utf-8"?>
A día de hoy, pocos navegadores, dispositivos y otros elementos de acceso a la web echan cuenta de la información contenida en esa línea, por muy estándar que sea, así que probamos a eliminarla y, ¡voilá!, problema resuelto. El analizador de Facebook era repentinamente capaz de capturar la información de las noticias que nuestro cliente quería compartir. En el caso de Typo3, basta con añadir la siguiente línea en la configuración de la plantilla:
config.xmlprologue = none
A pesar de producir código válido y estándar en el portal web y de haber seguido las instrucciones del propio Facebook al pie de la letra, su analizador era incapaz de realizar correctamente el trabajo para el que supuestamente está preparado, lo que no habla muy bien de la popular red social. Si para que funcione bien, encima hay que «disminuir» el nivel de estandarización de una web, apaga y vámonos. Este es precisamente el peligro de no respetar los estándares en la web: problemas, costes extra, usuarios excluidos y, en el caso de una empresa, clientes insatisfechos.