Поиск 404 ошибки.

 

Основная цель поиск страниц которые ведут на страницы 404.

Первый этап был сканирование всех ссылок сайта и поиск битых ссылок.

Сканирование сайта.

Подготовка ссылок.

Первым делом проверяем есть ли у Вас карта сайта. Если нет, то ищем генератор sitemap, например https://gensitemap.ru/. Сохраняем xml файл, потом открываем его с помощью MS Exel, будет много предупреждений просто жмем Ок. Видим примерно следующее:

Удаляем заголовки и копируем первый столбец, потом вставляем ссылки в текстовый редактор, который сохраняет переходы на строку, в моем случае это Sublime Text 3, сохраняем как TXT.

Сканирование.

Скачиваем программу Xenu, ссылка и устанавливаем.

Запускаем и выбираем «Check URL List(Test)…», открываем файл с ссылками, после запуститься проверка ссылок. В процессе проверки лучше сохраняться(бываю сбои программы).

О том какие ссылки битые можно не показывать и не говорить, так будет понятно.

Отслеживание вызова страницы 404.

Для предотвращения появления новых 404 ошибок  и быстрого поиска написал простой скрипт который отправляет уведомление Вам на почту о том что был произведен переход на страницу 404.

<?php
if (isset($_SERVER['HTTP_REFERER'])) {
  $ref = $_SERVER['HTTP_REFERER'];
  if (strpos($ref, 'example-code.ru')) {
    $request = $_SERVER['REQUEST_URI'];
    $exceptions = [
    '.jpg','.jpeg','.png','.bmp','.gif', '.tiff',
     '.css','.js','.otf', '.ttf','.eot','.woff'
     ];
    foreach ($exceptions as $key => $var) {
      if (strrpos($request, $var))  {
        $match2[$var] = 1;
      }
    }
    if (count($match2) == 0) {
      $actual_link = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

      if($ref != $actual_link) {
        $to  = "<example@mail.com>" ;
        $subject = "Вызовы 404.";

        $message = '<p><b>From:</b> <a href="' . $ref . '">' . $ref . '</a></p>';
        $message.='<p><b>To:</b> <a href="'.$actual_link.'">'.$actual_link.'</a></p>';
        $message.='<p><b>Дата:</b> '.date('F, d.m.Y H:i:s').'</br></p>'."\n\n";
        $message.='<p><b>Дополнительные сведения:</b></br> '.implode('|',$_SERVER).'</p>';
        $headers  = "Content-type: text/html; charset=utf-8 \r\n";
        $headers .= "From: Сайт  <example@mail.com>\r\n";
        $headers .= "Reply-To: examplce@mail.com\r\n";
        mail($to, $subject, $message, $headers);
      }
    } else {
      die();
    }
  }
}
?>

Его можно внедрить в начале вызова шаблона 404 страницы.

Кратко о работе.

Проверяем, есть ли реферер. Проверяем что в реферере это страница моего сайта.

Проверяем адрес страницы вызова 404. Массив $exps хранит данные расширений(можно убрать, если не нужно) с которых не будет отправляться письмо и отображаться страница 404.

$actual_link — адрес текущей страницы.

$ref — реферер.

Формируется тело письма, и отправляем.

 

 

Один комментарий к “Поиск 404 ошибки.”

  1. Добрый день.
    Так у вас не получиться так как в карту сайта попадают только страницы которые отдают 200 код. Но на этом же сайте есть лог полного сканирования и если его открыть простым текстовым редактором и поискать строку 404 то можно найти все страницы которые бот не нашел. То есть дополнительно ни какого софта больше не нужно.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.