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
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
Enlace externo
El color gris (#eeeeee) indica que es un externo y no se incluirá en el sitemap
Enlace para revisar
El color rosado (pink: #ffc0cb) indica que debe chequearse para incluirlo en el sitemap
Enlace válido
Los colores azulados ("#abbcde", "#bacdef") indican enlaces para incluir en el sitemap
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.