Обнаружение неработающих ссылок на сайте с помощью wget в Debian 7

Неработающие ссылки появляются на сайтах потому, что некоторые веб-страницы были перемещены или удалены. Веб-мастер должен обнаруживать такие ссылки до того, как их найдёт посетитель сайта или поисковые боты. Откладывание устранения этой проблемы может негативно сказаться на общем впечатлении пользователей и на рейтинге поисковых систем, что приводит к снижению посещаемости.

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

Добавить комментарий