Блог/Учет 404 страниц

Учет 404 страниц в Modx Evolution

Автор: Кудашев Сергей

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

Что мы можем сделать, чтобы избежать проблемы генерации несуществующих страниц через GET параметры и их индексации поисковыми системами. В первую очередь мы можем настроить robots.txt для запрета индексации наиболее популярных GET параметров:

User-agent: *
Disallow: /*_openstat
Disallow: /*gclid
Disallow: /*from
Disallow: /*utm

Но что делать, если мы хотим большего контроля над передаваемыми GET параметрами и формированием страниц. Для этого придется внести изменения в код системы Modx Revolution. Сразу оговорюсь, что данный метод полностью мой, поэтому если захотите его использовать, то делаете это на свой страх и риск.

Для добавления подобного функционала нам необходимо отредактировать index.php. После строк:

// Debugging mode:
$modx->stopOnNotice = false;

добавляем следующуй код:

//check for missing GET parametrs
if(array_filter($_GET) && (array_diff_key($_GET,array('q'=>'0')) && array_diff_key($_GET,array('q'=>'0','start'=>'0')) && array_diff_key($_GET,array('q'=>'0','search'=>'0')))) {
	header('HTTP/1.0 404 Not Found'); $modx->logEvent('0', 2, $_SERVER['REQUEST_URI'].' generate 404 error', '404');
}

, который фильтрует входящие GET параметры на тем, которые мы ожидаем получить. На все другие параметры сервер отдает 404 ошибку, после чего записывает запрос в базу данных. Если возникает необходимость добавить параметр, достаточно добавить конструкцию && array_diff_key($_GET,array('q'=>'0','param'=>'0')) в if() оператор. Посмотреть лог ошибок можно в разделе Reports (Отчеты) во вкладке System Events (Просмотр событий), только не забывайте ее регулярно очищать, так как он растет достаточно быстро.

Комментарии (0)