Как найти неработающие ссылки на вашем сайте, используя Wget на Debian 7

Вступление

Сколько раз вы нажимали ссылку HTML на веб-странице только для того, чтобы получить ошибку 404 Not Found? Неработающие ссылки существуют, потому что веб-страницы иногда перемещаются или удаляются со временем. Работа веб-мастера заключается в том, чтобы находить эти неработающие ссылки раньше, чем посетители веб-сайтов или роботы поисковых систем. Задержка в исправлении проблемы приводит к плохому пользовательскому опыту и возможному штрафу за ранжирование страниц в поисковой системе.

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

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

В этом руководстве объясняется, как с помощью + wget + найти все неработающие ссылки на веб-сайте, чтобы вы могли их исправить.

Предпосылки

Чтобы следовать этому уроку, вам понадобится:

  • Две капли Debian 7, одна общая машина для запуска + wget + from (* generic-1 ) и одна, на которой размещен ваш сайт ( webserver-1 *).

  • Пользователь sudo без полномочий root на * generic-1 * и * webserver-1 *. Нажмите здесь для получения инструкций.

  • * webserver-1 * должен быть установлен стек LAMP. Нажмите здесь для получения инструкций.

  • При желании веб-сервер может иметь собственное зарегистрированное доменное имя. Если это так, используйте ваше доменное имя везде, где вы видите ++. Click here для получения инструкций.

Хотя это руководство написано для Debian 7, примеры + wget + должны также запускаться в других современных дистрибутивах Linux. Вам может потребоваться установить + wget + в других дистрибутивах, где он не включен по умолчанию.

Шаг 1 - Создание примера веб-страницы

Сначала добавим образец веб-страницы с несколькими отсутствующими ссылками.

Войдите в систему * webserver-1 *. Откройте новый файл с именем + spider demo.html для редактирования, используя` + nano + `или ваш любимый текстовый редактор.

sudo nano /var/www/spiderdemo.html

Вставьте следующее в файл. Это очень простая веб-страница, которая содержит две неработающие ссылки: одну внутреннюю (добавьте IP-адрес вашего сервера, где она выделена ниже) и одну внешнюю.

<html>
<head> <title>Hello World!</title> </head>
<body>

<p>
<a href="http:///badlink1">Internal missing link</a>.
<a href="https://www.digitalocean.com/thisdoesntexist">External missing link</a>.
</p>

</body>
</html>

Сохраните и закройте файл.

Затем измените владельца файла и группу + spiders demo.html на пользователя веб-сервера по умолчанию,` + www-data + `.

sudo chown www-data:www-data /var/www/spiderdemo.html

Наконец, измените права доступа к новому файлу HTML.

sudo chmod 664  /var/www/spiderdemo.html

Теперь вы можете увидеть пример страницы по адресу + http: /// spiderdemon.html.

Шаг 2 - Запуск wget

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

  • Примечание: * Проверяйте ссылки только на принадлежащем вам веб-сайте. Проверка ссылок на веб-сайте влечет за собой значительные вычислительные затраты, поэтому эти действия можно интерпретировать как рассылку спама.

Войдите в * generic-1 * и выполните следующую команду + wget +. Пояснения каждого флага ниже; Вы можете изменить эту команду для своего варианта использования.

wget --spider -r -nd -nv -H -l 1 -w 2 -o run1.log  http:///spiderdemo.html

Ниже приведены основные флаги, которые вам понадобятся:

  • + - spider остановить` + wget` от загрузки страницы.

  • + -r + заставляет + wget + рекурсивно переходить по каждой ссылке на странице.

  • + -nd +, сокращение от + - no-directoryies +, не позволяет + wget + создавать иерархию каталогов на вашем сервере (даже если она настроена только на паук).

  • + -nv +, сокращение от + - no-verbose +, останавливает + wget + от вывода дополнительной информации, которая не нужна для идентификации неработающих ссылок.

Ниже приведены необязательные параметры, которые можно использовать для настройки поиска:

  • + -H +, сокращение от + - span-hosts +, заставляет + wget + сканировать субдомены и домены, отличные от основного (т. Е. внешние сайты).

  • + -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:///badlink1:
Remote file does not exist -- broken link!!!
https://www.digitalocean.com/thisdoesntexist:
Remote file does not exist -- broken link!!!

Шаг 3 - Поиск URL реферера

Шаг 2 сообщает о неработающих ссылках, но не идентифицирует веб-страницы рефералов, т. Е. Страницы вашего сайта, содержащие эти ссылки. На этом этапе мы найдем веб-страницы рефералов.

Удобный способ определить URL-адрес реферера - изучить журнал доступа веб-сервера. Войдите в систему * webserver-1 * и найдите в журналах Apache неработающую ссылку.

sudo grep Wget /var/log/apache2/access.log | grep "HEAD "

Первый + grep + в приведенной выше команде находит все запросы доступа + wget + к веб-серверу. Каждый запрос на доступ включает строку User Agent, в которой указан программный агент, отвечающий за создание веб-запроса. Идентификатор User Agent * для + wget +: + Wget / 1.13.4 (linux-gnu) +.

Второй + grep + ищет частичный URL неработающей ссылки (+ / badlink1 +). Используемый частичный URL - это та часть URL, которая следует за доменом.

Пример вывода из цепочки команд + grep + выглядит следующим образом:

111.111.111.111 - - [10/Apr/2015:17:26:12 -0800] "HEAD /badlink1 HTTP/1.1" 404 417 "http:///spiderdemo.html" "Wget/1.13.4 (linux-gnu)"

Ссылочный URL-адрес - это второй последний элемент в строке: + http: /// spiderdemon.html.

Заключение

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