Ситуация:
Сделали новый сайт для компании вместо старого. Осталось заменить старый на новый. Но обычно забывают про наращённую ссылочную массу старым сайтом. Если раньше yandex проиндексировал страницу о компании по адресу /company/ , то теперь /o-kompanii/ . При переходе по старой ссылке новый сайт вернет 404 ошибку.
Задача:
Найти все рабочие ссылки ведущие на сайт и для них сделать редирект.
Решение:
Первым делом составляем список рабочих ссылок на сайт. Сделаем на примере сайта www.rbc.ru
Пишем в строку поиска yandex следующий запрос, который покажет все ссылки на ваш сайт в этой поисковой системе:
host: www.rbc.ru
Для google:
site: www.rbc.ru
Составляем файл в excel, где первая колонка старые адреса сайта, во второй новые.
Содержание
- Как реализовать редирект со старых страниц на новые в 1с-Битрикс.
- Редирект с адресов с параметрами.
- 404 страница при отсутствующей странице
- 404 страница при отсутствующем элементе инфоблока
- Код ответа сервера 200
Как реализовать редирект со старых страниц на новые в 1с-Битрикс.
Логично, что, если человек перейдет на новый сайт по старым ссылкам, он получит 404 ошибку.
Проверьте, что в настройках комплексного компонента каталога->Настройки 404 ошибки, стоит устанавливать статус 404. А в настройках главного модуля->Системные ошибки должна отсутствовать галочка Посылать в заголовке статус 200 на 404 ошибку.
Находим в корне сайта файл 404.php, который создается по умолчанию. Его нужно привести к такому виду:
Создаем директорию /redirect/ с двумя файлами old и new. В первый копируем все ссылке из первой колонки excel файла, а во второй файл из второй колонки. Важно, что бы сохранился одинаковый порядок и соответствие, т.е. например 3-ья ссылка из файла new должна соответствовать 3-ей ссылке из old.
Теперь разберем файл 404.php
//old файл со ссылками старого сайта
//new файл со ссылками нового сайта
//циклом проходимся по ссылкам старого сайта
//если ссылка по которой перешли на сайт, совпадает с одной из файла old, то устанавливаем код странице 301(что означает перемещен навсегда), далее идет переадресация на страницу, которая соответствует старой ссылке на новом сайте(ссылке в файле new)
Exit – прекращение выполнения скрипта.
Если в файле old не нашлось текущей страницы, то страница вернет 404 ошибку.
Редирект с адресов с параметрами.
Предыдущее решение к сожалению не учитывает переданные параметры:
http://rbc.ru/catalog/? > Если на новый сайт перейдут по этой ссылке и в его структуре есть раздел /catalog/, то он не отдаст код 404, т.к. страница существует, просто передана переменная id равная 2. Мы можем воспользоваться этим.
Благо сайты с организацией такой структуры встречаются редко.
В этой ситуации можно использовать тоже самое решение, только код нужно разместить в главном шаблоне сайта:
Файл new будет содержать ссылки, как и в предыдущем примере, а в old значения, которые может принимать id.
Читайте также о том, как сделать редирект 301 с www на без www статья тут.
Если же вам нужно визуальное управление редиректами, рекомендую установить модуль Редирект Мастер.
В нем можно удобно создать редиректы через админку, загрузить их из Excel, сгенерировать редиректы при изменения ЧПУ или настроить их автоматическое создание.
Модуль доступен в Маркетплейс 1С-Битрикс.
Как многие уже успели заметить, что когда мы в Битриксе заходим в каталог или другой инфоблок, в несуществующий раздел или элемент, нам выдается надпись «Раздел не найден» или «Элемент не найден». А вот если заходим на несуществующую страницу, то выдается страница 404.
Так вот что можно сделать, чтобы всегда и везде нас отправляло на страницу 404.
В footer.php находим код:
И вставляем в него код, который будет отправлять нас при обнаружении несуществующей страницы:
GetCurPage(true) !=’/404.php’) LocalRedirect(‘/404.php’);
?>
Главное, не забудьте в настройках инфоблока указать, чтобы при обращении к несуществующему разделу или элементу ему присваивался статус 404 ошибки.
Даже с такой простой функцией сайта, как отображать 404 страницу возникает множество сложностей. В интернете все советует решать эту проблему добавлением событий в файл init.php, прописывать в nginx:
но все эти пути решения неверные, чтобы все правильно работало не нужно что-то специально добавлять. Давайте попробуем с этим разобраться основательно.
404 страница при отсутствующей странице
Для начала необходимо понять отображается ли 404 страница при запросе на несуществующую страницу или раздел. Набираем несуществующую страницу и видим 404 ошибку, если нет, то проблема в следующем:
- В корне сайта нет файла 404.php, добавляем:
Конечно ваша верстка может отличаться, как и содержимое этой страницы, важно чтобы в этом файл присутствовали следующие строчки:
- Смотрим какая страница отображается вместо 404 страницы, этот вариант почему-то все упускают и начинают городить функции с событиями или редактировать конфиг веб-сервера. Если отображается например страница со списком новостей, то значит в вашем файле urlrewrite.php есть неверная CONDITION**, например она будет выглядеть вот так:
Такое просиходит потому, что при настройке компонента bitrix:news на странице /news/index.php было указано вот так:
Меняем на верное:
Делаем пересоздание правил обработки адресов на странице _/bitrix/admin/urlrewritereindex.php и страница с ошибкой заработает.
Других ситуаций в принципе возникнуть не может, в nginx если вы используете BitrixVM или например конфиг из нашей другой статьи 1С-Битрикс + Nginx + php-fpm + композитный сайт, ничего менять не надо. Если сами писали конфиг для nginx, то за появление ошибки отвечают опции:
для apache это строки файла .htaccess:
для windows server правило для 404 ошибки находится в строчках файла web.config:
404 страница при отсутствующем элементе инфоблока
Тут все еще проще. У компонентов есть опции:
они и должны быть включены, то есть иметь значение Y или стоять галка, если вы настраиваете в редакторе компонента.
Код ответа сервера 200
В этом случае открываем настройку главного модуля и убираем галку с опции Посылать в заголовке статус 200 на 404 ошибку.
Источник: