Предисловие: Новая рубрика

Порой самописные сайты и сайты с корявыми CMS полны технических огрехов и недоработок, что, в свою очередь, плодит множество ошибок при индексировании сайта поисковыми системами.

Чаще эти вещи не видны невооружённым взглядом, а ещё чаще даже не предполагаются как проблема в принципе.

Открываем новую рубрику, куда будем складывать сухой код для решения проблем по части настройки сайтов, доработки движков и прочих «костылей» из серии «когда ждать разработчика нет сил и смысла. Сделаем всё сами — спасибо!».

Чит-код

Назовём её «Чит-код». В названии прекрасно всё: тут и любые многими читы, упрощающие жизнь, тут и код — команды и инструкции для программ.

Если что-то может пойти не так, именно так оно и пойдёт

Например, если страница на вашем сайте по адресу https://your-site.ru/page-with-slashes/// будет открываться без проблем и адрес в строке браузера так и останется с кучей слешей на конце, то знайте что для поисковиков:

  • https://your-site.ru/page-with-slashes///
  • https://your-site.ru/page-with-slashes//
  • https://your-site.ru/page-with-slashes/
  • https://your-site.ru/page-with-slashes

Это четыре разные страницы. Хотя уверен, показывают они одно и тоже.

Исправляем недоразумение

Добавляем в файл .HTACCESS следующий код

RewriteCond %{THE_REQUEST} // 
# Проверяем, повторяется ли слеш (//) более двух раз. 
RewriteRule .* /$0 [R=301,L] 
# Исключаем все лишние слеши.

Любые недоразумения с повторяющимися слешами будут редиректится в один, тем самым не плодя малополезные клоны одной страницы.

Убрать несколько слешей в конце url на Битриксе

Если код выше не сработал, то скорее всего ваш сайт работает на Битриксе в связке FastCGI (Nginx + PHP-FPM), и правила в .HTACCESS для него пустой звук.

Можно настроить редиректы в файлах конфигурации Nginx, но доступ к ним очень редко дают да и то, если сайт крутится на выделенном сервере. А это для небольших проектов, как правило, экзотика и как “пушкой по воробьям”.

Поэтому делаем «костыль» — убираем слеши в URL с помощью PHP

Как это сработало у меня.

  1. С помощью FTP заходим на сайт
  2. Ищем /bitrix/header.php
  3. В конце файла внутри синтаксиса PHP вставляем необходимый код
  4. Готово! Редиректы заработают и повторяющиеся слеши исчезнут.

Вот код:

$subject = $_SERVER["REQUEST_URI"];
$pattern = '/\/\/+/';
$countReplace = 0;
$replaced_url = preg_replace($pattern, '/', $subject, -1, $countReplace);
if ($countReplace > 0)
LocalRedirect($replaced_url, false, '301 Moved Permanently');

Как это вообще возможно?!

Если честно, поисковые системы специально не будут искать такие технические дыры в вашем сайте. Боты ходят по ссылкам и по специально указанным страницам в файле sitemap.xml и шансы найти именно дубли с повторяющимися слешами маловероятны.

Но вот если кто-то специально подскажет боту, направив ссылкой, а то и не одной…

Чисто моё мнение, что вышеописанный код просто подстраховка от любителей чёрного SEO и недалёких конкурентов-технарей.

Также некоторые алерт-сервисы ругаются и надоедают, найдя возможности для пессимизации. Один раз настроил и забыл.

Что такое .HTACCESS?

Если вы не знаете зачем этот файл нужен, где он находится и за что отвечает, то срочно закрывайте эту страницу!

Файл для настройки веб-сервера не место для баловства и учебных экспериментов.

Подпишись, будет интересно!
14 комментариев
  1. Нихера не понятно , что за код , куда и как ставить его…в каком виде ? Как написано в тексте с русскоязычным текстом ????

  2. Доброй ночи! Спасибо за статью. Я столкнулся с этой темой и предполагал, что вопрос “натянут”. Подсажите а как могут “кто-то специально подскажет боту, направив ссылкой, а то и не одной”.
    Код применю. А еще голову морочат технические дубли “Верхний регистр”. На сайте такого нет, но… Нашел код поставил, но что то потом сай начало “колбасит”, с трудом восстановил. И подскажите есть темы WordPress, у которых данной проблемы нет. Смотрел, но в файле .HTACCESS, нет ничего. А надеялся подсмотреть 🙂

    1. Юрий, добрый день! Публично не готов распространяться о “черных” методах SEO. Всё это баловство и провокация в неопытных и хитрых руках.

      В WordPress проблем со слешами давно уже нет на уровне движка. От темы это вообще не зависит. Тема — это надстройка, украшение на движок, оболочка в конце концов.

      Манипуляции с HTACCESS, как правило, нужны на рукописных сайтах и устаревших (морально и технически) CMS’ках, которые нет возможности обновить или поставить другую. Такие костыли необходимы, когда клиент не готов обновлять платформу своего бизнеса.

      1. Спасибо за ответ! Но wordpress и когда ставлю лишние слеши не пропадают. Код ставил. Начинается конфликт в админке. Появляется смешанное содержание. С трудом удалось восстановить. Так как есть rel canonical, решил не обращать внимание.
        Спрашивал , как могут бот вывести на такие странице, ведь они не в индексе, что бы понять процесс и что то не понятное на сайте творилось. Появлялась ошибка 400, в связи не правильном наборе URL. По убирал в браузере куки, вроде прошло потом опять, не понятка. В корне сайта появились вчера несколько файлов httaccess, не понятного происхождения, как будто от кеширующих плагинов. Ну сегодня первый день нормально. Код заново опасаюсь ставить

  3. Спасибо за статью. Пытаюсь избавиться от множественных слэшей на bitrix. По вашему совету отредактировал index.php . На главной странице лишние слэши удаляются, но на прочих страницах не работает. Как сделать, чтобы на всех страницах работало?

    1. Спасибо за отклик, Павел!

      Делаем более универсальный вариант:

      из index.php убираем код и вставляем его в файл /bitrix/header.php. Главное, чтобы весь код был внутри синтаксиса PHP.

      Добавил этот вариант вместо старого в статью. Обновляйте страницу и ищите подробную инструкцию!

  4. Спасибо за полезную статью! Но у меня еще один вопрос) Со слешем понятно, а если у меня сайт открывается и в таком виде сайт.ру/???????????53455513456, как сделать что бы он удалил все лишнее после слеша и вернул адрес к виду сайт.ру ?

    Спасибо!

Отставить отзыв

Ваш адрес email не будет опубликован. Обязательные поля помечены *