При переносе сайта или смене «движка» часто возникает задача сохранить старые адреса. Например в MaxSite CMS принято в ЧПУ указывать тип данных: page, category и т.п. А, скажем, в WordPress ЧПУ настраивается произвольно и многие вебмастера формируют шаблона на основе каких-то своих предпочтений. Понятно, что если переходить на MaxSite CMS, то адреса могут смениться. Главная проблема здесь возникает в том, что потребуется некоторое время на новую индексацию поисковиков и при этом будет утеряны рейтинги PR, потому что Гугл присваивает значение для каждой страницы сайта.
Второстепенный момент - если какие-то страницы «раскручены», то смена её адреса может сказаться на общей посещаемости сайта.
MaxSite CMS предлагает несколько вариантов решений таких задач.
Первый и самый простой способ - это воспользоваться плагином редиректа, который входит в комплект системы.
Необходимо задать шаблон или точный входящий и конечный адреса.
Если посетитель входит по старому адресу, плагин на этапе инициализации системы, находит новый и автоматом делает редирект.
Кроме этого можно сразу указать тип редиректа: 301 или 302. 301-редирект используется, когда требуется сообщить поисковику, что страница перемещена постоянно; 302 - времено. Понятно, что для вебмастера наибольший интерес представляет именно 301-редирект.
С помощью плагина редиректа удобно задавать небольшие объемы адресов. Но иногда возникает задача сделать перенос целого сайта на MaxSite CMS и таких редиректов может возникнуть десятки или сотни. В этом случае довольно проблематично прописывать их все в плагине, да и придется постоянно поддерживать их в актуальном состоянии.
На сей счёт лучше воспользоваться другим способом. В этом варианте редирект делаем только в случае возникновения 404-ошибки. То есть посетитель обращается по старому адресу и не находя запись переходит на 404-тип. Система проверит наличие старого адреса в метаполях всех записей и, найдя в них входящий адрес (это и есть старый адрес), сделает редирект на адрес найденной записи.
Рассмотрим пошагово.
В meta.ini своего шаблона указываем секцию для адреса:
[Старый адрес] options_key = redirect type = textfield description = "Укажите старый адрес записи. Адрес указывается относительно сайта, например для адреса <strong>http://site.com/mypage.html</strong> указываем <strong>mypage.html</strong>" default = ""
В своём шаблоне делаем каталог type в который копируем из default-шаблона файл page_404.php. Перед строчкой
if ( mso_get_option('page_404_http_not_found', 'templates', 1) ) ...
Добавляем код:
// все адреса для редиректов require(getinfo('template_dir') . 'redirect-url.php'); // адреса в массив $my_redirect = explode(" ", $redirect_url); // есть вхождение? if (in_array(mso_current_url(), $my_redirect) !== false) { $pages = mso_get_pages(array( 'no_limit' => true, // все записи без лимита 'pagination' => false, // пагинация не нужна 'type' => false, // все типы записей 'get_page_count_comments' => false, // комментарии не нужны 'get_page_categories' => false, // рубрики не нужны 'content' => false, // тексты не нужны 'custom_type' => 'tag', // получаем как тип tag (мета) // мета-поле где указывается первоначальный адрес относительно сайта // поле определяется в meta.ini шаблона 'meta_key' => 'redirect', 'slug' => mso_current_url(), // ищем текущий url в значении redirect ), $par); if ($pages) // есть страницы { // адрес для редиректа $url = 'page/' . $pages[0]['page_slug']; mso_redirect($url, false, '301'); // делаем 301-редирект } }
Данный код подключает файл redirect-url.php в шаблоне, где в текстовом виде хранятся адреса для редиректов. После обработки адресов, происходит поиск старого адреса в мета-данных записей и, если такой адрес находится, то на неё происходит 301-редирект. Если же такой записи нет, то происходит стандартная выдача 404-страницы.
Файл redirect-url.php должен быть такого вида:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); $redirect_url = 'contact.shtml about.shtml day.shtml';
Каждый адрес размещается в одной строчке. Адреса задаются относительно сайта.
Как вариант, если предполагается, что адреса будут меняться, можно сделать опцию в options.ini шаблона, где и указывать список. Значение опции подставлять в $redirect_url. В этом случае адреса задаются в админ-панели, без необходимости править файл redirect-url.php.
Чтобы получить список адресов можно воспользоваться различными сервисами по созданию карты сайта, а если сайт зарегистрирован в sape.ru, то можно экспортом данных страниц:
На выходе будет обычный текстовый файл, в котором нужно будет только убрать ведущий слэш (/).
В заключении два момента, которые могут влиять на редиректы.
Первый. В MaxSite CMS можно опционально указывать отправку 404-заголовка для ненайденных страниц. Бывают ситуации, когда после переноса сайта нужно обеспечить сохранность адресов (хотя бы временно), не заботясь об их содержимом. В этом случае мы просто отключаем 404-заголовок и поисковики как и прежде видят «найденные страницы». Посетитель же получает стандартную страницу с «ничего не найдено».
Данная опция находится в Настройках шаблона - 404 http-заголовок:
Второй момент. MaxSite CMS поддерживает синонимы страниц для типов page и category. Например, страница site.com/page/about и site.com/about будут синонимами. Аналогично для рубрик: site.com/category/news и site.com/news. Сделано это из двух соображений: ради небольшой совместимости с ЧПУ WordPress (как наиболее популярного «движка»), так и ради получения короткой ссылки.
Если вам не нравится такая возможность, то её можно отключить в файле /application/config/mso_config.php
$config['mso_permalink_no_slug'] = "no";
И последнее. Для WordPress'а лучше всего использовать шаблон ЧПУ, который является полностью совместимым с MaxSite CMS:
При таком ЧПУ переход на MaxSite CMS происходит без смены адресов.