Основная цель поиск страниц которые ведут на страницы 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 — реферер.
Формируется тело письма, и отправляем.
Добрый день.
Так у вас не получиться так как в карту сайта попадают только страницы которые отдают 200 код. Но на этом же сайте есть лог полного сканирования и если его открыть простым текстовым редактором и поискать строку 404 то можно найти все страницы которые бот не нашел. То есть дополнительно ни какого софта больше не нужно.