Обнаружение неработающих ссылок на сайте с помощью wget в Debian 7
Debian, VPS | Комментировать запись
Неработающие ссылки появляются на сайтах потому, что некоторые веб-страницы были перемещены или удалены. Веб-мастер должен обнаруживать такие ссылки до того, как их найдёт посетитель сайта или поисковые боты. Откладывание устранения этой проблемы может негативно сказаться на общем впечатлении пользователей и на рейтинге поисковых систем, что приводит к снижению посещаемости.
Выполнение проверки ссылок многостраничного сайта – процесс довольно трудоёмкий. К счастью, существуют инструменты, способные выполнить проверку автоматически. К примеру, можно обратиться к веб-приложениям Google Webmaster Tools или World Wide Web Consortium (W3C), но они, как правило, не предоставляют продвинутых функций. Пользователи WordPress могут установить специальный плагин, но это может привести к штрафам от хостинг-компании за выполнение ресурсоёмких задач.
Также можно использовать основанные на Linux программы, среди которых встречаются общие веб-сканеры, способные обнаружить неработающие ссылки (например, wget), и специально разработанные программы проверки ссылок (как linkchecker и klinkstatus). Они обладают широкими возможностями настройки и могут свести к минимуму негативное воздействие на время отклика целевого сайта.
Данное руководство демонстрирует использование wget для обнаружения неработающих ссылок веб-сайта.
Требования
Для выполнения руководства вам понадобится:
- Два сервера Debian 7: первый – для запуска wget (в данном руководстве он называется generic-1), второй – для обслуживания сайта (webserver-1).
- Не-рутовый пользователь с правами sudo на этих серверах (подробные инструкции ищите в этой статье).
- Предварительно установленный стек LAMP на сервере webserver-1 (подробнее – здесь).
- Доменное имя (опционально), которое можно использовать вместо IP-адреса сервера.
Данное руководство написано для системы Debian 7, но его инструкции действительны для других современных дистрибутивов Linux.
Примечание: На дистрибутивы, которые не поставляются с предустановленной wget по умолчанию, нужно установить утилиту самостоятельно.
1: Создание страницы
Для начала создайте тестовую страницу сайта, заведомо разместив на ней неработающие ссылки.
Войдите на сервер webserver-1. Откройте новый файл spiderdemo.html для редактирования в любом удобном текстовом редакторе (в данном случае это nano).
sudo nano /var/www/spiderdemo.html
Вставьте в файл следующий текст. Это очень простая веб-страница, содержащая две неработающие ссылки, одна из которых внешняя, вторая – внутренняя (укажите IP своего сервера).
<html>
<head> <title>Hello World!</title> </head>
<body>
<p>
<a href="http://your_server_ip/badlink1">Internal missing link</a>.
<a href="https://www.digitalocean.com/thisdoesntexist">External missing link</a>.
</p>
</body>
</html>
Сохраните и закройте файл.
Затем передайте права на файл spiderdemo.html стандартному пользователю по имени www-data.
sudo chown www-data:www-data /var/www/spiderdemo.html
Затем измените права на новый HTML-файл.
sudo chmod 664 /var/www/spiderdemo.html
Теперь можно просмотреть новую страницу по ссылке:
http://ip_сервера/spiderdemo.html
2: Запуск wget
Wget – это универсальный загрузчик, который также может быть использован в качестве веб-сканера. В данном разделе показано, как настроить wget для проверки ссылок и обнаружения неработающих ссылок.
Примечание: Проверяйте ссылки только на своём сайте! Проверка ссылок влечёт значительную вычислительную нагрузку, потому подобные действия могут быть приняты за спам.
Войдите на сервер generic-1 и запустите следующую команду wget (в случае необходимости отредактируйте её). Разбор данной команды можно найти ниже.
wget --spider -r -nd -nv -H -l 1 -w 2 -o run1.log http://ip_сервера/spiderdemo.html
Базовые флаги:
- –spider предотвращает загрузку страницы;
- При помощи флага -r утилита wget будет рекурсивно следовать каждой ссылке;
- -nd (сокращение от –no-directories) предотвращает формирование иерархии каталогов;
- -nv (сокращение от –no-verbose) отключает вывод утилитой wget подробной информации, поскольку она не играет никакой роли в обнаружении нерабочих ссылок.
Следующие параметры опциональны:
- -H (сокращение от –span-hosts) проверяет внешние сайты.
- -l 1 (сокращение от –level): по умолчанию wget проверяет пять уровней от начального URL-адреса, но при помощи данного флага можно задать другое количество уровней. Попробуйте поэкспериментировать с этим параметром, чтобы подобрать наиболее подходящее значение.
- -w 2 (сокращение от –wait) задаёт wget паузу между запросами в 2 секунды, чтобы не перенагружать сервер и свести к минимуму влияние на производительность.
- -o run1.log сохраняет вывод wget в файл run1.log вместо того, чтобы вывести его на экран.
Запустив вышеприведённую команду wget, извлеките неработающие ссылки из файла вывода при помощи:
grep -B1 'broken link!' run1.log
При помощи параметра -B1 для каждого совпадения утилита wget отображает дополнительную предшествующую строку с контекстом (в которой и содержится неработающий URL). Пример вывода команды grep:
http://your_server_ip/badlink1:
Remote file does not exist -- broken link!!!
https://www.digitalocean.com/thisdoesntexist:
Remote file does not exist -- broken link!!!
3: Обнаружение рефереров
Итак, на данном этапе нерабочие ссылки обнаружены, но нет никаких данных о реферер-страницах (или реферерах, англ referer – это страницы сайта, содержащие эти ссылки).
Рефереры очень просто обнаружить при помощи лога доступа веб-сервера. Войдите на webserver-1 и найдите неработающие ссылки в логе Apache.
sudo grep Wget /var/log/apache2/access.log | grep "HEAD /badlink1"
Первая команда grep находит все запросы доступа, отправленные веб-серверу утилитой wget. Каждый такой запрос содержит строку User Agent, в которой указан программный агент, ответственный за запрос. User Agent утилиты wget:
Wget/1.13.4 (linux-gnu)
Вторая команда grep ищет partial URL неработающей ссылки (/badlink1), который является частью URL-а после домена.
Пример вывода цепи команд grep:
111.111.111.111 - - [10/Apr/2015:17:26:12 -0800] "HEAD /badlink1 HTTP/1.1" 404 417 "http://your_server_ip/spiderdemo.html" "Wget/1.13.4 (linux-gnu)"
Реферер находится в строке:
http://your_server_ip/spiderdemo.html.
Заключение
При помощи данного руководства можно найти нерабочие ссылки на сайте, а также выяснить, на каких страницах они находятся. После этого рекомендуется обновить или удалить эти ссылки.
Tags: Cloud Server, Debian 7, wget