Bash Sitemap.xml

На Bash за 5 минут, без регистрации и SMS

Раньше я писал свои генераторы Sitemap на PHP. Затем я привык пользоваться разными готовыми генераторами, которые имеют ограничения либо платные. В очередной раз встал вопрос генерации Sitemap.xml для нового отредизайненного GeekJOB.ru

И тут что-то подумалось, а что если написать свой генератор на базе WGET? Ведь он умеет рекурсивно собирать ссылки по сайту. Нам нужно будет только проставить время и вес собранных ссылок. Вроде интересная задача, го решать…

Ликбез

Sitemap.xml — это XML-файл, в котором перечислены URL-адреса. Это в простом варианте. Более расширенный вариант предполагает наличие метаданных: дата последнего изменения, частота изменений, приоритет. Все это нужно чтобы поисковые системы могли более грамотно сканировать сайт.

Пример файла:

<?xml version="1.0" encoding="UTF-8"?>
<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">
<url>
<loc>https://geekjob.ru/</loc>
<lastmod>2019-09-18T14:12:23+03:00</lastmod>
<priority>1.00</priority>
</url>
<url>
<loc>https://geekjob.ru/vacancy</loc>
<lastmod>2019-09-18T14:12:23+03:00</lastmod>
<priority>0.80</priority>
</url>
</urlset>

Пишем Bash скрипт

Собственно суть: собираем с помощью WGET рекурсивно ссылки с сайта и собираем файл:

#!/bin/bash

sitedomain
=https://geekjob.ru

rm -v linklist.txt
wget --spider --recursive --level=inf -nv --output-file=linklist.txt --reject '*.js,*.css,*.ico,*.txt,*.gif,*.jpg,*.png,*.pdf,*.txt' --ignore-tags=img,link,script --header="Accept: text/html" --follow-tags=a $sitedomain
grep -i URL linklist.txt | awk -F 'URL:' '{print $2}' | awk '{$1=$1};1' | awk '{print $1}' > clearlinks.txtheader='<?xml version="1.0" encoding="UTF-8"?><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">'
echo $header > sitemap.xml
lastmod=$(date "+%Y-%m-%dT%H:%M:%S+03:00")
limit=1024
itr=0
while read link
do

(( itr++ )) ; [ $itr -eq $limit ] && break
# Костыльный способ весовки, мне он подходит, для вас - решайте сами
priority
=0.80
if [ $itr -eq 1 ]
then
priority=1.00
else
if [ $itr -gt 50 ];then
priority=0.76
fi
if [ $itr -gt 128 ];then
priority=0.64
fi
if [ $itr -gt 256 ];then
priority=0.51
fi
if [ $itr -gt 512 ];then
priority=0.42
fi
if [ $itr -gt 700 ];then
priority=0.33
fi
fi
# Отформатированный вывод
#echo -e "\t<url>\n\t\t<loc>$link</loc>\n\t\t<lastmod>$lastmod</lastmod>\n\t\t<priority>$priority</priority>\n\t</url>" >> sitemap.xml

# Без лишних табуляторов
echo -e "<url><loc>$link</loc><lastmod>$lastmod</lastmod><priority>$priority</priority></url>" >> sitemap.xml
done < clearlinks.txt
echo -e "</urlset>" >> sitemap.xml#EOF#

Не знаю на сколько надо объяснять что в этом скрипте, вроде бы все просто. Если есть вопросы — задавайте в комментариях.


Лайк, хлопок, шер. Подписывайтесь на Телеграм канал. Следить за обновлениями и прочими материалами от меня можно именно там: @prowebit . В этом канале публикую различные новости и мысли, которых может не быть в этом блоге. Подписывайтесь!

𝔾𝕖𝕖𝕜 JOB — анонимный поиск работы без палева где можно найти новую работу без проблем на текущем месте. Только для IT, никакого “левого” стафа. Только релевантные предложения. Скоро будет мега апдейт ;)

New.HR — место где помогают найти работу мечты. Работаем только с отборными вакансиями в сфере IT & Digital. Помогаем кандидатам найти работу по душе. Работаем с кандидатами, которые не ищут работу!

Александр Майоров / Alexander Mayorov — ProWEBIT

Written by

Активист программного комитета FrontendConf. CTO and co-founder at New.HR & GeekJOB.ru

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade