Устраняем дубли главной страницы в MODX Revolution

Внутренняя поисковая оптимизация сайта была и остается одним из основных методов поисковой оптимизации вообще. MODX Revolution в этом плане очень seo-ориентированная CMS. Очень, но не на 100%.

Одной из проблем, которая «из коробки» до сих пор не решена, является проблема дублей главной страницы, когда она доступна одновременно по нескольким адресам:
site.ru, site.ru/index.php или site.ru/index.php?id=1.

Как верно подметил Сергей Шлоков, есть замечательный пример вышесказанного – http://modx.com/index.php. Можете убедиться сами.

Для того, чтобы вопрос с дублями закрыть, создаем плагин со следующим содержанием:

<?php 
switch ($modx->event->name) {
    case 'OnHandleRequest':
        if (strpos($_SERVER['REQUEST_URI'],'index.php') !== false && $modx->context->get('key') != 'mgr') {
            if (!empty($_GET['id'])) {
                $id = (int)$_GET['id'];
                if (!$modx->getCount('modResource', array('id' => $id, 'published' => 1, 'deleted' => 0))) {
                    $modx->sendErrorPage();
                } 
            } else {
                $id = $modx->getOption('site_start', null, 1);
            }
            $modx->sendRedirect($modx->makeUrl($id),array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
        }
        break;
}

Плагин должен отслеживать событие «OnHandleRequest», то есть идем на страницу созданного плагина во вкладку «Системные события» и ставим на событии галочку.

 

Дубли главной страницы в MODX

 

Что делает плагин: делает он переадресацию – если в адресе указан id страницы, то MODX пытается переадресовать посетителя на страницу с этим id. Если такой страницы нет, то показывает страницу ошибки 404. Если параметр id отсутствует, плагин делает переадресацию пользователя на главную страницу сайта.

Итак, одной проблемой SEO меньше. Допускаем, что проблема не настолько серьезна, однако специалисты по продвижению проверяют дубли главной в первую очередь. Значит, проще сделать правильно сразу, чтобы не возвращаться к вопросу в дальнейшем.