Hace unos años hice el crawling de la web antigua de kaosenlared. Ahora tiempo mas tarde el analytics de google les estaba dando muchos errores de páginas no encontradas, así que he tenido que generar los ficheros sitemap.xml para que google indexe el sitio.
He hecho un primer script para listar todas las páginas index.html del directorio y generar el fichero sitemap.xml que ocupaba la friolera de 150Mb pero al metérselo a google analytics daba errores de tamaño de archivo. Buscando los límites, nos encontramos que el sitemap.xml no puede ser más grande de 50Mb ni contener más de 50.000 entradas. Así que ha sido necesario crear un índice y separar los sitemap.xml en ficheros más pequeños.
A continuación el script de como lo he hecho
#!/bin/bash # Directori on es troben les pàgines html DIRECTORI=/home/virtualmin/archivo.kaosenlared.net/public_html # URL base del lloc web URL_BASE=https://archivo.kaosenlared.net current_date=$(date -u +"%Y-%m-%dT%H:%M:%SZ") # Funció per generar el sitemap.xml generar_sitemap() { # Initialize the URL count and the file number url_count=0 file_number=1 # Initialize the sitemap file name sitemap_file="sitemap_${file_number}.xml" sitemap_index="sitemap.xml" # Inicialitza el fitxer sitemap.xml echo '<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' > $sitemap_index echo '<?xml version="1.0" encoding="UTF-8"?>' > $sitemap_file echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">' >> $sitemap_file echo " <sitemap>" >> $sitemap_index echo " <loc>$URL_BASE/$sitemap_file</loc>" >> $sitemap_index echo " <lastmod>$current_date</lastmod>" >> $sitemap_index #echo " <changefreq>monthly</changefreq>" >> $sitemap_index echo " </sitemap>" >> $sitemap_index # Recorre els fitxers html del directori i subdirectoris find $DIRECTORI -type f -name "*.html" -not -path "*mailto*" -not -path "* *" -not -path "*&*" | while read…