Ниже представлен код функции генерации карты сайта написанный на bash.
Функция принимает в качестве параметра имя сайта и должна быть выполнена в его корне.
Список url берется из файла url.list, расположенного там-же.
Результатом ее выполнения будет набор упакованных gzip-ом xml-файлов вида sitemapX.xml.gz с общим файлом индекса sitemapindex.xml.gz.
Для его подключения к сайту, достаточно добавить в robots.txt строку
Sitemap: http://sitename/sitemapindex.xml
Для того, чтобы nginx корректно отдавал эти файлы необходимо немного изменить конфиг nginx
try_files $uri $uri.gz @upstream;
Естественно gzip в nginx должен быть включен.
db_sitemap() { if [ -z "$1" ]; then echo "usage: sitemap sitename" elif [ -f url.list ]; then echo "[$(date +%T)] sitemap start $1" C=0 N=0 rm -rfv sitemap[0-9].xml.gz rm -rfv sitemapindex.xml.gz echo "[$(date +%T)] sitemap remove old" for url in $(cat url.list); do if [ $C -eq 0 ]; then N=$[N+1] echo ' ' > sitemap${N}.xml fi C=$[C+1] echo ' http://'${1}${url}' '$(date +%Y-%m-%d)' daily 0.5 ' >> sitemap${N}.xml if [ $C -eq 10000 ]; then C=0 echo '' >> sitemap${N}.xml echo "[$(date +%T)] sitemap part $N" gzip sitemap${N}.xml fi done if [ $C -ne 0 ]; then echo '' >> sitemap${N}.xml echo "[$(date +%T)] sitemap part $N" gzip sitemap${N}.xml fi echo "[$(date +%T)] sitemap index" echo ' ' > sitemapindex.xml for sitemap in $(ls sitemap[0-9].xml.gz); do echo ' http://'${1}'/'${sitemap}' '$(date +%Y-%m-%d)'' >> sitemapindex.xml done echo '' >> sitemapindex.xml gzip sitemapindex.xml echo "[$(date +%T)] sitemap completed" else echo "[$(date +%T)] url.list not found" fi }