[NotFoundParamAlert] - отслеживание несуществующих страниц с заданными URL параметрами

В очередной раз на крупном клиентском проекте, где настроены все виды контекста, обнаружил, что часть рекламных объявлений ведет на несуществующие страницы. Опять кто-то обновил структуру сайта, кто-то забыл об это сказать, а следовательно не были обновлены URL объявлений. Такое происходит регулярно из-за рассогласованности действий тех, кто занимается контентом и тех, кто контекстом. При этом если Google AdWords о несуществующих страницах предупредит, хоть и не сразу, то Яндекс Директ об этом вам не расскажет, он проверяет код ответа страницы и сообщает о проблемах только при добавлении объявления. И как правило, находятся подобные объявлениями, ведущие на несуществующие страницы, не сразу, а когда кто-то заподозрит неладное и полезет в статистику.

Для того, чтобы больше не наступать на эти грабли, не терять бюджеты и посетителей, решил написать компонент, которым хочу поделиться. Возможно данный компонент будет кому-то полезен, позволит сохранить нервы и деньги, или просто позволит избежать подобных проблем.




Логика работы компонента NotFoundParamAlert простая: на событие 'OnPageNotFound' вешается плагин, который сравнивает параметры указанные в URL с заданными ему параметрами (в том числе с использованием самых простых подстановок:? — один любой символ, * — группа символов), и в случае совпадения генерирует уведомление. Например, для Яндекс.Директ с настроенными UTM метками будет актуально использовать такую конструкцию: utm_*,_openstat,yclid.

На данный момент реализованы два основных варианта оповещения о проблемах:

— сгенерированное уведомление может быть послано на email, указанный в настройках,
— сгенерированное уведомление может быть добавлено в лог с возможностью задать уровень логирования,
— возможно выполнение обоих вышеперечисленных вариантов одновременно.

Компонент поддерживает следующие настройки (неймспейс notfoundparamalert):
  • parameters – список URL параметров, через запятую, для отслеживания. Допускается использование простых подстановок:? — один любой символ, * — группа любых символов.
  • parameters_all – учитывать ли все переданные URL параметры или только совпадающие.
  • alert_method – способ уведомления. Доступные значения: «log» – логирует сообщение, «mail» – отправляет сообщение на email, «both» – использует оба способа доставки сообщения.
  • alert_log_level – уровень логирования сообщений. Доступные значения: «error», «warn», «info», «debug».
  • mail_method – способ отправки почты. Доступные значения: «php» – встроенная в php функция mail(), «modx» – MODX мейлер.
  • mail_from – валидный email с которого будут отправляться уведомления.
  • mail_to – валидный email на который будут отправляться уведомления.
Пакет можно скачать на гитхабе. Был подан в modstore.pro и в официальный репозиторий, пока не одобрено.
Все замечания, предложения и пожелания по работе компонента пишите так же на гитхаб :)

Update: компонент был немного доработан и таки был был добавлен в официальный репозиторий и на modstore.pro.
Кудашев Сергей
20 февраля 2018, 05:29
2
621
+9

Комментарии: 5

Павел Романов
20 февраля 2018, 11:54
+3
Плюсанул, но можно autoReditector поставить )…
    Кудашев Сергей
    20 февраля 2018, 12:11
    +1
    Павел, можно. Я им пользуюсь почти на всех проектах, кстати, спасибо Илье :)

    Но это не совсем правильно, водить пользователя с контекста через цепочку редиректов. Все таки с моей точки зрения объявление должно вести на страницу, которая сразу отдаст 200 ответ заголовка. Да и спасибо за идею, надо подумать есть ли смысл отслеживать аналогичные параметры при редиректе.
Bor
Bor
03 ноября 2018, 23:55
0
Можно ли просто установить данный компонент и начать получать список URL страниц, на которые заходили пользователи и им открывалась 404 страница?
А то установил, но информации в списке так и нет.
    Кудашев Сергей
    04 ноября 2018, 11:46
    +1
    И да и нет. В настройках можно задать в notfoundparamalert.parameters значение * и тогда плагин будет собирать все несуществующие страницы со всеми GET параметрами.

    Но тут необходимо учитывать один момент, компонент заточен именно для сбора несуществующих страниц с GET параметрами, поэтому для срабатывания страница должна их содержать. В основе компонента используется метод объекта Request getParameters(), который вырезает из запроса все части запроса связанные с формированием URL страницы, поэтому страницы без GET параметров логироваться не будут.

    На пальцах это выглядит так:
    www.example.com/manger/ — не сработает, так как GET параметры отсутствуют
    www.example.com/manger/?test=1 — сработает, так как GET параметр присутствует

    И тут есть два варианта, если Вы хотите проверить работает ли компонент, то можете сами составить запрос на несуществующую страницу с нужными параметрами. Например в настройках notfoundparamalert.parameters устанавливаем в _open* и сами физически заходим на заведомо несуществующую страницу с данным GET параметром, например www.example.com/advertisingg.html?_openstat=FleD5yGst1ZxN. После этого проверяем залогировалось ли и тогда можно быть уверенным, что все посещения пользователей несуществующих страниц с аналогичной меткой будут залогированы.

    Либо если Вы хотите собирать все несуществующие страницы, то можно установить logpagenotfound от одного из создателей MODX.
      Bor
      Bor
      05 ноября 2018, 22:02
      0
      Ясно. Спасибо за столь развернутый ответ!