
Paseandome por anieto2K me topo con un artículo en SigT sobre páginas de error amigables para el usuario (una traducción de un artículo originario de Coding Horrors) me dispuse a mejorar mi propia página de error de página no encontrada (404). Aún cuando el artículo antes mencionado nos da los puntos más importantes a considerar, no nos dice cómo hacerlos; y es por ello que ahora os explicaré cómo cumplir algunas de las recomendaciones que nos hacen bajo la plataforma de Wordpress.
Creando nuestra página usable
Una página de error no debería nunca ser un aviso y nada más. Una página de error debe también de dar, o al menos recomendar una solución. Por lo tanto, y como dice el artículo arriba mencionado, debemos incluir algunos elementos: entradas relacionadas, opciones de lugares a dónde ir para el usuario, entradas recientes y/o populares, etc. Pero no todo puede ir en la misma página de error; al final, es una página de error, no contenido. Debe sacar al usuario del aprieto en el que está (no encontrar lo que busca), no meterlo en otro (no saber para dónde ir). Por lo tanto, debes elegir bien los elementos que has de agregar y diseñar bien tu página de error; tampoco queremos que el usuario se desespere porque no carga la página y se vaya.
Así que empecemos con nuestra página de error. Modifica o crea tu archivo 404.php dentro de la carpeta de tu theme y escribe algo como esto:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head profile="http://gmpg.org/xfn/11">
- <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
- <title><?php bloginfo('name'); ?> - No se encuentra la página "<?php echo $keyword ?>"</title>
- <meta name="generator" content="WordPress <?php bloginfo('version'); ?>" /> <!-- 4 stats -->
- <link rel="stylesheet" href="<?php bloginfo('template_directory'); ?>/404.css" type="text/css" media="screen" />
- <link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" />
- <link rel="icon" href="<?php bloginfo('template_directory'); ?>/favicon.ico" type="image/x-icon" />
- <link rel="shortcut icon" href="<?php bloginfo('template_directory'); ?>/favicon.ico" type="image/x-icon" />
- </head>
- <body>
- <h1 id="error">¡No se encuentra la página!</h1>
- </body>
- </html>
He tenido que usar las entidades del HTML latinas de algunos caracteres, quiza ustedes deban hacerlo también. Ya tenemos el esqueleto de nuestra página de error. Ahora vamos a hacerla amigable a nuestros usuarios.
Agregando entradas recientes
¿Qué tal mostrar al usuario las últimas entradas de tu blog? Quiza algo de lo más reciente que has puesto en tu blog le sea de interés, así que mostrarlo es una buena idea. Simplemente agrega el código que wordpress nos ofrece para estos casos:
- <ul id="lista_enlaces">
- <li><h3 id="nuevoshead">nuevos</h3>
- <ul id="nuevoslist">
- <?php c2c_get_recent_posts(); ?>
- </ul>
- </li>
- </ul>
TagCloud y entradas relacionadas
Una nube de tags y entradas relacionadas son un buen elemento para empezar nuestra página de error. Así le estamos dando opciones al usuario y buscando una posible solución a su problema. Para esto necesitaremos algunos plugins que puedan crear nuestra nube de tags. Existen muchas alternativas, pero la que yo uso se llama Jermoe's Keywords. Bastante estable y adaptable, para ser un beta. Sin embargo, debo recomendar que instalen el related entries; pues para el objetivo de nuestra página de error amigable les ahorrará dolores de cabeza, ya que tiene una extensión para agregar entradas relacionadas a tus páginas de error 404.
Una vez que decidas qué plugin vas a utilizar, debes poner la nube de tags en tu página de error. Simplemente llamala como el creador del plugin lo ha indicado. Si, por ejemplo, has usado Jerome's Keywords, simplemente pon algo como esto:
- <ul id="tags">
- <li>
- <h3 id="tagshead">tags</h3>
- <ul id="tagslist">
- <?php jkeywords_tag_cloud(); ?>
- </ul>
- </li>
- </ul>
El caso es poder mostrar nuestra nube de tags al usuario.
El que busca... encuentra
Claro está que si han entrado a nuestra web y no han llegado a donde querían, los usuarios querrán (o necesitarán) buscar tu web en busca de la información que necesitan. ¿Por qué no facilitarles las cosas y agregar un formulario para buscar en tu web lo que necesitan? Igual que con las entradas recientes, simplementeusa el código que wordpress nos ofrece:
- <ul id="buscar">
- <li>
- <?php include (TEMPLATEPATH . '/searchform.php'); ?>
- </li>
- </ul>
Palabras clave
Ahora llegamos a la verdadera razón de esta entrada. Lo más probable es que, si estás usando Wordpress, también estés usando permalinks. Si este es tu caso, puedes obtener las palabras clave de la url y así poder sugerir o crear una lista de entradas relacionadas a lo que el usuario ha venido buscando. Para esto, agrega este código hasta arriba de tu archivo 404.php:
- <?php
- //Obteniendo las keywords
- ?>
Con este pequeño código ya tenemos una variable llamada $keyword que contiene las palabras que el usuario ha buscado en nuestro blog. Esta variable la podemos usar para una infinidad de cosas. Digamos, por ejemplo, que queremos poner en el título de nuestra página la frase "La página "$keyword" no ha sido encontrada. Simplemente agrega un echo a tu tag <title> de esta manera:
- <title><?php bloginfo('name'); ?> - No se encuentra la página "<?php echo $keyword ?>"</title>
También podemos decirle al usuario que la página que ha buscado no se encuentra, ponerlo como meta keywords, pasarlo a nuestra SQL y buscar posts relacionados o crear una lista de palabras clave. ¡El único límite es tu imaginación (y tu conocimiento de PHP... je)!
Vamos a crear una lista de sugerencias para buscar en nuestra web para evitar que el usuario tenga que pensar mucho en qué poner. Para esto necesitaremos nuestro string $keyword, pero no con todas sus palabras. No tiene caso sugerir palabras como "de" o "para". Son inútiles para nuestra búsqueda, por lo que vamos a eliminarlas con el siguiente código:
- <?php
- // Eliminando números
- $recomendaciones = " $keyword ";
- //Eliminando palabras innecesarias
- // Eliminando espacios en blanco
Sé que no es la mejor manera, pero funciona. Si se te ocurre alguna otra palabra que se me haya olvidado no dudes en agregarla también. Ya solo nos falta imprimir nuestra lista de sugerencias de palabras clave a buscar en nuestro sitio, en base a la URL que el usuario usó. Para ello usamos un simple echo:
- echo "<p id=\"buscar_rec\">Recomendaciones de búsqueda:</p><p id=\"keywords\">$recomendaciones</p>"; ?>
Si has instalado el related entries, puedes también instalar la extensión de este plugin que te permite agregar una lista de enlaces relacionados a tu página de error.
Ya tenemos una página con practicamente todos los elementos que necesitamos. Ahora solo falta agregar una breve explicación de la situación que el usuario enfrenta al llegar a una página de error y comentar las soluciones que, probablemente, hemos encontrado para el; además de agregar el estilo. El código de mi página de error 404 es el siguiente:
- <?php
- //Obteniendo las keywords
- ?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head profile="http://gmpg.org/xfn/11">
- <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
- <title><?php bloginfo('name'); ?> - No se encuentra la página "<?php echo $keyword ?>"</title>
- <meta name="generator" content="WordPress <?php bloginfo('version'); ?>" /> <!-- 4 stats -->
- <link rel="stylesheet" href="<?php bloginfo('template_directory'); ?>/404.css" type="text/css" media="screen" />
- <link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" />
- <link rel="icon" href="<?php bloginfo('template_directory'); ?>/favicon.ico" type="image/x-icon" />
- <link rel="shortcut icon" href="<?php bloginfo('template_directory'); ?>/favicon.ico" type="image/x-icon" />
- </head>
- <body>
- <div id="error404">
- <h1 id="error">¡No se encuentra la página "<?php echo $keyword ?>"!</h1>
- <div id="info">
- <p id="infotext"><em>¡Oops!</em> ¡No se ha encontrado la página que buscas (<strong><?php echo $keyword ?></strong>)! Probablemente sea culpa de un error mío o quizá has escrito mal la dirección, en cualquier caso, quizá te interesen las últimas entradas del blog, las tags de las entradas, <a href="/" class="back">volver a la portada</a> o buscar tu mismo lo que buscas:</p>
- <ul id="lista_enlaces">
- <li><h3 id="nuevoshead">nuevos</h3>
- <ul id="nuevoslist">
- <?php c2c_get_recent_posts(); ?>
- </ul>
- </li>
- </ul>
- <ul id="tags">
- <li>
- <h3 id="tagshead">tags</h3>
- <ul id="tagslist">
- <?php jkeywords_tag_cloud(); ?>
- </ul>
- </li>
- </ul>
- <ul id="buscar">
- <li>
- <?php include (TEMPLATEPATH . '/searchform.php'); ?>
- <?php
- // Eliminando números
- $recomendaciones = " $keyword ";
- //Eliminando palabras innecesarias