Sitemap Ajax

Un sitemap es un fichero que tiene referencias de las páginas que se encuentran en un sitio web. Ir al grano.

El Proyecto

En la primera versión del proyecto: (1) Solo hemos trabajado con el DOM javascript, y nos hemos encontrado con un par de problemas que abordamos en la segunda versión (2) versión. A partir de la tercera versión (3) versión, estamos obteniendo ayuda con un lenguaje propio del servidor; en este caso PHP. En la cuarta (4) versión, hemos detallado los códigos de colores, reducido algo el código, y resuelto el problema de los enlaces internos.

Los problemas que aún seguimos teniendo, son enlaces a carpetas (tal vez no se trate de un problema real, ya que es un enlace válido), donde podría existir entradas repetidas, y aquellos enlaces "desconocidos". También nos queda resolver los enlaces cruzados, o sea, no solo saber los enlaces que hay en una página, sino saber también desde que página del sitio está referenciada.

DOM-javascript

Sobre la implementación DOM, seguimos obteniendo solamente el listado de enlaces de cada página visitada, y generando dinámicamente los elementos de la tabla de para cada elemento del sitemap, y los controles del formulario para cada item/ídem.

El resto de la programación javascript, es el desarrollo y mantenimiento de los objetos que nos han servido de ayuda, entre ellos el apartado siguiente.

Código de colores

color raiz Raíz del sitio (en este caso de la búsqueda)
El color verde lima (lime: #00ff00) indica el sitio para el que generaremos el sitemap
color raiz Enlace externo
El color gris (#eeeeee) indica que es un externo y no se incluirá en el sitemap
color raiz Enlace para revisar
El color rosado (pink: #ffc0cb) indica que debe chequearse para incluirlo en el sitemap
color raiz color raiz Enlace válido
Los colores azulados ("#abbcde", "#bacdef") indican enlaces para incluir en el sitemap
color raiz color raiz Enlace válido
Los colores pastel amarillentos ("#fefeaa", "#efefaa") indican enlaces internos (también se incluyen)

Con respecto a la importancia del DOM y javascript, se puede apreciar que si bien hemos comentado en versiones anteriores la existencia de un elemento que en vez de ser un fichero, se trataba de una carpeta; pues ahora ya no existe ese elemento debido a que estos códigos de colores y la implementación de reconocimiento de "referidos", nos ha servido para detectar la página donde estaba ese problema. El dato sobre "última modificación" (lastmod), ahora es más fiable; en este caso obtuvimos valores distintos (insistimos que tampoco se trataba de algo importante para la funcionalidad del sitio)


AJAX

Esta tecnología nos he servido de gran ayuda para no solo conocer la verdadera fecha de la última modificación, sino para detectar tanto los enlaces hacia carpetas como aquellos enlaces rotos (inexistentes).


Buscar enlaces



Listado del "SITEMAP.XML"
loc lastmod changefreq priority estado info

Problemas y soluciones

Ya hemos a lo largo de todas las versiones de esta aplicación (aún es un proyecto) hecho comentarios de las incidencias que hemos tenido para obtener ese deseado resultado final. Ahora es el momento de detallarlo de una manera mejor organizada.

Obtención del conjunto de enlaces del sitio
Enviando la página a un iframe oculto, y mediante el DOM, en concreto con el método getElementsByTagName(), con el parámetro "a". Luego recursivamente hemos obtenido los "enlaces de los enlaces" (vaya la redundancia).
Descarte de enlaces externos
Sabiendo la raíz del sitio, simplemente hemos descartado los que tenían una raíz distinta
Enlaces internos
Hemos averiguado éstos enlaces detectando el carácter "#" de la lista de enlaces válidos.
Obtención de la fecha de última modificación (lastmod)
Para este datos hemos implementado con Ajax una búsqueda donde también hemos averiguado el tipo de fichero, marcando los tipo "dir", y sobre todo los del tipo "desconocido", permitiéndonos la depuración general del sitio.
Reconocimiento de enlaces rotos
Creo que es una de las características secundarias más positiva de este proyecto. Se trata de un caso anecdótico el haberme descuidado de incluir el protocolo "html:" en el enlace de un artículo, pero supongo que en sitios con frecuentes modificaciones como éste tener una herramienta que detecte esos enlaces es muy positivo.
Gestión de duplicados
Aunque parezca raro, puede haber casos especiales como sitios duplicados; se me ocurren dos casos posibles (sin contar los casos de enlaces internos comenzados por "#") Uno de ellos podemos encontrar en nuestro sistema de comentarios, precisamente donde se enlaza a la páagina explicativa, que a la vez tiene el formulario para introducir comentarios a sí mismo: Ponga comentarios en su web. Una primera solución es la eliminación de enlaces a carpetas, ya que suelen realmente ser a los ficheros "index" de esas carpetas, y el otro caso se resuelve (en esta página) añadiendo a los sitios visitados, tanto las carpetas como los "index" antes comentados.
Timeout
Enlaces para descargas, por ejemplo de un fichero multimedia (un caso real se encuentra en la carpeta "/mp3" de este sitio web), pueden "no activar" el evento de carga de la página. Para evitar que se detenga la búsqueda recursiva programaremos el temporizador para que pasado un tiempo razonable de carga pueda continuar con la siguiente página.