El
huracán que azotó Blogger en los últimos días nos ha dejado maltrechos y confundidos. Los errores son variados y no parecen tener un factor común, afectan la
Edición HTML de la plantilla y la
Edición de elementos; obviamente, algo ha cambiado; si este cambio es circunstancial o no lo dirá el tiempo.
Pero, si es un error ¿puede ser permanente? ¿no lo corregirán? Lo primero que se me ocurre es ¿quién sabe? Hay errores que están allí hace tanto tiempo que ya forman parte del servicio pero, hay algo peor, ¿realmente se trata de un error o
Blogger ha decidido cambiar las reglas o hacerlas cumplir?
¿Qué reglas? Las reglas que debemos seguir al escribir código
HTML.
Voy a tratar de explicarme o de pensar en voz alta.
Uno de los problemas más comunes es que salen dos mensajes de error diferentes:
Your template is invalid because the tag 'b:section' appears inside of the tag 'head'.
Your template is invalid because the tag 'div' appears inside of the tag 'head'.
¿Qué significan? Que, entre las etiquetas <HEAD> y </HEAD> hay etiquetas no admitidas. Tal vez me insulten un poco pero ... Blogger tiene razón y, si el cambio es circunstancial o no, si mañana vuelve todo a la "normalidad" o no, carece de importancia ya que, aunque las admita, aunque reordene las cosas y nos muestre las páginas correctamente, dentro del encabezado de una página web, hay etiquetas que NO DEBEN usarse; básicamente porque son inútiles y si lo que ponemos funciona es sólo porque Blogger o los navegadores se las ingenian para "corregir" las cosas.
Una página web tiene secciones y esas secciones tienen un uso específico. Si bien la plantilla no es una página web, esas secciones están allí y deberíamos respetarlas. La estructura elemental es esta:
<HTML>
<HEAD>
aqui van las etiquetas del encabezado
</HEAD>
aqui NO van las etiquetas, es un error
<BODY>
aqui van las etiquetas del cuerpo
</BODY>
</HTML>
La primer regla es que todos los códigos deben ir entre
<HEAD> y
</HEAD> o entre
<BODY> y
</BODY> pero, eso no es todo, dentro de esas dos secciones no puede ir cualquier tipo de código. En el encabezado se coloca la información genérica que afecta a toda la página pero que no son visibles. Las que usamos habitualmente son muy pocas:
TITLE,
META,
LINK,
SCRIPT y
STYLE. Si bien hay algunas otras admitidas, no son habituales. A estas también podemos agregar algunas de las instrucciones específica de
Blogger como por ejemplo los códigos condicionales pero ...
NADA MÁS.
Todas las demás etiquetas
DEBEN ir entre
<BODY> y
</BODY> ¿Por qué? porque son elementos visuales, podemos verlos, son textos, imágenes u objetos y solo "existen" allí, cuando el navegador empieza a "dibujarlos".
Los dos mensajes de error a los que me refiero nos advierten de eso, nos dicen "
está colocando un elemento que no debe ir en el encabezado, sáquelo de allí y colóquelo en el BODY que es donde debe ir".
Pero .. hasta ahora funcionaba. Es cierto pero eso no significa que no fuera un error, en todo caso, el error era permitir que los pusiéramos; aprovechemos el momento de poner las cosas en orden.
¿Y cómo hago eso? Bueno ahí ya hay muchas respuestas porque hay muchas variaciones. Esta es sólo una de ellas, la que se refiere al
hack para
Optimizar los títulos del blog.
Lo que hacíamos era reemplazar:
<title><data:blog.pageTitle/></title>
por algo así:
<b:if cond='data:blog.pageType == "item"'>
<b:section id='titleTag'>
<b:widget id='Blog2' locked='false' title='Entradas del blog' type='Blog'>
........
</b:widget>
</b:section>
<b:else/>
<title><data:blog.pageTitle/></title>
</b:if>
El error que nos muestran es el uso de
b:section y si lo resolviéramos, mostraría que el error es
b:widget porque para
Blogger, esos códigos crean
DIVs y esa es una etiqueta que
NO DEBEMOS incluir en el HEAD así que, debemos sacarlas. Simplemente debemos eliminar ese
hack y buscar otra alternativa a menos que queramos convivir con el problema o
rogar a Blogger que vuelva a dejar todo como estaba.
En este caso, la alternativa existe y es sencilla.
Como el contenido de cualquier etiqueta puede ser manipulado con
JavaScript, usemos esa facilidad para leer el título, cambiarlo a nuestro gusto y escribirlo. El código para reemplazar el título o el
hack lo colocaremos inmediatamente después
<head> y sería este:
<!-- optimización del título de Blogger -->
<title><data:blog.pageTitle/></title>
<b:if cond='data:blog.pageType == "item"'>
<script type='text/javascript'>
var tituloBlog = "<data:blog.pageTitle/>";
var mtxTitulo = tituloBlog.split(":",2);
var elBlog = mtxTitulo[0];
var elTitulo = mtxTitulo[1];
document.title = elTitulo + " : " + elBlog;
</script>
</b:if>
<!-- final optimización del título -->
Usamos el condicional de Blogger para determinar si estamos en una página individual o no. Si no lo es, ponemos el nombre del blog normalmente; si es una página de posts individuales, primero leemos el título y lo guardamos en una variable llamada tituloBlog y que normalmente, tendrá como contenido algo así: NombreBlog : TituloPost - Navegador
Tomamos ese texto y lo separamos en dos, lo que está a la izquierda de los dos puntos es el nombre del blog que guardamos en una variable llamada elBlog y lo que está a la derecha es el título del post que guardamos en una variable llamada elTitulo. Por último, le indicamos al navegador que los escriba ... a revés, primero el título del post , luego dos puntos o lo que se nos ocurra y por último el nombre del blog.
Si estábamos usando el hack, cuando guardemos la plantilla nos advetirá que vamos a eliminar un elemento:
Por favor, confirma que los siguientes artilugios deben borrarse. Se borrará toda la información de configuración de los artilugios: Blog2
Confirmamos y listo. Lo demás, ya dependerá de Google y los buscadores.
En términos generales, cualquier otro DIV colocado entre <HEAD> y </HEAD> carece de sentido ya que, cuando Blogger crea la página, lo mueve y lo reubica, escribiéndolo justo después de <BODY> que es donde debería ir. Si ahora se muestra un error es porque han decidido no corregir automáticamente ese error de sintaxis o esa parte del servicio no funciona correctamente.
Si reubicando esos DIVs, no "vemos" lo que antes veíamos es porque debemos establecer las propiedades CSS adecuadas y habrá que analizar caso por caso y plantilla por plantilla.
ACTUALIZACIÓN:
Fin de semana de locura, muchas preguntas, pocas respuestas. Idas y vueltas.
En este caso, el aporte de
Toño ha sido muy valioso y ha permitido despejar una duda y ahora puede afirmarse que el
script solucionará el problema pero no optimizará los títulos simplemente porque los
robots de
Google no leen los
scripts así que, desde ese punto de vista es inútil y sólo sirve como un elemento estético.
Como bien aclara
Toño, habrá que esperar que el propio Blogger defina un elemento para poner el título de cada página individual como
título del post : título del blog ya que, hasta ahora, no hay manera de hacerlo. Colocar el "hack viejo" en el
BODY tampoco funcionara ya que el título
DEBE estar en el
HEAD. Veremos una cosa pero los buscadores leerán otra.
Se aceptan más ideas ... incluso las más locas son bienvenidas.
NUEVA ACTUALIZACION:
Hasta ahora, no he encontrado manera de convertir los caracteres especiales ya que, si bien las instrucciones son correctas, Blogger se niega a obedecerlas. así que, como esto sólo es estético, he decidido eliminar esos caracteres reemplazándolos por espacios. Prefiero eso a que aparezcan cosas como ¡.
En el script, se deben insertar tantas líneas como caracteres estrafalarios se quieran eliminar. En este caso, hay dos, una para el carácter ¡ y otra para el carácter ¿. No he visto otros pero, puede haber, por suerte, los acentos son respetados.
var tituloBlog = "<data:blog.pageTitle/>";
var tituloBlog = tituloBlog.replace(/¡/g,' '); // eliminar el carácter ¡
var tituloBlog = tituloBlog.replace(/¿/g,' '); // eliminar el carácter ¿
var mtxTitulo = tituloBlog.split(":",2);
La parte en azul es la que debe insertarse y es un código bastante torpe así que si alguien tiene un método mejor, por favor avise.