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