sitemap - una - Mapa del sitio en un sitio web altamente dinámico
ver sitemap de una web (6)
¿Un sitio web altamente dinámico que genera constantemente nuevas páginas utiliza un sitemap ? Si es así, ¿cómo hace un sitio como stackoverflow.com para regenerar un mapa del sitio? Parece que sería una pérdida de valiosos recursos del servidor si estuviera constantemente regenerando un mapa del sitio cada vez que alguien agregara una pregunta. ¿Genera un nuevo mapa del sitio a intervalos establecidos (por ejemplo, cada cuatro horas)? Tengo mucha curiosidad de cómo los sitios web grandes y dinámicos hacen que esto funcione.
En (y todos los sitios de Stack Exchange), se crea un archivo sitemap.xml que contiene un enlace a cada pregunta publicada en el sistema. Cuando se publica una nueva pregunta, simplemente añaden otra entrada al final del archivo del mapa del sitio. No es tan intensivo en recursos agregarlo al final del archivo, pero el archivo es bastante grande.
Esa es la única forma en que los motores de búsqueda como Google pueden rastrear el sitio de manera efectiva.
Jeff Atwood habla de ello en una publicación de blog : La importancia de los Sitemaps
Esto es de la página de ayuda del webmaster de Google en sitemaps :
Los sitemaps son particularmente útiles si:
- Su sitio tiene contenido dinámico.
- Su sitio tiene páginas que el robot de Google no descubre fácilmente durante el proceso de rastreo, por ejemplo, páginas que incluyen AJAX o Flash.
- Su sitio es nuevo y tiene pocos enlaces a él. (Googlebot rastrea la web siguiendo los enlaces de una página a otra, por lo que si su sitio no está bien vinculado, puede ser difícil para nosotros descubrirlo).
- Su sitio tiene un gran archivo de páginas de contenido que no están bien vinculadas entre sí o que no están vinculadas en absoluto.
Incluso en algo como , hay una cierta cantidad de organización estática; hay preguntas frecuentes, páginas de etiquetas, páginas de preguntas, páginas de usuarios, páginas de insignias, etc. Yo diría que en un sitio muy dinámico, la mejor manera de acercarse a un mapa del sitio sería tener un mapa de las categorizaciones; cada nodo en el mapa del sitio puede apuntar a una página de los datos generados dinámicamente (un nodo para una página de preguntas, un nodo para una página de usuario, etc.).
Por supuesto, un mapa del sitio puede no ser apropiado para un sitio dado; hay una cierta cantidad de juicio requerido allí.
Me gustaría compartir mi solución aquí en caso de que ayude a alguien también. Me tomó leer esta pregunta y muchas otras para decidir qué hacer.
La estructura de mi sitio
Páginas estáticas
- Inicio (altamente dinámico, guardado en caché durante 30 minutos)
- Artistas, álbumes, canciones, listas de reproducción y álbumes (lista paginada)
- Legal (página estática con términos, etc.)
... etc
Páginas dinámicas
- Artistas, Álbumes, Canciones, Listas de reproducción y Álbumes páginas de detalles
Mi acercamiento.
sitemap.xml : esta url genera un <sitemapindex />
con el primer elemento siendo /sitemap-main.xml
. La cantidad de Artists
, Albums
, Songs
, etc. se cuenta y se divide por 1,000 (número de URL que quiero en cada mapa del sitio, el límite es 50,000). Redondeo este número.
Entonces, por ejemplo, 1900 canciones = 1.9 = 2. Genero. agregue las URL / /sitemap-songs-0.xml
- /sitemap-songs-1.xml
/sitemap-songs-0.xml
y /sitemap-songs-1.xml
al índice. Repito esto para todos los demás artículos. Básicamente, estoy paginating.
La salida se devuelve sin guardar en caché. Quiero que esto siempre sea fresco.
sitemap-main.xml : Esto enumera todas las páginas estáticas. En realidad, puede usar un archivo estático para esto, ya que solo necesitará actualizarlo de vez en cuando.
sitemap-songs-0.xml, sitemap-albums-0.xml, etc . : utilizo una ruta única para esto en SlimPhp 2.
$app->get(''/sitemap-:type-:page.xml'', function ($type, $page) use ($app) {...
Utilizo una instrucción de cambio simple para generar los archivos relevantes. Si para esta página obtuve 1.000 elementos, el límite especificado anteriormente, guardo en caché el archivo durante 2 semanas. De lo contrario, solo lo guardo en la memoria caché durante unas horas.
Supongo que esto puede ayudar a cualquier otra persona a implementar su propio sistema.
No es necesario volver a generar el XML del mapa del sitio de Google cada vez que se publique una pregunta. Es mucho más simple simplemente tener el archivo XML generado a pedido directamente desde la base de datos (y un poco de almacenamiento en caché).
Para reducir la carga, el mapa del sitio se puede dividir en muchos mapas de sitio. Particionarlo por día / mes le permitiría decirle a Google que recupere el mapa del sitio de hoy con frecuencia, pero solo obtenga el mapa del sitio de hace seis meses de vez en cuando.
Para un sitio altamente dinámico, escribí un trabajo cron en mi servidor que se ejecuta diariamente. Hace una llamada de descanso a mi backend todos los días, y genera un nuevo mapa del sitio de acuerdo con todo el contenido recién generado, y devuelve el mapa del sitio en forma de un archivo xml. Este nuevo mapa del sitio anula el anterior y mantiene mi sitio web actualizado de acuerdo con todos los cambios. Cambiar el mapa del sitio para cada contenido dinámico recién agregado no es un buen enfoque, creo
Solo crearía un mapa del sitio para las páginas más estáticas del sitio. Por ejemplo, en , un mapa del sitio podría mostrar enlaces para las páginas de Preguntas frecuentes, Acerca de, Preguntas, Etiquetas, Usuarios, etc., pero no mostrar enlaces a las preguntas reales, ni a todas las etiquetas, ni a los diversos usuarios.