Современная, быстрая и удобная система управления сайтом

Создание редиректов в MaxSite CMS

Архив записейКомментарии: 0Просмотров: 2996

При переносе сайта или смене «движка» часто возникает задача сохранить старые адреса. Например в 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 происходит без смены адресов.

Оставьте свой комментарий!

Комментарий будет опубликован после проверки

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)