Site icon 8HOST.COM

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

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

Выполнение проверки ссылок многостраничного сайта – процесс довольно трудоёмкий. К счастью, существуют инструменты, способные выполнить проверку автоматически. К примеру, можно обратиться к веб-приложениям Google Webmaster Tools или World Wide Web Consortium (W3C), но они, как правило, не предоставляют продвинутых функций. Пользователи WordPress могут установить специальный плагин, но это может привести к штрафам от хостинг-компании за выполнение ресурсоёмких задач.

Также можно использовать основанные на Linux программы, среди которых встречаются общие веб-сканеры, способные обнаружить неработающие ссылки (например, wget), и специально разработанные программы проверки ссылок (как linkchecker и klinkstatus). Они обладают широкими возможностями настройки и могут свести к минимуму негативное воздействие на время отклика целевого сайта.

Данное руководство демонстрирует использование wget для обнаружения неработающих ссылок веб-сайта.

Требования

Для выполнения руководства вам понадобится:

Данное руководство написано для системы 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

Базовые флаги:

Следующие параметры опциональны:

Запустив вышеприведённую команду 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.

Заключение

При помощи данного руководства можно найти нерабочие ссылки на сайте, а также выяснить, на каких страницах они находятся. После этого рекомендуется обновить или удалить эти ссылки.