Всем привет, друзья. Решил потихоньку продолжать пополнять блог публикациями по работе и настройке Google Analytics. Сегодня будет небольшая, но от этого не менее полезная заметка о том, как отслеживать 404 ошибки (404 Not Found) на сайте. Но не просто отслеживать, а получать еще очень полезную информацию: адрес страницы, которая отдала ошибку и страницу реферер (страницу с которой был совершен переход). Надеюсь, вы понимаете всю пользу этого метода.
Ведь если у вас большой сайт с десятками тысяч страниц, то отследить битые внутренние ссылки – задача не из легких. Хотя и на сайте с парой сотен страниц (а это любой среднестатистический блог) тоже проблематично найти неправильные ссылки. А если еще и структуру url’ов меняли, то вообще…
Короче, я надеюсь, что у вас уже давно установлен счетчик GA на сайте, при этом он новой версии (асинхронный код). Так ведь? Если еще не установили счетчик, то сделайте это, так как постепенно я планирую написать много полезных публикаций про настройку и отслеживание важных событий на сайте.
Хватит воды, приступаю к делу.
Для решения поставленной задачи (отследить битые ссылки и получить при этом максимум полезной информации) нам ничего сверхъестественного не понадобится, а всего лишь простой код:
<script type="text/javascript"> _gaq.push(['_trackPageview', '/error404?page=' + document.location.pathname + document.location.search + '&from=' + document.referrer]); </script> |
Я понимаю, что я не первый, кто об этом пишет, но все варианты, найденные мной в сети, либо для устаревшего кода GA, либо вообще не работают, потому я экспериментировал, пока не получил рабочий вариант.
Итак, представим, что мы сейчас работаем с движком WordPress, а потому идем в админку -> Внешний вид -> Редактор -> Шаблон ошибки 404 (404.php)
Далее в любое место этого файла вставляем указанный выше код. Я вставлял код сразу после заголовка <h2 class="center">Ошибка 404 — Не найдено</h2>.
Я думаю, что и для всех других более или менее приличных движков есть отдельный шаблон вывода сообщения об ошибке. Например, для DLE в папке своего шаблона надо найти файл info.tpl и туда вставить этот код.
Предлагаю сейчас еще раз взглянуть на код и понять, что же он делает и какие данные определяет:
'/error404?page=' + document.location.pathname + document.location.search + '&from=' + document.referrer |
Разбираем:
- location.pathname – возвращает путь в url’е.
Например, для страницы https://alaev.info/blog/post/2784 будет возвращено значение /blog/post/2784 - location.search – возвращает запрос в url’е.
Например, для страницы https://alaev.info/feedback.html?email=example@mail.ru будет возвращено значение ?email=example@mail.ru - document.referrer – возвращает url документа с которого был совершен переход, иными словами реферер.
Пример, я полагаю, не нужен, и так все понятно ;)
Теперь вернемся к коду Google Analytics:
_gaq.push(['_trackPageview', '/error404?page=' + document.location.pathname + document.location.search + '&from=' + document.referrer]); |
Этот код передает в статистику просмотр страницы, а нашем случае это будет виртуальная страница /error404 с последующими параметрами, определяемыми JS-скриптом, описанными выше.
Теперь мы знаем, как это работает, пришло время рассказать о некоторых особенностях:
- Код для отслеживания ошибки должен ОБЯЗАТЕЛЬНО идти после основного кода GA. То есть, если код GA стоит у вас в футере, то это не сработает, надо перенести код ближе к началу документа, например, поставить его сразу после открывающего тега <body>.
- Код отслеживания ошибки генерирует виртуальную страницу дополнительно к передаваемой странице, отдающей ошибку 404, стандартным кодом. То есть при просмотре страницы с ошибкой в статистике фиксируется просмотр сразу двух страниц, самой несуществующей страницы и виртуальной страницы /error404.
- Особенностей предыдущего пункта можно избежать только в том случае, если на всех страницах сайта у вас будет вставлен стандартный код GA, а в шаблоне страницы ошибки будет измененный код GA.
Например, на всех страницах сайта такой код:
<script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-XXXXXXXX-X']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script>
А на странице ошибки такой:
<script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-XXXXXXXX-X']); _gaq.push(['_trackPageview', '/error404?page=' + document.location.pathname + document.location.search + '&from=' + document.referrer]); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script>
После всех настроек данные об ошибках можно найти в отчете: Содержание -> Содержание сайта -> Страницы -> в форме поиска пишем «error404». В новом интерфейсе (интерфейс GA, к слову, меняется чуть ли не каждый месяц, так что будьте внимательны) отчет расположен тут: Поведение -> Контент сайта -> Все страницы -> в форме поиска так же пишем «error404».
Вроде и все. Извиняюсь за то, что в посте нет скриншотов, ошибок у меня нет на блоге (это хорошо, разумеется), а тестовые ошибки показывать как-то не круто.
Надеюсь, эти настройки вам помогут в улучшении вашего сайта. А еще не забудьте прочитать еще один мой пост про Google Analytics: Учим Google Analytics понимать поисковый трафик!
не совсем вас понял что будет если у меня на странице с 404 ошибкой выводиться стандартный код GA и после него будет идти указанный вами код. у меня сайт работает на drupal и код отслеживания выводиться модулем на всех страницах
Я об этом и писал — в вашем случае (как, собственно, и в моем на всех моих сайтах) счетчик зафиксирует сразу два просмотра страницы. Например, в отчете Google Analytics зафиксируется страница http://site.ru/page-which-not-found.html (это раз) и страница http://site.ru/error404?page=/page-which-not-found.html&from=/referrer-page.html (это два),
где:
/page-which-not-found.html — страница, которая не существует и, соответственно, отдает ответ 404 Not Found;
/referrer-page.html — страница с которой совершен переход на страницу, которая не существует.
Понятно?
Для WordPress можно заюзать плагин http://wordpress.org/extend/plugins/email-404/
И получать сообщения в почту.
Зачем плагин? Зачем почта? Это все ерунда, когда есть универсальный вариант, который не спамит и никакого мусора в движке ;)
Проблема решается с помощью xenu
Ну да, вероятно это и подойдет для очень небольших сайтов.
Попробуйте просканировать сайт где, несколько десятков тысяч страниц, много миллионов внутренних ссылок и...этого хватит, чтобы неполучить нужных результатов.
Нет, я серьезно, вы попробуйте прямо сейчас! А я буду ждать от вас ответа ;)
А как прописать в joomla 1.7 у меня с ним проблемы???
В Joomla есть такой файлик, который лежит в папке templates/system/error.php, это самостоятельная html-страница.
Поэтому вам надо будет не отдельно код вставлять туда, а полностью измененный код счетчика. Как раз для вас подойдет пункт в посте после слов "Особенностей предыдущего пункта можно избежать".
Вставьте модифицированный код сразу после открывающего тега <body>. Все будет работать!
У меня вопросик хотть и не по теме но я так понял вы знатаки джумла. Скажите плиз где можно исправить в шаблоне сайта в верхней шапке надпись адресса фирмы там стоит заголовок h1. Из за этой ошибки сайт в поиске выводит совсем нето что надо сперва.
Нет, это не так, я не люблю и не пользуюсь Джумлой, к вашему сожалению. А с ответом на предыдущий комментарий мне помог программист. Как только он будет в сети я попрошу его ответить на ваш комментарий.
У меня cms modx любую страницу смогу настроить как хочу, вопрос про код GA
1)Нужно ли вписывать дополнительные строки из поста про GA как научить распознавать другие поисковые системы помимо стандартных в код для страницы 404?
2)У меня сама страница ошибки 404 задана в движке т.е. я номер страницы пишу в поле и создаю страницу 404.
А потом я когда хочу ее проверить пишу имядомена.ру/керщткиш и отдает мне ошибку 404
Страница которую я создаю доступна по адресу имя домена/404 — она везде и подгружается
Как мне лучше сделать? создать отдельный счетчик для страницы 404 +(дополнительные поля из вопроса №1 который выше написал)
Просто в моем случае конкретной страницы нет, вернее она есть, но на нее с ошибочных страниц не редиректит, а просто подгружает шаблон и отдает правильную ошибку
1. Да, надо вписывать, на всякий случай.
2. Я смутно что понял, на самом деле :( Но 100% вариант — взять и добавить в шаблон, который подгружается при 404 ошибке, тот JS-код, который указан в начале поста и все будет работать!
Что-то путанно написали:(
Правильно ли я вас понял:
если вставить в код ГА строчку _gaq.push (['_trackPageview', '/error404?page=' + document.location.pathname + document.location.search + '&from=' + document.referrer]);
и поместить код ближе к началу страницы, — то все будет работать, но засчитываться будут две страницы.
Чтобы этого избежать надо просто в код шаблона страницы об ошибке вставить текущий код ГА, но с добавлением строки _gaq.push (['_trackPageview', '/error404?page=' + document.location.pathname + document.location.search + '&from=' + document.referrer]);
Может и путано, но мне все понятно =)
Чтобы не было «двойного» просмотра, надо сделать так, чтобы на всех страницах сайта вставлялся стандартный код GA, а на страницах 404 немного измененный. А измененный он только в одном месте
В стандартном коде GA есть такая строчка:
А в измененном строчка заменяется на такую:
Понятно?
Ага. спасибо.
Про настройку корзины не хотите написать?;)
Про настройку отслеживания действий покупателей в разделе корзины для интернет-магазинов?
Неее... Я дела с интернет магазинами не имел, и не собираюсь пока, так что в этом вопросе я не компетентен :(
А возможно настроить через отдельный профиль и фильтры в профиле, но с возможностью, просмотра страницы, откуда попали на 404
Это вопрос или утверждение?
Вопрос и утверждение! Знаю, что можно, не знаю как...
Я не интересовался этим моментом. Но мне это и не надо, а чем вас не устраивает описанный выше вариант?
Для сервера типа Apache должен быть файл у папки со страницами сайта и названием
.htaccess и содержанием файла хотя бы:
ErrorDocument 404 /?error=404
Это зачем, по вашему мнению?
Содержание-Все страницы. Там есть возможность выбрать основной параметр — заголовок.
Далее фильтруем по заголовку (title) страницы с ошибкой — ну к примеру Страница не найдена.
Далее Дополнительный параметр-Целевая страница.
На друпальный сайт кто нить ставил данный код?
После сделанных манипуляций перестал индексировать страницы гугл. Яндекс как индексировал так и индексирует! В чем может быть проблема?
Проблема уж точно не в настройках, описанных в посте :)
Подскажите, данная схема:
В стандартном коде GA есть такая строчка:
_gaq.push (['_trackPageview']);
А в измененном строчка заменяется на такую:
_gaq.push (['_trackPageview', '/error404?page=' + document.location.pathname + document.location.search + '&from=' + document.referrer]);
Как будут показаны страницы, если пользователь перешел со стороннего сайта или из поисковика. Будет работать? Просто сейчас сделали перенос сайта и все урл перенесли на другие по 301 редиректу, хотелось бы отследить страницы с 404 на которые заходят из сторонних сайтов, а не по внутренним ссылкам. Спасибо.
Заходите в отчет: Содержание — Содержание сайта — Все станицы,делайте там поиск по error404
А если в страницу с выводом счетчика добавить условие пхп, <? if ($mode=='error404') : ?> то выводим код счетчика с отслеживание страниц 404, если <? else: ?>, то есть если страница существует, то выводим страндартный код ГА, тогда не будет такой проблемы когда считается два захода итд.
Сделал как Вы и написали. Основной код аналитикса — в хедере. В коде 404 страницы после <h2> добавил скрип. После этого добавил сисмовлы к урл — получил 404 ошибку пару раз. Но в статистике ничего нет... тут же нужно смотреть в Аналитиксе — http://prntscr.com/9cua39?
Во вкладке События посмотрите.
В событиях вообще пусто — http://prntscr.com/9dxtz0. При размещения комментария я указывал адрес сайта на котором реализовано. Если можно, посмотрите, пожалуйста, почему может не работать данный метод на моем сайте... Вроде сделал же все как написано... Заранее благодарен.
Здравствуйте, Саша.
Так и не получил от Вас ответа... Возможно мой комментарий с адресом сайта попал в спам и Вы его не видели... :( Все еще надеюсь, что сможете помочь мне советом, почему описанный Вами метод может не работать на моем сайте на вордпрессе... Все сделал как написано, тем более пример у Вас для вордпрессе как раз, а статистики нет... В чем может быть проблема? Заранее благодарен за ответ.
В новом интерфейсе отчет расположен тут: Поведение -> Контент сайта -> Все страницы -> в форме поиска так же пишем «error404».
Спасибо за ответ. Но я там тоже проверял и смотрел сразу же — тоже нет данных...
В heder.php перед закрывающимся тегом </head> вставлен код Аналитикса.
В 404.php после заголовка <h2> вставлен скрипт из статьи — вот http://prntscr.com/9s1a60, но данных почему-то нет... :((
Значит что-то не правильно. У меня стата есть в GA до сих пор, хотя я данный отчет с момента написания поста не смотрел.
Все сделал как написано в статье. На скриншотах это показал в комментариях. Значит Ваш метод при каких-то условиях — не работает... :(