Файл sitemap предназначен для того, чтобы роботы
поисковых систем максимально эффективно сканировали сайт. Сложность создания и
поддержки актуального состояния файла sitemap растет с увеличением количества
страниц сайта и ростом частоты их обновления. В состав большинства современных
CMS входят инструменты, позволяющие автоматизировать процесс создания файла
sitemap. Мне не повезло. CMS сайта нашей Компании в первозданном виде не
поддерживает автоматическое создание файлов sitemap, а руководство экономит, в
т.ч. и на услугах программиста, который мог бы запросто написать соответствующий
модуль. Эти обстоятельства заставили меня задуматься об автоматизации процесса
создания/обновления файла sitemap. В данной статье описан мой способ решения
этой задачи.
Исходные данные
Имеется сервер с FreeBSD, на котором кроме прочих служб развернут Web-сервер.
Нам понадобится следующее ПО: для генерации файла sitemap.xml.gz –
google-sitemapgen, для сканирования сайта и подготовки исходных данных –
webcheck, для промежуточной обработки данных – системные утилиты awk, sort и
uniq. Перечисленное программное обеспечение будет устанавливаться из портов,
поэтому я рекомендую Вам обновить их перед выполнением действий, описанных
ниже (я использовал FreeBSD 7.0 и последние версии портов для нее). Ссылки на
источники информации будут приводиться применительно к конкретным разделам
статьи.
google-sitemapgen поддерживает различные источники данных. В частности, могут
использоваться данные из файла конфигурации, одного или нескольких файлов
url_list.txt, access.log'ов Web-сервера, а также
одного или нескольких файлов sitemap.xml. Периодическая ручная
корректировка файла конфигурации, на мой взгляд, – гиблое дело,
access.log каждый час очищается с помощью AWStats, дополнительные файлы
sitemap.xml отсутствуют. Остается единственный способ –
url_list.txt. С учетом сказанного файл конфигурации
google-sitemapen, который может иметь любое имя и располагаться где угодно (в
моем случае – /etc/sitemapgen.xml), должен иметь следующее
содержимое:
Естественно, значения параметров base_url и
store_into необходимо заменить на адрес Вашего сайта и путь к
будущему файлу sitemap.xml.gz, который должен располагаться в
корневой папке Web-сервера, на котором расположен сайт. Процесс формирования
файла url_list.txt рассмотрен ниже.
Установка и настройка webcheck
Установку webcheck необходимо выполнить из портов:
cd
/usr/ports/www/webcheck
make install
clean
Конфигурация webcheck хранится в файле config.py, который
находится в папке /usr/local/share/webcheck. Для того, чтобы
отключить не нужные в нашем случае схемы сканирования и плагины, формирующие
отчеты, в файле config.py необходимо изменить две строки (ниже
указаны новые значения параметров):
SCHEMES =
['http']
PLUGINS =
['sitemap']
Файл config.py содержит подробные комментарии и примерные
значения большинства параметров, поэтому у Вас не должно возникнуть проблем с
дополнительной (более тонкой) настройкой параметров сканирования сайта, которая
в подавляющем большинстве случаев не потребуется. Вы можете сформировать
карту сайта, выполнив команду webcheck -aq http://www.company.com/,
естественно, www.company.com нужно заменить на адрес Вашего сайта
(ключ -a запрещает webcheck обрабатывать внешние ссылки, ключ
-q отключает вывод сообщений). После завершения работы webcheck в
текущей папке появится несколько файлов, включая sitemap.html. Он
содержит карту сайта, однако ее формат не совместим с требуемым
google-sitemapgen. Написано позже: если Вы решите запускать webcheck с
помощью cron’а, учтите, что в первозданном виде он не будет работать. Это
обусловлено тем, что в заголовке скрипта указан неверный интерпретатор python.
Для устранения недуга нужно изменить первую строку файла
/usr/local/share/webcheck/webcheck.py c #!/usr/bin/env python на
#!/usr/local/bin/python.
Стыковка google-sitemapgen и webcheck
Для создания файла url_list.txt в формате, который требуется google-sitemapgen, я
использовал системные утилиты awk, sort и uniq, подробно описанные в awk(1), sort(1) и uniq(1), соответственно. Первый вызов awk
выбирает все URL, не содержащие ‘?’ (в моем случае индексирование таких URL не
требуется) из файла sitemap.html, второй – расставляет
дополнительные параметры, такие как частота обновления –
changefreq, приоритет – priority и дата последнего
обновления – lastmod. Вызов sort и uniq обеспечивает сортировку и
удаление дубликатов URL, соответственно. В моем случае для всех документов, URL
которых содержит текст catalog задается частота обновления –
daily и приоритет 1.0, для остальных – частота
обновления – weekly и приоритет 0.5. В качестве даты
последнего изменения для всех документов выбирается текущая дата. Для выполнения
описанного набора процедур я применяю периодически запускаемый скрипт следующего
содержания:
Скрипт не нуждается в комментариях. Скорее всего для его адаптации Вам
придется немного поиграть с вызовами awk (например, изменить существующие и/или
добавить дополнительные). Я не специалист по awk, поэтому прошу прощение за
возможную корявость написания кода. Приведенный вариант работает, и мне этого
достаточно. Написано позже: в связи с последним обновлением webcheck и
обнаружением некоторых недочетов скрипт создания файла sitemap был изменен. Все
изменения описаны в заметке Обновленный скрипт
стыковки google-sitemapgen и webcheck.
Оповещение роботов поисковых систем
После настройки автоматической генерации файла sitemap.xml.gz необходимо
оповестить о нем роботов поисковых систем. Проще всего сделать это с помощью
файла robots.txt, добавив директиву
Sitemap в раздел User-agent: *. Эта директива знакома
большинству роботов.
Заключение
Выполнив действия, описанные в данной статье, Вы сможете надолго забыть об
интерфейсах поисковых систем, позволяющих добавлять URL в очередь на индексацию.
Независимо от того, на сколько сильно была изменена структура сайта, Вам
достаточно одной команды, чтобы в кратчайшие сроки "освежить” память роботов.