Документация по ОС FreeBSD Суббота, 18.05.2024, 18:25
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Net

Автоматическое создание файла sitemap [2008]

Постановка задачи

Файл sitemap предназначен для того, чтобы роботы поисковых систем максимально эффективно сканировали сайт. Сложность создания и поддержки актуального состояния файла sitemap растет с увеличением количества страниц сайта и ростом частоты их обновления. В состав большинства современных CMS входят инструменты, позволяющие автоматизировать процесс создания файла sitemap. Мне не повезло. CMS сайта нашей Компании в первозданном виде не поддерживает автоматическое создание файлов sitemap, а руководство экономит, в т.ч. и на услугах программиста, который мог бы запросто написать соответствующий модуль. Эти обстоятельства заставили меня задуматься об автоматизации процесса создания/обновления файла sitemap. В данной статье описан мой способ решения этой задачи.

Исходные данные

Имеется сервер с FreeBSD, на котором кроме прочих служб развернут Web-сервер. Нам понадобится следующее ПО: для генерации файла sitemap.xml.gz – google-sitemapgen, для сканирования сайта и подготовки исходных данных – webcheck, для промежуточной обработки данных – системные утилиты awk, sort и uniq. Перечисленное программное обеспечение будет устанавливаться из портов, поэтому я рекомендую Вам обновить их перед выполнением действий, описанных ниже (я использовал FreeBSD 7.0 и последние версии портов для нее). Ссылки на источники информации будут приводиться применительно к конкретным разделам статьи.

Установка и настройка google-sitemapgen

Установку google-sitemapgen необходимо выполнить из портов:

cd /usr/ports/www/google-sitemapgen
make install clean

google-sitemapgen поддерживает различные источники данных. В частности, могут использоваться данные из файла конфигурации, одного или нескольких файлов url_list.txt, access.log'ов Web-сервера, а также одного или нескольких файлов sitemap.xml. Периодическая ручная корректировка файла конфигурации, на мой взгляд, – гиблое дело, access.log каждый час очищается с помощью AWStats, дополнительные файлы sitemap.xml отсутствуют. Остается единственный способ – url_list.txt. С учетом сказанного файл конфигурации google-sitemapen, который может иметь любое имя и располагаться где угодно (в моем случае – /etc/sitemapgen.xml), должен иметь следующее содержимое:

<?xml version="1.0" encoding="UTF-8"?>
<site
  base_url="http://www.company.com/"
  store_into="/data/httpd/www-company-com/html/sitemap.xml.gz"
  verbose="1"
  >
  <urllist path="/tmp/webcheck/url_list.txt" encoding="UTF-8" />
</site>

Естественно, значения параметров 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. В качестве даты последнего изменения для всех документов выбирается текущая дата. Для выполнения описанного набора процедур я применяю периодически запускаемый скрипт следующего содержания:

#!/bin/sh
lastmod=`date +"%Y-%m-%d"`
folder=/tmp/webcheck
if [ ! -d $folder ]
then
  mkdir $folder
fi
cd $folder
/usr/local/bin/webcheck -aq http://www.company.com/
cat sitemap.html \
| awk '{if (index($3,"internal")>0 && index($2,"?")==0) {print substr($2,7,length($2)-7)}}' \
| sort | uniq -u \
| awk '{if (index($1,"catalog")>0) {print $1 " changefreq=daily priority=1.0 lastmod='$lastmod'"} \
        else {print $1 " changefreq=weekly priority=0.5 lastmod='$lastmod'"}}' > url_list.txt
/usr/local/bin/python /usr/local/lib/python2.5/site-packages/sitemap_gen.py \
  ––config=/etc/sitemapgen.xml
rm -Rf $folder

Скрипт не нуждается в комментариях. Скорее всего для его адаптации Вам придется немного поиграть с вызовами awk (например, изменить существующие и/или добавить дополнительные). Я не специалист по awk, поэтому прошу прощение за возможную корявость написания кода. Приведенный вариант работает, и мне этого достаточно.
Написано позже: в связи с последним обновлением webcheck и обнаружением некоторых недочетов скрипт создания файла sitemap был изменен. Все изменения описаны в заметке Обновленный скрипт стыковки google-sitemapgen и webcheck.

Оповещение роботов поисковых систем

После настройки автоматической генерации файла sitemap.xml.gz необходимо оповестить о нем роботов поисковых систем. Проще всего сделать это с помощью файла robots.txt, добавив директиву Sitemap в раздел User-agent: *. Эта директива знакома большинству роботов.

Заключение

Выполнив действия, описанные в данной статье, Вы сможете надолго забыть об интерфейсах поисковых систем, позволяющих добавлять URL в очередь на индексацию. Независимо от того, на сколько сильно была изменена структура сайта, Вам достаточно одной команды, чтобы в кратчайшие сроки "освежить” память роботов.



Источник: http://www.sergeysl.ru/google-sitemapgen/
Категория: Net | Добавил: oleg (12.11.2009) | Автор: Сергей
Просмотров: 1014 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024