Наверх

Отправляем уведомление об открытии 404 страницы на сайте

Перенес блог на новый дизайн и столкнулся с тем, что пользователи стали иногда попадать на 404 страницу (по сообщениям из метрики). Решил узнать, какие страницы у пользователей не открываются. В итоге написал плагинчик, который, в принципе, можно использовать на любом сайте для того, чтобы не терять посетителей и сразу узнавать о проблемах с несуществующими страницами.



Создаем плагин на событие OnPageNotFound:
<?php
if ($modx->event->name != "OnPageNotFound") return;

$mailto = 'mail@ilyaut.ru';

$uri = $_SERVER['REQUEST_URI'];
if (substr($uri, 0, 1) == "/") $uri = substr($uri, 1);

$params = array(
    'referer' => $_SERVER['HTTP_REFERER'],
    'backlink' => urldecode($_SERVER['HTTP_REFERER']),
    'searchbot' => $_SESSION['searchrobot'],
    'searchtext' => $_SESSION['searchtext'],
    'uri' => $uri
);

$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->setHTML(true);
$modx->mail->set(modMail::MAIL_SUBJECT, 'Уведомление о 404 странице');
$modx->mail->set(modMail::MAIL_BODY, $modx->getChunk('404notify', $params));
$modx->mail->set(modMail::MAIL_SENDER, $modx->getOption('emailsender'));
$modx->mail->set(modMail::MAIL_FROM, $modx->getOption('emailsender'));
$modx->mail->set(modMail::MAIL_FROM_NAME,  $modx->getOption('site_name'));
$modx->mail->address('to', $mailto);

if (!$modx->mail->send()) {
    $modx->log(xPDO::LOG_LEVEL_ERROR, 'An error occurred while trying to send the email: '
    . $modx->mail->mailer->ErrorInfo);
}

$modx->mail->reset();

И чанк 404notify для оформления письма:
<h2>Обнаружен переход на несуществующую страницу</h2>
<p>Пользователь открыл ссылку и был отправлен на страницу 404:
<a href="[[++site_url]][[+uri]]">[[++site_url]][[+uri]]</a></p>

<p><strong>Источник перехода:</strong> <a href="[[+referer]]">[[+backlink]]</a></p>

Поисковая система: <strong>[[+searchbot]]</strong>, запрос: <strong>[[+searchtext]]</strong>

Поисковую систему и запрос определяет плагин addCrawler, про который писал Виктор Банев.


17 комментариев

  1. Владимир 07 марта 2014, 12:42 # 0
    Нужная в хозяйстве вешь! Спасибо. Было бы здорово эти плагины оформить в один пакет и ставить из репозитария, так как это опять претендует на must have
    1. Роман 07 марта 2014, 14:17 # 0
      Супер!
      1. Алексей Инютин 08 марта 2014, 09:21 # 0
        Илья, доброго времени суток!
        Подскажите пожалуйста, как можно с Вами связаться?
        напишите на почту pirat19[собака]gmail.com

        Спасибо!
        1. Илья Уткин 11 марта 2014, 19:20 # 0
          Ответил на почту.
        2. Rоман Роман 10 марта 2014, 18:47 # 0
          Кстати весьма полезная вещь в хозяйстве, особенно когда пытаются ломиться на страницы /administrator/ и /wp-login/. Можно заранее лочить хотя бы по IP
          1. Rоман Роман 18 марта 2014, 20:18(Комментарий был изменён) # 0
            Решено, невнимательно читал письмо
            1. Владимир 19 апреля 2014, 01:26 # 0
              Мои извинения, не заметил
              $mailto = 'mail@ilyaut.ru';, полагал что получателя то же из emailsender плагин берет.
              Соответственно наслал писем я с десяток на mail@ilyaut.ru
              Виноват)
              1. Владимир 19 апреля 2014, 13:45 # 0
                Доброго дня! При том, что плагин работает отлично, есть такой момент:
                при открытии в админке документа, с использованием визуального редактора, происходит обращение к файлу изображения, в путь к файлу добавляется папка manager что приводит к отправке сообщения 404:
                «Пользователь открыл ссылку и был отправлен на страницу 404: http://***********.ru/manager/images/admin/klapanu/FP/fp.gif
                Источник перехода: http://***********.ru/manager/index.php?a=30&id=105»
                На самом деле изображения все есть ( папка пока в корне /images/admin/** так как сайт переносился с джумлы).
                1. vgrish 19 апреля 2014, 23:40(Комментарий был изменён) # 0
                  в плагин поставьте проверку на пользователя. чтоб срабатывал только на анонима. И думаю все ок будет
                2. Илья 12 августа 2014, 12:04 # 0
                  Хороший плагин, вот только откуда в день десяток сообщений о посещений 404 ошибок не с моего сайта не понимаю(
                  1. сергей 23 июня 2016, 10:56 # 0
                    а если у меня smtp только доступно для отправки почты, как это использовать?
                    1. Илья Уткин 23 июня 2016, 11:01 # 0
                      Можно использовать уже готовое дополнение Notify404
                      1. сергей 23 июня 2016, 11:38(Комментарий был изменён) # 0
                        получилось и с текущим решением отправить, работает.

                        но почему то не определяется поисковой запрос который реализован по инструкции community.modx-cms.ru/blog/tips_and_tricks/17110.html
                        1. Илья Уткин 23 июня 2016, 12:12 # 0
                          А дело в том, что Яндекс стал шифровать REFERER и теперь запрос никак не определить — только используя Яндекс-Метрику.
                          1. сергей 23 июня 2016, 12:13(Комментарий был изменён) # 0
                            он оно чо. Спасибо Илья!
                    2. Игорь 12 сентября 2018, 08:49 # 0
                      Илья, день добрый!

                      Подскажите, ваш плагин выше отрабатывает если открываются виртуальные страницы (в моем случае генерируются страницы пользователей по их нику). Физически этих страниц на сайте нет, есть маршрутизатор. Как заставить плагин не реагировать на виртуальные страницы?
                      1. Илья Уткин 24 сентября 2018, 09:08 # 0
                        Попробуйте «поиграться» с приоритетом вызова плагинов

                      Авторизация

                      через сервис Loginza:


                      Шаблоны MODX

                      1 2 Дальше »

                      Объектная
                      модель
                      MODX